使用多个分隔符将文本文件拆分为数组
本文关键字:文件 拆分 数组 文本 分隔符 | 更新日期: 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]);
}