我正在学习C#,我需要将文件中的文本读入数组,但忽略以某些特殊字符开头的行。我正在使用ReadAllLines来阅读文本。
我在做什么:
string file = openFileDialog1.FileName;
file_txtbx.Text = file;
try {
test = File.ReadAllLines(file); // reads file into array
} catch (ArgumentNullException) {
}
用于阅读文本的文本文件示例:
A
D
# Next is incorrect
C
答案 0 :(得分:2)
使用File.ReadLines
后跟Where
:
var allLines = File.ReadLines(file).Where(s => !s.StartsWith("#")).ToArray();
这会生成一个不以"#"
开头的所有行的数组。
注意:您不应该抓住ArgumentNullException
,因为它表示编程错误。相反,您应该检查您要传递给可能抛出ArgumentNullException
的方法的值,以避免进行将引发异常的调用。
答案 1 :(得分:0)
过滤数组:使用Linq
当ReadAllLines返回string
数组时,您只需使用Linq方法Where
过滤此数组,并使用StartsWith()
测试字符串的开头:
// ...
test = file.ReadAllLines(file);
// return lines that don't start with '#'
var filteredLines = test.Where(line => !line.StartsWith("#"));
您还可以使用您需要的任何逻辑运算符和函数在谓词(line => boolean expression
)中添加几个条件。
例如,要忽略以//
开头的行:
// return lines that don't start with '#' and also that don't start with '//'
var filteredLines = file.ReadAllLines(file)
.Where(line => !line.StartsWith("#") && !line.StartsWith("//"));
其他信息:
这些示例中的filteredLines
类型为IEnumerable<string>
,这意味着您可以在foreach(string s in filteredLines)
中使用此结果。
根据您之后的操作,如果您希望拥有数组string[]
,只需添加.ToArray()
。
如果您希望拥有List<string>
,只需添加.ToList()
。
注意:您必须将using System.Linq;
添加到.cs文件的顶部,才能使用Where
,ToList
,和ToArray
方法。
答案 2 :(得分:-1)
我的解决方案是
test = file.ReadAllLines(file).Where(line => !string.Equals(line, "your string"));
这种方式你不必关心null,如果你的比较忽略大写/小写,你可以做到
test = file.ReadAllLines(file).Where(line => !string.Equals(line, "your string", StringComparison.InvariantCultureIgnoreCase));