我正在尝试阅读您可以从此处下载的csv:https://exoplanetarchive.ipac.caltech.edu/cgi-bin/TblView/nph-tblView?app=ExoTbls&config=planets。只需点击“下载表格”,然后选择CSV,所有列,所有行。
代码存在一些问题:
代码:
private void loadData(string fileName) {
int rows = 0;
int columns = 0;
using (TextFieldParser parser = new TextFieldParser(fileName, Encoding.UTF8))
{
parser.TextFieldType = FieldType.Delimited;
parser.SetDelimiters(",");
parser.CommentTokens = new []{"#"};
parser.TrimWhiteSpace = false;
parser.HasFieldsEnclosedInQuotes = false;
while (!parser.EndOfData)
{
//Process row
string[] fields = parser.ReadFields();
foreach (string field in fields)
{
//TODO: Process field
}
if (fields.Length == 0) {
//Should be a commment
printLine("Comment found on row " + rows);
}
if (fields.Length > columns)
columns = fields.Length;
rows++;
}
printLine ("Rows: " + rows);
printLine ("Columns: " + columns);
printLine ("Errors on line: " + parser.ErrorLineNumber);
}
}
答案 0 :(得分:0)
要忽略注释行,您需要更改parser.CommentTokens语句以使用新字符串[]如下所示
parser.CommentTokens = new string []{"#"};
更改后,评论将被忽略。文件中有3行具有不同的列数,然后是403,其他所有列都
我添加了下面的检查,以确定字段数何时大于403(第159,3310和3311行有404和405列/字段)
if (fields.Length > 403)
{
Console.WriteLine($"Line:{lineNo} has {fields.Length}.");
}
至少你可以对那些超过预期字段数的行进行某种检查/清理