C # - чтение в текстовом файле; разбор для конкретного текста - PullRequest
0 голосов
/ 12 мая 2010

У меня есть текстовый файл данных, который содержит такой текст:

"[category.type.group.subgroup]" - "2934:10,4388:20,3949:30"
"[category.type.group.subgroup]" - "2934:10,4388:20,3949:30"
"[category.type.group.subgroup]" - "2934:10,4388:20,3949:30"
"[category.type.group.subgroup]" - "2934:10,4388:20,3949:30"
34i23042034002340 ----- 
"[category.type.group.subgroup]" - "2934:10,4388:20,3949:30"
"[category.type.group.subgroup]" - "2934:10,4388:20,3949:30"
828728382 ------ 3498293485  AAAAAAA

Мне нужен лучший способ для анализа данных, в частности мне нужны категория, тип, группа, подгруппа и числовые значения в кавычках. Я думал об использовании Regex, но мне было интересно, есть ли другие идеи вместо нескольких операторов IF для анализа данных?

Ответы [ 3 ]

3 голосов
/ 12 мая 2010

Если вы используете Regex, вам не понадобится несколько операторов IF. Примерно так можно прочитать несколько значений одним регулярным выражением:

Regex parseLine = new Regex(@"(?<num1>\d+)\:(?<num2>\d+)\,(?<num3>\d+)", RegexOptions.Compiled);
foreach (string line in File.ReadAllLines(yourFilePath))
{
  var match = parseLine.Match(line);
  if (match.Success) {
    var num1 = match.Groups["num1"].Value;
    var num2 = match.Groups["num2"].Value;
    var num3 = match.Groups["num3"].Value;
    // use the values.
  }
}
0 голосов
/ 12 мая 2010
string reg = "\"\\[([^.]+)\\.([^.]+)\\.([^.]+)\\.([^.]+)\\]\"\\s+-\\s+\"([0-9]+):([0-9]+),([0-9]+):([0-9]+),([0-9]+):([0-9]+)\"";
Regex r = new Regex(reg);
Match m = r.Match(aline);
if (m.Success)
{
    string category = m.Groups[1];
    string type = m.Groups[2];
    string group = m.Groups[3];
    string subgroup = m.Groups[4];
    string num1 = m.Groups[5];
    // and so on...
}

EDIT Просто увидел, что вы можете иметь произвольное количество наборов чисел. Следующее должно обрабатывать это:

        string reg = "\"\\[([^.]+)\\.([^.]+)\\.([^.]+)\\.([^.]+)\\]\"(\\s+-\\s+\"(([0-9]+):([0-9]+),?)+\")?";
        string reg2 = "([0-9]+):([0-9]+),?";
        Regex r = new Regex(reg);

        Console.WriteLine(a);
        Console.WriteLine(reg);
        Match m = r.Match(a);
        if (m.Success)
        {
            string category = m.Groups[1];
            string type = m.Groups[2];
            string group = m.Groups[3];
            string subgroup = m.Groups[4];

            MatchCollection mc = Regex.Matches(m.Groups[5].Value, reg2);
            List<string> numbers = new List<string>();
            foreach (Match match in mc)
            {
                numbers.Add(match.Groups[1].Value);
                numbers.Add(match.Groups[2].Value);
            }
        }
0 голосов
/ 12 мая 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...