Я начинающий программист на С#, и у меня только что был быстрый вопрос о приложении, которое я создаю. Мой процесс считывает несколько файлов с целью удаления определенных записей на основе поля с разделителями 1 или 0 в текстовом файле. На самом деле это последнее поле с разделителями в файле. Если это 0, я записываю его во временный файл (который позже заменит исходный, который я читал), если это что-то еще, я этого не делаю. И не хочу слишком запутывать, но в файле есть два типа записей: строка заголовка, за которой следуют несколько вспомогательных строк. Строка заголовка — единственная, у которой есть флаг, поэтому, как вы можете видеть снизу, если логическое значение установлено в хорошую запись, равное 0, оно записывает запись заголовка вместе со всеми вспомогательными записями под ней, пока не достигнет плохой один, и в этом случае он отменит их запись до следующего хорошего.
Однако то, что я пытаюсь сделать сейчас (и хотел бы узнать самый простой способ), - это как написать запись заголовка без поля с разделителями последней трубы (IE флаг). Поскольку это всегда должны быть последние 2 символа строки (например, «0|» или «1|», так как требуется предшествующая вертикальная черта), должна ли она быть обрезкой строки в моей строке inputrecord? Есть ли более простой способ? Есть ли способ разделить запись, но не включать последнее поле (в данном случае поле 36)? Любой совет будет принят во внимание. Спасибо,
static void Main(string[] args)
{
try
{
string executionDirectory = RemoveFlaggedRecords.Properties.Settings.Default.executionDirectory;
string workDirectory = RemoveFlaggedRecords.Properties.Settings.Default.workingDirectory;
string[] files = Directory.GetFiles(executionDirectory, "FilePrefix*");
foreach (string file in files)
{
string tempFile = Path.Combine(workDirectory,Path.GetFileName(file));
using (StreamReader sr = new StreamReader(file,Encoding.Default))
{
StreamWriter sw = new StreamWriter(tempFile);
string inputRecord = sr.ReadLine();
bool goodRecord = false;
bool isheaderRecord = false;
while (inputRecord != null)
{
string[] fields = inputRecord.Split('|');
if (fields[0].ToString().ToUpper() == "HEADER")
{
goodRecord = Convert.ToInt32(fields[36]) == 0;
isheaderRecord = true;
}
if (goodRecord == true && isheaderRecord == true)
{
// I'm not sure what to do here to write the string without the 36th field***
}
else if (goodRecord == true)
{
sw.WriteLine(inputRecord);
}
inputRecord = sr.ReadLine();
}
sr.Close();
sw.Close();
sw = null;
}
}
string[] newFiles = Directory.GetFiles(workDirectory, "fileprefix*");
foreach (string file in newFiles)
{
string tempFile = Path.Combine(workDirectory, Path.GetFileName(file));
string destFile = Path.Combine(executionDirectory, Path.GetFileName(file));
File.Copy(tempFile, destFile, true);
if (File.Exists(destFile))
{
File.Delete(tempFile);
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
finally
{
// not done
}
}
Take(count)
, чтобы взять все поля, кроме последнего, а затем снова присоединиться к ним, чтобы записать... - person Jason Goemaat   schedule 14.11.2014