Arrays 使用collections.generic.ienumerable(字符串)时跳过文件中的字符
我正在使用Collections.Generic.IEnumerable(Of String)函数获取文件的第一行和最后一行 这是可行的,但我想做的是跳过任何包含#字符的行 我的代码:Arrays 使用collections.generic.ienumerable(字符串)时跳过文件中的字符,arrays,vb.net,Arrays,Vb.net,我正在使用Collections.Generic.IEnumerable(Of String)函数获取文件的第一行和最后一行 这是可行的,但我想做的是跳过任何包含#字符的行 我的代码: Dim Lines As Collections.Generic.IEnumerable(Of String) = File.ReadLines(strFileName) Line0 = Lines.FirstOrDefault LineN = Lines.LastOrDefault lowestFreq = L
Dim Lines As Collections.Generic.IEnumerable(Of String) = File.ReadLines(strFileName)
Line0 = Lines.FirstOrDefault
LineN = Lines.LastOrDefault
lowestFreq = Line0.Split(New Char() {","c})
highestFreq = LineN.Split(New Char() {","c})
lowFreq = lowestFreq(0)
highFreq = highestFreq(0)
我尝试过if/if-not等的变体,但似乎找不到解决方案
我的文件如下所示(某些文件的注释行比其他文件多)
#将只出现在文件的顶部。更改此选项:
Line0 = Lines.FirstOrDefault
为此:
Line0 = Lines.SkipWhile(Function(s) s.StartsWith("#")).FirstOrDefault()
也就是说,通过这样做,您将枚举文件的这些行两次。鉴于您需要最后一行,因此无论如何都必须读取整个文件,您可能应该调用ReadAllLines
,而不是ReadLines
,更改此项:
Line0 = Lines.FirstOrDefault
为此:
Line0 = Lines.SkipWhile(Function(s) s.StartsWith("#")).FirstOrDefault()
也就是说,通过这样做,您将枚举文件的这些行两次。考虑到您需要最后一行,因此必须读取整个文件,您可能应该调用
ReadAllLines
,而不是ReadLines
,您可以使用Linq where子句排除#行…file.ReadLines(sFile)。其中(Function(q)q.StartsWith(“#”)False)
puropoix在正确的轨道上。在行
变量的声明中使用Where
子句。然后,当您针对行调用FirstOrDefault
和LastOrDefault
时,它们都将被过滤。还有采用谓词参数的FirstOrDefault
和LastOrDefault
的重载,因此您实际上不需要Where
。谢谢您,多亏了Puropoix,它工作得很好!您可以使用Linq where子句排除#行…File.ReadLines(sFile)。其中(Function(q)q.StartsWith(“#”)=False)
puropoix在正确的轨道上。在行
变量的声明中使用Where
子句。然后,当您针对行调用FirstOrDefault
和LastOrDefault
时,它们都将被过滤。还有采用谓词参数的FirstOrDefault
和LastOrDefault
的重载,因此您实际上不需要Where
。谢谢您,多亏了Puropoix,它工作得很好!