我有.txt文件,有300 000行。有没有办法从该文件中提取特定字符串(行)并保存在另一个.txt或excel中仅提取行? 我谈论日志文件,其中我保存了一些请求,并为每个请求花费了时间。我想要做的只是提取每个请求的时间,然后我将计算平均所用时间。
希望你们明白我在说什么。
编辑: .txt文件的格式为纯文本,每个请求都以。所以我有:
Starting date
//body of response from server
End date
Time: 3150,0792 ms <--- time taken
所以,我有10 000个请求和10 000个响应。我只需要提取每个时间,因为我会花很多时间手动滚动整个.txt文件并检查每次。
答案 0 :(得分:4)
你可以通过文件类
来实现它using (StreamWriter sw = File.AppendText("File2.txt"))
{
foreach (string line in File.ReadLines(@"d:\File1.txt"))
{
if (line.Contains("TheWordInLine"))//This is the line you want by matching something
{
sw.WriteLine("line);
}
}
}
答案 1 :(得分:4)
您可以尝试使用MemoryMappedFile
和TextReader
。 MMF允许您访问大文件,文本阅读器允许您逐行处理文件。
using (var mmf =
MemoryMappedFile.CreateFromFile(@"c:\large.data", FileMode.Open
{
using (MemoryMappedViewStream stream = mmf.CreateViewStream())
{
TextReader tr = new StreamReader(stream);
while ((line = sr.ReadLine()) != null)
{
Console.WriteLine(line);
}
}
}
答案 2 :(得分:3)
当然,您可以使用StreamReader / StreamWriter:
using (var input = File.OpenText("input.log"))
using (var output = File.CreateText("output.log"))
{
string line;
while ((line = input.ReadLine()) != null)
{
if (SomeConditionOnLine(line))
{
output.WriteLine(line);
}
}
}
这将逐行读取输入文件,因此一次只在内存中有一行,如果此行满足您要查找的某些条件,则将其写入输出文件。它会很快并且消耗很少的内存,它可以用于巨大的输入文件。
答案 3 :(得分:3)
private void extract_lines(string filein, string fileout)
{
using (StreamReader reader = new StreamReader(filein))
{
using (StreamWriter writer = new StreamWriter(fileout))
{
string line;
while ((line = reader.ReadLine()) != null)
{
if (line.Contains("what you looking for"))
{
writer.Write(line);
}
}
}
}
}
答案 4 :(得分:2)
正如其他人已经说过的那样,有一个格式的例子会很有用。 无论如何,你可以找到这个有用的工具:
http://filehelpers.sourceforge.net/
我在工作中使用它,它允许您解析和写入不同的文件格式。 希望它有所帮助