在C#中逐行读取CSV到多个文本框

时间:2015-10-23 15:02:45

标签: c# csv textbox textfieldparser

我希望将CSV读入表单中的多个文本框。 CSV文件的每一行都有不同的列数,我需要它来分别读取CSV的每一行 - 我不希望行末的空白值写入文本框。 CSV看起来像这样:

M,7,2,2,0,0,0,0,0,0,0,0,1,0,300,0.07
f,,0,f,0,395,1,f,t,f,,,,,,
DATA/BMP99_15.BIN,,,,,,,,,,,,,,,
,5,,0,,0,0,0,0,0,0,0,0,0,,
12,1,1,ATM,,,,,,,,,,,,
0.0315,0,180,0,0,0,0,0,,,,,,,,
1,2,181,0,,,,,,,,,,,,
47.5,352,0,0,12,180,0,0,,,,,,,,
250,2215,15,30,T,N,W,1,A,A,,,,,,

只需单击按钮,读取逗号分隔值的每一行,然后按顺序将每个值放入文本框中。即textbox1 = CSV值1,textbox2 = CSV值2,依此类推。

表单看起来像this,每行对应CSV中的一行。

这就是我目前所拥有的,我从未使用过textfield解析器,所以它只是一个测试,看看我是否真的可以让它写一个文本框。

    private void buttonreadcsv_Click(object sender, EventArgs e)
    {
        TextFieldParser parser = new TextFieldParser(@"C:\Filepath\inputtest1.csv");
        parser.SetDelimiters(",");
        while (!parser.EndOfData)
        {
            string[] fields = parser.ReadFields();
            tbmodel.Text = fields[0];
        }

谢谢!

1 个答案:

答案 0 :(得分:1)

使用简单的File读取和string.Split,您可以读取csv文件,并获取每行的所有字段。要忽略空条目,请使用StringSplitOptions.RemoveEmptyEntries

修改
添加了一个解决方法帮助方法RemoveEmptyEntriesAtEnd,它在字符串数组的末尾删除空字符串(null,empty,white-space)!

var rows = File.ReadAllLines("C:\YourDirectory\data.csv"); //get all rows/lines
foreach(var row in rows)
{
    //string[] fields = RemoveEmptyEntriesAtEnd(row.Split(new char[] {','}, StringSplitOptions.RemoveEmptyEntries));
    string[] fields = RemoveEmptyEntriesAtEnd(row.Split(','));
    tbmodel.Text = fields[0]; //and other models.....
    tbmodelN.Text = fields.Length > N ? fields[N] : string.Empty; //when using N-th index of field
}

//The helper method
public static string[] RemoveEmptyEntriesAtEnd(string[] strArray)
{
    var arrRev = strArray.Reverse();
    var emptyEntriesAtEnd = 0;
    foreach (var item in arrRev)
    {
        if (string.IsNullOrWhiteSpace(item))
            emptyEntriesAtEnd++;
        else
            break;
    }
    return arrRev.Skip(emptyEntriesAtEnd).Reverse().ToArray();
}