使用readline方法从文本中获取特定行

时间:2012-12-12 14:29:39

标签: c#

我想使用ReadLine方法从文本中获取指定的行

这是我的代码

for (int p = 0; p < 100; p++)
{
    var files = await ApplicationData.Current.LocalFolder.GetFileAsync(logid.Text + ".txt");
    var lines = await FileIO.ReadLinesAsync(files);
    var pattern = sm.SelectedItem.ToString();
    var sline = lines[p].Contains(pattern);

    lv.items.add(lines[sline]);
}

问题是var sline未转换为int,因此行无法读取它。

实际的程序是仅从选定的组合框中的行包含模式添加文本。

1 个答案:

答案 0 :(得分:2)

您的问题是您需要在列表中搜索行匹配模式。您的代码只查看前100行,并查看其中是否包含您想要的文本。 Contains()方法返回一个bool - 而不是一个字符串。

我不完全确定你为什么要随意循环到100?你正在阅读的文件总是会有100行吗?我想你正在寻找更多这样的东西?你可以完全放弃循环。

var files = await ApplicationData.Current.LocalFolder.GetFileAsync(logid.Text + ".txt");
var lines = await FileIO.ReadLinesAsync(files);
var pattern = sm.SelectedItem.ToString();

// try to look up a line in the list the has the pattern we're looking for in it.
var targetLine = lines.FirstOrDefault(line => line.Contains(pattern));
if (!string.IsNullOrEmpty(targetLine))
    lv.items.add(targetLine);

如果您可能有超过1行匹配该模式,您将需要使用linq的Where()迭代所有这些结果。

foreach (string line in lines.Where(line => line.Contains(pattern))
    lv.items.add(line);