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

本文关键字:文件 拆分 数组 文本 分隔符 | 更新日期: 2023-09-27 18:20:51

我有一些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-~

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

如果您能够识别或了解模式,那么最好的方法就是使用正则表达式。周围有很多教程,看看用正则表达式分析文本文件。

我最终从底层解析了文本文件,并将这些部分添加到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]);
        }