我希望将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];
}
谢谢!
答案 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();
}