抓取两行之间的文本
Grab text between two lines
我刚刚开始学习,在处理文件时遇到了问题。
我有一个方法有两个输入,一个在我想要的行的开头(lineStart),另一个在行的结尾(lineEnd)
我需要在这两个数字之间提取并写入文件的方法。
ex ) lineStart = 20 , lineEnd = 90, in output 必须是 txt 文件的 = 21-89 行。
string[] lines = File.ReadAllLines(@"");
int lineStart = 0;
foreach (string line0 in lines)
{
lineStart++;
if (line0.IndexOf("target1") > -1)
{
Console.Write(lineStart + "\n");
}
}
int lineEnd = 0;
foreach (string line1 in lines)
{
lineEnd++;
if (line1.IndexOf("target2") > -1)
{
Console.Write(lineEnd);
}
}
// method grabText(lineStart,lineEnd){}
enter code here
一行代码而已
string[] lines = File.ReadLines(@"").Skip(lineStart).Take(lineEnd-lineStart);
另请注意,我使用的是 ReadLines 而不是 ReadAllLines。第一个不会将所有内容加载到内存中。
不太清楚线条的边界是什么,但当然很容易调整计算
如果您的文本文件很大,请不要将其读入内存。也不找索引,一行一行处理:
bool writing = false;
using var sw = File.CreateText(@"C:\some\path\to.txt");
foreach(var line in File.ReadLines(...)){ //don't use ReadAllInes, use ReadLines - it's incremental and burns little memory
if(!writing && line.Contains("target1")){
writing = true; //start writing
continue; //don't write this line
}
if(writing){
if(line.Contains("target2"))
break; //exit loop without writing this line
sw.WriteLine(line);
}
}
我刚刚开始学习,在处理文件时遇到了问题。 我有一个方法有两个输入,一个在我想要的行的开头(lineStart),另一个在行的结尾(lineEnd) 我需要在这两个数字之间提取并写入文件的方法。
ex ) lineStart = 20 , lineEnd = 90, in output 必须是 txt 文件的 = 21-89 行。
string[] lines = File.ReadAllLines(@"");
int lineStart = 0;
foreach (string line0 in lines)
{
lineStart++;
if (line0.IndexOf("target1") > -1)
{
Console.Write(lineStart + "\n");
}
}
int lineEnd = 0;
foreach (string line1 in lines)
{
lineEnd++;
if (line1.IndexOf("target2") > -1)
{
Console.Write(lineEnd);
}
}
// method grabText(lineStart,lineEnd){}
enter code here
一行代码而已
string[] lines = File.ReadLines(@"").Skip(lineStart).Take(lineEnd-lineStart);
另请注意,我使用的是 ReadLines 而不是 ReadAllLines。第一个不会将所有内容加载到内存中。
不太清楚线条的边界是什么,但当然很容易调整计算
如果您的文本文件很大,请不要将其读入内存。也不找索引,一行一行处理:
bool writing = false;
using var sw = File.CreateText(@"C:\some\path\to.txt");
foreach(var line in File.ReadLines(...)){ //don't use ReadAllInes, use ReadLines - it's incremental and burns little memory
if(!writing && line.Contains("target1")){
writing = true; //start writing
continue; //don't write this line
}
if(writing){
if(line.Contains("target2"))
break; //exit loop without writing this line
sw.WriteLine(line);
}
}