0

我希望将 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,依此类推。

表单如下所示,每一行对应 CSV 中的一行。

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

    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];
        }

谢谢!

4

1 回答 1

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();
}
于 2015-10-23T15:20:06.067 回答