Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 使用collections.generic.ienumerable(字符串)时跳过文件中的字符_Arrays_Vb.net - Fatal编程技术网

Arrays 使用collections.generic.ienumerable(字符串)时跳过文件中的字符

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

我正在使用Collections.Generic.IEnumerable(Of String)函数获取文件的第一行和最后一行

这是可行的,但我想做的是跳过任何包含#字符的行

我的代码:

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,它工作得很好!