我在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();
答案 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();