繁体   English   中英

读取文本文件中包含字符串的最后一行?

[英]Read a last line containing string in a text file?

我有一个文本文件:

ABCD - 11111
111212
13121


ABCD - 1213
12312
34534


ABCD - 21312
123123
123123

我如何从最后一行读取以'ABCD'开头的文件结尾。 在上面的示例中,结果为:

ABCD - 21312
123123
123123

首先将文件读取为字符串,然后使用LastIndexOf(“ ABCD”)查找您的图案最后一次出现的位置,最后使用SubString提取它。

 string path = @"c:\temp\MyTest.txt"; 
 string readText = File.ReadAllText(path);
 int position = readText.LastIndexOf("ABCD");
 string toEnd = readText.Substring(position ,readText.Length - position).

如果将文件读取为string ,则可以使用SubstringLastIndexOf来实现。

string inputText = "ABCD - 11111\n111212\n13121\n\n\n" +
                   "ABCD - 1213\n12312\n34534\n\n\nABCD - 21312\n123123\n123123";
string remainingText = inputText.Substring(inputText.LastIndexOf("ABCD"));

LastIndexOf将确定字符串ABCD所在的最后一个索引(在本例中为54)。

然后, Substring将删除该索引之前出现的所有文本,从而为您提供预期的结果。

因此, remainingText将包含值:

ABCD - 21312\n123123\n123123

使用System.IO命名空间的方法File.ReasAllText将读取txt文件的内容。 将值分配给字符串变量。

File.ReadAllText("sample.txt");

然后找到字符串ABCD的最后一次出现

// Find the last occurrence of ABCD.
int index = sString.LastIndexOf('ABCD');

然后使用子字符串从最后一个索引获取字符串值。

 string subStr = sString.Substring(index);

如果您想要提高性能或效率,则不会将整个文件读入内存(尤其是当文件很大时)。 我将使用带有Seek方法的FileStreams从文件的最后三行开始读取。 确切的实现取决于您的数据格式。 如果您没有最后三行的严格格式,则从每个字节的末尾字节开始读取,直到读取三行为止。 当然,代码不是那么简单,但是您可以获得最佳效率。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM