在.txt中搜索文本

时间:2012-12-21 20:33:16

标签: c# search text

搜索看起来像这样的文本文件的最佳方法是什么??

  

efee || NBR |地址|姓名|电话|城市|州|邮编
abc   || 455 | gsgd | first last | gsg | fef | jk | 0393
gjgj || jfj | ddg
  |第一个最后| fht | ree | hn | th ...更多行...

我首先阅读文件及其所有上下文与streamreader 我在考虑计算“|”并使用子字符串抓住第5和第6之间的文本,但我不知道如何计算“|”。或者,如果有人有更好的想法,我会对此持开放态度。 试过这样的事情:

StreamReader file = new StreamReader(@"...");
        string line;
        int num=0;
        while ((line = file.ReadLine()) != null)
        {
            for (int i = 1; i <= 6; i++)
            {
                if (line.Contains("|"))
                {
                    num++;
                }
            }
            int start = line.IndexOf("|");

            int end = line.IndexOf("|");
            string result = line.Substring(start, end - start - 1);
        }

我想要的文字总是在第5和第6之间“|”

4 个答案:

答案 0 :(得分:2)

你可以这样做:

var res = File
    .ReadLines(@"FileName.txt")
    .Select(line => line.Split(new[]{'|'}, StringSplitOptions.None)[5])
    .ToList();

这会从文件中生成List<strings>,其中每个字符串都是从第五个和第六个'|'分隔符之间取得的文件对应行的一部分。

答案 1 :(得分:1)

对于分隔文件,您应该使用解析器 - Microsoft.VisualBasic.FileIO命名空间中有一个 - TextFieldParser类,但您也可以查看第三方库,如流行的{{3} }。

更简单的方法是在string.Split字符上使用|并在返回的string[]的相应索引中获取值,但是,如果任何字段被转义并且可以在内部有效地包含|,这将失败。

答案 2 :(得分:0)

您可以将每一行拆分为一个数组:

while ((line = file.ReadLine()) != null)
{
    var values = line.Split('|');
}

答案 3 :(得分:0)

这应该有效

string txt = File.ReadAllText("file.txt");
string res = Regex.Match(txt, "\\|*?{5}(.+?)\\|", RegexOptions.Singleline).Result("$1");