读取文本文件跳过一堆行然后继续其他行
Reading textfile skipping bunch of lines then proceeding to other lines
我想跳过我将在文本文件中读取的行,正如您在第 0 行、第 1 行和第 2 行下方看到的那样(文本文件的前三行),然后是阅读此内容( 3 读这个)接下来是(4 跳过这个)
这是模式:
(跳过文本文件的前 3 行,然后是
(3) 然后读这个
(4) 跳过
这直到文本文件的末尾)冲洗并重复其他文本文件,我需要这种模式的帮助。
Line 0 - Skip This
Line 1 - Skip This
Line 2 - Skip This
Line 3 - Read This
Line 4 - Read This
Line 5 - Read This
Line 6 - Skip This
Line 7 - Skip This
Line 8 - Skip This
Line 9 - Skip This
Line 10 - Read This
Line 11 - Read This
Line 12- Read This
Line 13 - Skip This
Line 14 - Skip This
Line 15- Skip This
Line 16- Skip This
Line 17 - Read This and so on
我试过的代码。
string[] Lines = File.ReadAllLines(f.File);
foreach (string line in Lines.Skip(3))
{
try
{
string[] readLineSplit = line.Split('|');
if (readLineSplit.Length > 1)
{
var id = readLineSplit[0].ToString();
var flagvalue = readLineSplit[1].ToString();
var status = readLineSplit[2].ToString();
Lines.Skip(4).ToString();
Console.WriteLine("ID {0}, Value {1}, Status {2}", id, flagvalue, status)
}
}
catch (FileNotFoundException error)
{
Console.WriteLine(error);
}
}
与其读取所有行然后尝试提取您需要的行,不如只读取您需要的行而不将不需要的行存储在内存中:
var lines = new List<string>();
var counter = 0;
using (var sr = new StreamReader(filename)) {
string line;
while ((line = sr.ReadLine()) != null) {
//ignore the first 3 lines
if (counter >= 3) {
//now work out where in the pattern of 7 (3 read, 4 skip) we are
var mod = (counter - 3) % 7;
//if the first 3 of the 7, keep it
if (mod < 3)
lines.Add(line);
}
counter++;
}
}
这有帮助吗?
string[] Lines = File.ReadAllLines(f.File);
for (int i = 3; i < Lines.Length-3; i += 7)
{
for (int j = 0; j < 3; j++)
{
string[] readLineSplit = Line [i+j].Split('|');
etc..
}
}
你最好使用流 reader,但对于 Linq,Skip/Take 回答尝试
List<string> lines = Enumerable.Range(0, 100).Select(i => i.ToString()).ToList();
IEnumerable<string> group;
int c = 0;
do
{
group = lines.Skip(3+7*c).Take(3);
foreach (var s in group)
{
Console.WriteLine(s);
}
c++;
} while (group.Count() == 3);
这将是一个简短的 LINQ 解决方案:
var result = Lines.Skip(3).Where((val,idx)=>idx%7<3).Select((x)=>x);
Lines
可以是文件所有行的数组,或者只是 File.ReadLines(filename)
.
我想跳过我将在文本文件中读取的行,正如您在第 0 行、第 1 行和第 2 行下方看到的那样(文本文件的前三行),然后是阅读此内容( 3 读这个)接下来是(4 跳过这个)
这是模式:
(跳过文本文件的前 3 行,然后是 (3) 然后读这个 (4) 跳过 这直到文本文件的末尾)冲洗并重复其他文本文件,我需要这种模式的帮助。
Line 0 - Skip This
Line 1 - Skip This
Line 2 - Skip This
Line 3 - Read This
Line 4 - Read This
Line 5 - Read This
Line 6 - Skip This
Line 7 - Skip This
Line 8 - Skip This
Line 9 - Skip This
Line 10 - Read This
Line 11 - Read This
Line 12- Read This
Line 13 - Skip This
Line 14 - Skip This
Line 15- Skip This
Line 16- Skip This
Line 17 - Read This and so on
我试过的代码。
string[] Lines = File.ReadAllLines(f.File);
foreach (string line in Lines.Skip(3))
{
try
{
string[] readLineSplit = line.Split('|');
if (readLineSplit.Length > 1)
{
var id = readLineSplit[0].ToString();
var flagvalue = readLineSplit[1].ToString();
var status = readLineSplit[2].ToString();
Lines.Skip(4).ToString();
Console.WriteLine("ID {0}, Value {1}, Status {2}", id, flagvalue, status)
}
}
catch (FileNotFoundException error)
{
Console.WriteLine(error);
}
}
与其读取所有行然后尝试提取您需要的行,不如只读取您需要的行而不将不需要的行存储在内存中:
var lines = new List<string>();
var counter = 0;
using (var sr = new StreamReader(filename)) {
string line;
while ((line = sr.ReadLine()) != null) {
//ignore the first 3 lines
if (counter >= 3) {
//now work out where in the pattern of 7 (3 read, 4 skip) we are
var mod = (counter - 3) % 7;
//if the first 3 of the 7, keep it
if (mod < 3)
lines.Add(line);
}
counter++;
}
}
这有帮助吗?
string[] Lines = File.ReadAllLines(f.File);
for (int i = 3; i < Lines.Length-3; i += 7)
{
for (int j = 0; j < 3; j++)
{
string[] readLineSplit = Line [i+j].Split('|');
etc..
}
}
你最好使用流 reader,但对于 Linq,Skip/Take 回答尝试
List<string> lines = Enumerable.Range(0, 100).Select(i => i.ToString()).ToList();
IEnumerable<string> group;
int c = 0;
do
{
group = lines.Skip(3+7*c).Take(3);
foreach (var s in group)
{
Console.WriteLine(s);
}
c++;
} while (group.Count() == 3);
这将是一个简短的 LINQ 解决方案:
var result = Lines.Skip(3).Where((val,idx)=>idx%7<3).Select((x)=>x);
Lines
可以是文件所有行的数组,或者只是 File.ReadLines(filename)
.