搜索看起来像这样的文本文件的最佳方法是什么??
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之间“|”
答案 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");