C #: чтение данных из текстового файла - PullRequest
2 голосов
/ 16 ноября 2010

У меня есть .EDF (текстовый) файл. Содержимое файла выглядит следующим образом:

    ConfigFile.Sample, Software v0.32, CP Version 0.32
    [123_Float][2]
    [127_Number][0]
    [039_Code][70]

Я хочу прочитать эти элементы и разобрать их следующим образом:

    123_Float - 2
    127_Number - 0
    039_Code - 70

Как я могу сделать это с помощью C #?

Ответы [ 3 ]

5 голосов
/ 16 ноября 2010

Ну, вы можете начать с метода File.ReadAllLines().Затем выполните итерацию по строкам в этом файле, проверяя, соответствуют ли они шаблону.Если они это сделают, извлеките необходимый текст и сделайте с ним все, что вы хотите.

Вот пример, который предполагает, что вы хотите строки в формате [(field 1)][(field 2)]:

// Or wherever your file is located
string path = @"C:\MyFile.edf";

// Pattern to check each line
Regex pattern = new Regex(@"\[([^\]]*?)\]");

// Read in lines
string[] lines = File.ReadAllLines(path);

// Iterate through lines
foreach (string line in lines)
{
   // Check if line matches your format here
   var matches = pattern.Matches(line);

   if (matches.Count == 2)
   {
      string value1 = matches[0].Groups[1].Value;
      string value2 = matches[1].Groups[1].Value;

      Console.WriteLine(string.Format("{0} - {1}", value1, value2));
   }
}

Это выводит их вокно консоли, но вы, очевидно, можете делать все, что захотите, с value1 и value2 (записать их в другой файл, сохранить в структуре данных и т. д.).

Также обратите внимание, что регулярные выражения не являются моей сильной стороной - возможно, есть более элегантный способ проверить, соответствует ли строка вашему шаблону:)

Если вам нужна дополнительная информация, проверьтестатья MSDN о чтении данных из текстового файла в качестве отправной точки.

2 голосов
/ 16 ноября 2010

Давайте предположим, что ваш файл действительно так прост, как вы его описали.Затем вы можете удалить первую строку и проанализировать строки данных следующим образом:

foreach (string line in File.ReadAllLines(@"C:\MyFile.edf").Skip(1))
{
    var parts = line.Split("][");
    var value1 = parts[0].Replace("[", "");
    var value2 = parts[1].Replace("]", "");

    Console.WriteLine(string.Format("{0} - {1}", value1, value2));
}
0 голосов
/ 16 ноября 2010

Еще один вариант.

var lines = File.ReadAllLines(file)
    .Skip(1)
    .Select(x => x.Split(new[] { '[', ']' }, 
        StringSplitOptions.RemoveEmptyEntries));
foreach(var pair in lines)
{
    Console.WriteLine(pair.First()+" - "+pair.Last());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...