2017-04-12 180 views
2

作为数据清理练习的一部分,我需要更正csv文件的格式。string.Join Linq查询合并数组中的两个字符串并输出为单逗号分隔字符串

由于格式不当/缺乏引号,描述字段中的额外逗号会破坏我的DTS包。

因此,为了解决这个问题,我创建了一个简单的C#脚本来查找包含比标题行多的列的csv中的任何行。

当行包含比标题更多的列时,我想将数组项[10]和[11]合并到一列中,然后将行写入我的新文件 - 保留所有其他现有列。

代码:

var columns = splitExpression.Split(line).Where(s => s != delimiter).ToArray(); 

    if (headers == null) headers = new string[columns.Length]; 

    if (columns.Length != headers.Length) 
    { 
     // TODO - Linq to write comma separated string but merge column 10 and 11 of the array 
     // writer.WriteLine(string.Join(delimiter, columns)); 
    } 
    else 
    { 
     writer.WriteLine(string.Join(delimiter, columns)); 
    } 

不幸的是,我的LINQ的写作技巧上有所欠缺,有人可以帮我填写TODO。

回答

3

只需使用列列表而不是数组。这将允许你合并后删除不必要的列:

var columns = splitExpression.Split(line).Where(s => s != delimiter).ToList(); 

if (headers == null) headers = new string[columns.Count]; 

if (columns.Count != headers.Length) 
{ 
    columns[10] = columns[10] + columns[11]; // combine columns here 
    columns.RemoveAt(11);  
} 

writer.WriteLine(string.Join(delimiter, columns)); 
+1

完美的作品谢谢谢尔盖......说实话,我有点不好意思我没有看到,摆在首位 – Freddie2025

相关问题