将csv文件加载到datagridview并忽略带分隔符的单词

时间:2017-08-29 21:39:05

标签: c# datagridview

我在C#项目中使用Csv文件和datagridview 我尝试加载带有2个分隔符“”+“; ”的CSV文件,这是我的问题!我需要忽略逗号之后的所有单词,除了最后一个单词example.csv:

my1;;test1;good
my2;cool;test,abcde;god
my3;father;zyxw;
my4;dad;word,fresh,example;banana

我想在我的datagridview中显示如下:

my1;;test1;good
my2;cool;abcde;god
my3;father;zyxw;
my4;dad;example;banana

正如您所看到的,我的目标是从CSV中添加所有行,但如果出现逗号,则获取最后一个字。到目前为止,我使用此代码:

System.IO.StreamReader fileReader = new System.IO.StreamReader(csvPath, false);
                        string fileRow;
                        string[] fileDataField;

                        //Reading Data
                        while (fileReader.Peek() != -1)
                        {
                            fileRow = fileReader.ReadLine();
                            fileDataField = fileRow.Split(';');
                            dataGridView1.Rows.Add(fileDataField);
                        }
                        fileReader.Dispose();
                        fileReader.Close();

2 个答案:

答案 0 :(得分:1)

System.IO.StreamReader fileReader = new System.IO.StreamReader(csvPath, false);
string[] fileDataField;
string fileRow;

//Reading Data
while (fileReader.Peek() != -1) {
    fileRow = fileReader.ReadLine();
    fileDataField = fileRow.Split(';');

    //Declare temporary array to temporary store the values
    string[] tempItems = new string[fileDataField.Length];
    //Loop through the array and do comma check,
    //Cut the string if there's a comma in it
    //Else just add the normal value

    for (int i = 0; i < fileDataField.Length; i++) {
        tempItems[i] = fileDataField[i].Substring(fileDataField[i].LastIndexOf(",") + 1);
    }
    dataGridView1.Rows.Add(tempItems);
}
fileReader.Dispose();
fileReader.Close();

这应该有效。您可以简单地在包含逗号之前剪切字符串的一部分,然后将其余部分添加到gridview中。如果未找到逗号,则添加该值而不进行更改。

修改 应该使用数组而不是列表。

答案 1 :(得分:1)

您可以使用Linq解决此问题。只需添加System.Linq的引用并设置fileDataField,如下所示:

fileDataField = fileRow.Split(';')
               .Select(e=> e.LastIndexOf(",") >= 0 && e.IndexOf(",") < e.Length 
               ? e.Substring(e.LastIndexOf(",") + 1) 
               : e).ToArray();