如何遍历文本文件行

时间:2014-03-07 13:58:45

标签: c# string char substring text-files

我有一个文本文件,其中包含我需要处理的行。这是我文本文件中存在的行的格式..

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。请帮忙。

1 个答案:

答案 0 :(得分:0)

我不知道在阅读文件时能够倒退(除了使用seek()方法之外),但我可能错了......

更简单的方法是:

  1. 创建字典,键值为长数值,而值为其所属的行:<2265507967,07 IVIN 15:37 06/03 022 00:00:14 600 2265507967 0:03>

  2. 一次浏览一行文件,然后:

    一个。如果该行包含ITRS,请从该行中获取值并检查您的词典。找到它后,清除字典并返回步骤1.

    湾如果它不包含ITRS,只需将数字和行添加为键值对。

  3. 这应该比一次通过一行更快,也更简单。缺点是它可能非常耗费内存。

    编辑:我没有方便的.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);
        }
    }