2012-06-22 59 views
1

我有一个文本文件,其中包含一些行信息。我想通过传递一些行来阅读它。例如,假设我有1-10行。当我在阅读时,我想以下面的方式阅读它,如何通过传递一些行来读取文本文件行?

1 <- i wanna read this 
2 <- Skip this 
3 <- read this 
4 <- Skip this 
5 <- read this 
6 <- Skip this 
7 <- read this 
8 <- Skip this 
9 <- read this 
10 <- Skip this 

你得到的模式是正确的吗?我怎样才能实现这一点使用C#?并且我想要在稍后时间跳过我的线路。有任何想法吗?

+3

你熟悉模块化数学?如果你%2你的行号,你可以找出哪些是奇数,哪些是偶数。 (只是一个提示...) – BlackVegetable

+0

没有尝试任何实际。我想不出任何 – aroshlakshan

回答

1

编辑为使用查找偶数和奇数行。

只需循环并根据您的标准添加到结果集中?

var lines = new Dictionary<int, List<string>>() { 
    { 0, new List<string>() }, 
    { 1, new List<string>() } 
}; 

using (StreamReader sr = new StreamReader(filename)) { 
    int i=0; 
    while (!sr.EndOfStream) { 
     string line = sr.ReadLine(); 
     lines[i%2].Add(line); 
    } 
} 

然后线[0]让你的偶数行,并且线[1]让你奇数的。

+0

如果OP想要读取稍后跳过的行,也许她可以同时读取两者到内存中。 –

+0

@BenSchwehn良好的通话,更新。老实说,虽然我喜欢Bort的回答,但它更具可读性。 – McGarnagle

1

伪代码:

for (i=0; i<filelines.Count; i++) 
{ 
if (i mod 2 == 1) oddlines.Add(filelines[i]); 
} 

编辑:dbaseman做到了准确,谢谢。

5

您可以使用LINQ Where,包括指数的过载,并使用%到每一个其他线路滤波器:

var everyOtherLine = System.IO.File.ReadAllLines("path") 
            .Where((s, i) => i % 2 == 0); 
+0

+1良好的使用Linq – McGarnagle

+0

我没有得到这个解决方案。有没有更简单的方法? – aroshlakshan

+1

什么部分不清楚? 'Where'只返回通过给定条件的值。在这种情况下的条件是行号是偶数的行('i%2 == 0')。这让你第一,第三等线 – Bort

相关问题