【发布时间】:2014-05-27 15:36:54
【问题描述】:
我正在使用一些代码逐行读取 csv 文件并识别每列中的字符串/值。应该总是有 5 列,最后一列总是空的(只是因为 csv 文件中每一行的末尾都有一个逗号)。 原始 csv 数据如下所示:
abc01.jpg,2729192,a2cbaad5,\Folder1\FolderA\,
abc02.jpg,1729127,b2cbaad4,\Folder1\FolderA\,
abc03.jpg,2759124,c2cbaad3,\Folder1\FolderA\,
abc04.jpg,3726126,d2cbaad2,\Folder2\FolderA,B\,
abc05.jpg,5721122,e2cbaad1,\Folder3\FolderA,B,C\,
我正在阅读的代码如下所示:
using (StreamReader reader = new StreamReader(csvFilePath))
{
string missingCsvFilePath = rootFolderPath + "\\missing.csv";
string line;
while (!string.IsNullOrEmpty(line = reader.ReadLine()))
{
var splitval = line.Split(',');
if (splitval.Length == 5)
{
string filename_csv = splitval[0];
string crc_csv = splitval[2];
string filepath_csv = splitval[3];
Int64 filebytes_csv;
bool parsed = Int64.TryParse(splitval[1], out filebytes_csv);
//DO More processing
}
else
{
MessageBox.Show("Error: Line in Csv did not contain 5 sections");
break;
}
}
}
我遇到的问题是有时第 4 列包含逗号(请参阅示例 csv 数据中的第 4 行和第 5 行),它们也是 csv 文件中的列分隔符。但是,第 4 列的开头和结尾总是有一个 \ 符号,因此可以安全地忽略 \ 符号之间的字符串中的逗号。但是,我确实需要逗号出现在字符串 filepath_csv 中。有人可以帮我实现吗?
【问题讨论】:
-
我建议不要规避 CSV 中的错误,而是制作一个更好的 CSV。文件名通常用双引号 (") 括起来。
-
我无法控制 csv 文件,因为它来自其他人
-
@SteveW:你有没有机会告诉他们他们的 CSV 不遵循约定?
-
不——这是我无法控制的。问题实际上在于文件夹命名约定而不是它们的 csv 生成。