3

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

费用|| 编号| 地址| 姓名 |电话|城市|州|邮编
abc ||455|gsgd |first last|gsg |fef |jk |0393
gjgj||jfj|ddg
|first last|fht |ree |hn |th ...更多行.. .

我首先使用我正在考虑计算“|”的流式阅读器读取文件及其所有上下文 并使用子字符串获取第 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

4 回答 4

2

你可以这样做:

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

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

于 2012-12-21T20:38:41.610 回答
1

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

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

于 2012-12-21T20:40:29.117 回答
0

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

while ((line = file.ReadLine()) != null)
{
    var values = line.Split('|');
}
于 2012-12-21T20:37:09.093 回答
0

这应该工作

string txt = File.ReadAllText("file.txt");
string res = Regex.Match(txt, "\\|*?{5}(.+?)\\|", RegexOptions.Singleline).Result("$1");
于 2012-12-21T20:41:21.003 回答