我有一个文本文件,其中包含我需要处理的行。这是我文本文件中存在的行的格式..
07 IVIN 15:37 06/03 022 00:00:14 600 2265507967 0:03
08 ITRS 15:37 06/03 022 00:00:09 603 7878787887 0:03
08 ITRS 15:37 06/03 022 00:00:09 603 2265507967 0:03
现在按照我的要求,我必须逐行阅读这个文本文件。现在,只要我ITRS
进入任何一行,我就必须搜索数字2265507967
,直接进入上行文本文件行。一旦它在上行中获得2265507967
,它应该读取该行。
现在我正在读取字符串并根据空格分成字符。这是我的代码..
var strings = line.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
我的问题是我没有办法遍历文本文件并搜索子字符串.i.e。 2265507967
。请帮忙。
答案 0 :(得分:0)
我不知道在阅读文件时能够倒退(除了使用seek()
方法之外),但我可能错了......
更简单的方法是:
创建字典,键值为长数值,而值为其所属的行:<2265507967,07 IVIN 15:37 06/03 022 00:00:14 600 2265507967 0:03>
一次浏览一行文件,然后:
一个。如果该行包含ITRS
,请从该行中获取值并检查您的词典。找到它后,清除字典并返回步骤1.
湾如果它不包含ITRS
,只需将数字和行添加为键值对。
这应该比一次通过一行更快,也更简单。缺点是它可能非常耗费内存。
编辑:我没有方便的.NET编译器,所以我将提供一些伪代码来更好地解释我的答案://Initialization
Dictionary<string, string> previousLines = new Dictionary<string, string>();
TextReader tw = new TextReader(filePath);
string line = String.Empty;
//Read the file one line at a time
while((line = tw.ReadLine()) != null)
{
if(line.contains("ITRS")
{
//Get the number you will use for searching
string number = line.split(new char[]{' '})[4];
//Use the dictionary to read a line you have previously read.
string line = previousLines[number];
previousLines.Clear(); //Remove the elements so that they do not interrupt the next searches. I am assuming that you want to search between lines which are found between ITRS tags. If you do not want this, simply omit this line.
... //Do your logic here.
}
else
{
string number = line.split(new char[]{' '})[4];
previousLines.Add(number, line);
}
}