Помогите мне разобрать следующий формат файла - PullRequest
0 голосов
/ 17 января 2011

Мне нужно проанализировать сторонний текстовый файл в следующем формате

WE BUY  : 10 000.00 USD                      
VALUE   : 281210
RATE    : 30.2600

Итак, общий шаблон:

TAG, некоторый разделитель,:, someseparator, VALUE

Допустим, я начал с File.ReadAllLines, поэтому я имею дело с отдельными строками.

Каков наилучший способ анализа значений?

ОБНОВЛЕНИЕ

У меня нет документации для этого формата, но давайте предположим, что он основан на позиции.

1) ":" всегда является 9-ым символом в строке, 2)VALUE - 11-й символ3) Неиспользуемые пробелы заполнены пробелом.

Давайте поговорим об этом формате.

ОБНОВЛЕНИЕ 2

Я думаю о том, лучше ли RegExВот?Например, скажем, у меня есть подзадача найти

RATE : 30.2600

во всем тексте и извлечь 30.2600, учитывая, что начинается с 11-го символа

Ответы [ 2 ]

3 голосов
/ 17 января 2011

Для каждой строки:

   string[]  parts = line.Split(':');
   // assert parts.Length == 2
   string tag = parts[0].Trim();
   string[] values = parts[1].Split(' ', SplitOptions.NoDupes);  // or ','
1 голос
/ 17 января 2011

Относительно анализа данных, считанных из файла, рассмотрите возможность использования регулярных выражений. В этом случае вы должны быть внимательны, хотя для разделителя, т.е. убедитесь, что разделитель (: в нашем случае) случайно не найден в теге или части значения.


            string pattern = "^(?<TAG>[^:]+):(?<VALUE>.+)$";

        string dataReadFromFile = "WE BUY  : 10 000.00 USD\r\nVALUE   : 281210 \r\nRATE    : 30.2600\r\n";

        Regex rx = new Regex(pattern, RegexOptions.Multiline); // Multiline important

        MatchCollection mc = rx.Matches(dataReadFromFile);

        foreach (Match m in mc)
        {
            Console.WriteLine("{0}->{1}", m.Groups["TAG"].Value.Trim(), m.Groups["VALUE"].Value.Trim());
        }

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

...