Разбить текстовый файл на массив, используя несколько разделителей - PullRequest
2 голосов
/ 20 января 2012

У меня есть несколько файлов 2k для сравнения блок за блоком, но эти блоки определены по-разному.Как лучше всего разбить каждый файл на соответствующий список блоков, а затем сравнить каждый тип блока с одним и тем же типом блока?

Типы блоков:

  • HL *
  • EB *
  • SE *
  • GE *
  • IEA *

Пример файла - я добавил пробелы для лучшей читаемости, нофайлы не имеют пробелов.

    useless-Text-useless-Text-~
    useless-Text-useless-Text-useless-Text-~

    HL*Block1'HL'text-Block1'HL'text-Block1'HL'text-Block1'HL'text-~
    Block1'HL'text-Block1'HL'text-~

    HL*Block2'HL'text-Block2'HL'text-~
    Block2'HL'text-Block2'HL'text-~

    HL*Block3'HL'text-Block3'HL'text-Block3'HL'text-~
    Block3'HL'text-~

    EB*Block1'EB'Text-Block1'EB'Text-Block1'EB'Text-~
    Block1'EB'Text-Block1'EB'Text-~
    Block1'EB'Text-Block1'EB'Text-~

    EB*Block2'EB'Text-Block2'EB'Text-Block2'EB'Text-~
    Block2'EB'Text-Block2'EB'Text-~
    Block2'EB'Text-Block2'EB'Text-~

    EB*Block3'EB'Text-Block3'EB'Text-Block3'EB'Text-~
    Block3'EB'Text-Block3'EB'Text-~
    Block3'EB'Text-Block3'EB'Text-~

    EB*Block4'EB'Text-Block4'EB'Text-Block4'EB'Text-~
    Block4'EB'Text-Block4'EB'Text-~
    Block4'EB'Text-Block4'EB'Text-~

    EB*Block_N'EB'Text-Block_N'EB'Text-Block_N'EB'Text-~
    Block_N'EB'Text-Block_N'EB'Text-~
    Block_N'EB'Text-Block_N'EB'Text-~

    SE*Block1'SE'Text-Block1'SE'Text-~
    Block1'SE'Text-~

    GE*Block1'GE'Text-~
    IEA*Block1'IEA'Text-~

Ответы [ 2 ]

1 голос
/ 20 января 2012

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

0 голосов
/ 25 января 2012

Я закончил анализ текстовых файлов снизу вверх и добавил эти разделы в списки

        List<String> listHL_Base = new List<String>();
        List<String> listEB_Base = new List<String>();
        List<String> listSE_Base = new List<String>();

        StreamReader streamReader = new StreamReader(baseFile);
        string textBASE = streamReader.ReadToEnd().Trim();
        streamReader.Close();

        //we start scanning file from the button to up)           
        string[] textBASE_Step1 = Regex.Split(textBASE, "GE\\*");
        textBASE = textBASE_Step1[0];

        string[] textBASE_Step2 = Regex.Split(textBASE, "SE\\*");
        for (int i = 1; i < textBASE_Step2.Length; i++) //creating list with SE values
        {
            listSE_Base.Add(textBASE_Step2[i]);
        }

        textBASE = textBASE_Step2[0]; //remainder (beginning) of the file, without GE, or SE. Only  EB's and HL's Left
        string[] textBASE_Step3 = Regex.Split(textBASE, "EB\\*");
        for (int i = 1; i < textBASE_Step3.Length; i++) //creating list with EB values
        {
            listEB_Base.Add(textBASE_Step3[i]);
        }
...