Что Я Должен Сделать, Чтобы Проанализировать Текст Внутри Файла?

#c# #file #parsing

#c# #файл #разбор

Вопрос:

Я хочу прочитать info1.txt файл и хотите записать в другой текстовый файл info2.txt таким образом.

 Id Name Address DOB Phone 1 abcd efg 1/16/2021 987654323 2 hijkl mno 2/16/2021 678987652  

Содержание info1.txt файл выглядит следующим образом:

 Id:1 Name:abcd Address:efg DOB:1/16/2021 3:31:22 PM Phone:987654323  

И в info2.txt будет похоже на формат таблицы выше,о котором я упоминал, также хочу удалить «3:31:22 вечера». Блок кода, который я разработал для решения этой проблемы, доступен ниже:

 static void Main(string[] args) {  FileStream fsRead = new FileStream("E:\info1.txt", FileMode.Open, FileAccess.Read);  StreamReader srObj = new StreamReader(fsRead);  FileStream fsWrite = new FileStream("E:\info2.txt", FileMode.Create, FileAccess.Write);  StreamWriter swObj = new StreamWriter(fsWrite);   while (srObj.Peek() gt; 0)  {  string str;  string[] strArray;    str = srObj.ReadLine();  str = str.Replace(" 3:31:22 PM", "");  strArray = str.Split(':');   if (strArray.Length gt; 1)  {  swObj.Write(strArray[1]);  swObj.Write(" ");  }  }    swObj.Close();  fsWrite.Close();  srObj.Close();  fsRead.Close();   Console.ReadKey(); }  

Комментарии:

1. Эта строка: 1/16/2021 3:31:22 PM является строковым представлением DateTime объекта. Это: 1/16/2021 также является строковым представлением даты-времени (возможно, той же даты-времени). Если вы хотите избавиться от компонента времени, позвоните .Date (что приведет к обнулению временных частей даты-времени). Или вы можете просто отформатировать его по-другому. Не делайте того, что вы делаете (редактируйте его из строки), просто отформатируйте его по-другому

Ответ №1:

Я бы проанализировал файл в виде списка словарей, где ключами каждого словаря являются столбцы.

Сначала разделите строки файла на массив строк. Вы можете использовать File.ReadAllLines для этого. Затем отправьте массив в эту функцию, которая анализирует строки.

 public static Listlt;Dictionarylt;string, stringgt;gt; Parse(string [] lines) {  Listlt;Dictionarylt;string, stringgt;gt; data = new Listlt;Dictionarylt;string, stringgt;gt;();  Dictionarylt;string, stringgt; temp = new Dictionarylt;string, stringgt;();  foreach (var line in lines) {  var parts = line.Split(new[] { ':' }, 2);  if (parts.Length == 2) {  temp[parts[0]] = parts[1];  }  else {  if (temp.Count gt; 0) data.Add(temp);  temp = new Dictionarylt;string, stringgt;();  }  }  if (temp.Count gt; 0) data.Add(temp);  return data; }  

Затем создайте функцию для записи списка в файл.

 public static void PrintTable(Listlt;Dictionarylt;string, stringgt;gt; users, TextWriter stream) {  if (users.Count == 0) return;    // Print the header line  foreach(var pair in users[0]) {  stream.Write("{0,-12}", pair.Key);  }  stream.WriteLine();    foreach (var user in users) {  foreach(var pair in user) {  // Special handling for DOB  if (pair.Key == "DOB") stream.Write("{0,-12}", pair.Value.Split(' ')[0]);  else stream.Write("{0,-12}", pair.Value);  }  stream.WriteLine();  } }