使用多个分隔符将文本文件拆分为数组

时间:2012-01-20 16:27:59

标签: c# text split edi

我有一些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 个答案:

答案 0 :(得分:1)

如果您能识别或了解模式,那么最好的方法是使用正则表达式。 有很多教程,请看Parse Text Files With Regular Expressions

答案 1 :(得分:0)

我最终解析了自下而上的文本文件,并将这些部分添加到了Lists

        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]);
        }