0

大家好,提前感谢我有以下代码,用于在 c# Windows 应用程序中显示从 .csv 文件到 datagridview 的记录(具有三列数字、日期、消息)。

 var lines = File.ReadAllLines("E:\\messages.csv").Select(a => a.Split(',')).ToList();
 foreach (string[] s in lines)
 {
    dataGridView1.Rows.Add(s[2], s[5], s[7]);
 }

它对于前 7 次出现的 ',' 工作正常,但是我在 .csv 文件中有其他行超过 7 ',所以我希望在 7 之后出现的 ',' 应该与第 7 次结合我在 datagridview 名称中的第三列作为消息

.csv 文件中的一行示例

sms,deliver,"+919999999999","","","2013.08.01 09:40","","以下孟买公寓出租:SHIKHA, Near SHATRANJ, Off Carter Road, Khar Garden 面向 1500 sq.英尺 2 小时通知检查。--Rohit J。

4

3 回答 3

2

您可以使用Split 的这种重载,它允许您选择要返回的元素数量(7在这种情况下)。

var lines = File.ReadAllLines("E:\\messages.csv")
                             .Select(a => a.Split(new[] {','}, 7)).ToList();

foreach (string[] s in lines)
{
   dataGridView1.Rows.Add(s[2], s[5], s[6]);
}
于 2013-08-01T17:44:32.020 回答
1

尝试

var lines = File.ReadAllLines("E:\\messages.csv").Select(a => a.Split(',',7)).ToList();
于 2013-08-01T17:44:41.647 回答
0

通过简单地拆分逗号来读取/解析 CSV 是一个坏主意。考虑下表:

第 1 栏 第 2 栏 第 3 栏
你好你好吗我很好
你好,世界,你还好吗是的,我是

CSV 看起来像:

第 1 栏,第 2 栏,第 3 栏
你好,你好吗,我很好
“你好,世界”,你好吗,是的,我是

用逗号分隔将删除第二行。嵌套引号和换行符使这项工作更加困难。

相反,不要费心重新发明轮子,而是使用解析器。查看this questionthis question的答案以获得一些建议。

于 2013-08-01T17:49:58.607 回答