跳过CSV中的第一个拆分字符

时间:2018-10-22 17:02:54

标签: c# string winforms

我已经输入了csv文件,如下所示:

 |Name|Surname|Age|
 |ABCD|DCBA|11|
 |QAZ|WSX|23|

当我尝试将csv文件上传到我的 datagridview 表时,第一列为空,因为函数正在读取第一个|拆分字符。

如何跳过每行中的第一个分割字符?

部分代码:

file.ReadLine();
string line = "";
try
{
    while ((line = file.ReadLine()) != null)
    {
        string[] splitArray = line.Split('|');
        Listing.Add(new List(splitArray[0], splitArray[1], splitArray[2]));
        count++;
    }
}
catch
{
    MessageBox.Show("Nothing to do here...");
}
file.Close();

2 个答案:

答案 0 :(得分:6)

只需使用splitArray[1]splitArray[2]splitArray[3](忽略splitArray[0])来忽略第一个索引:

file.ReadLine();
string line = "";
try
{
    while ((line = file.ReadLine()) != null)
    {
        string[] splitArray = line.Split('|');
        Listing.Add(new List(splitArray[1], splitArray[2], splitArray[3]));
        count++;
    }
}
catch
{
    MessageBox.Show("Nothing to do here...");
}
file.Close();

正如其他人指出的那样,为什么不使用CsvHelper

您可以通过一个非常简单的配置来完成此操作:

public struct Listing
{
    public string Name { get; set; }
    public string Surname { get; set; }
    public int Age { get; set; }
}

using (var file = File.OpenText("test.txt"))
{
    using (var csv = new CsvHelper.CsvReader(file))
    {
        csv.Configuration.Delimiter = "|";
        var records = csv.GetRecords<Listing>().ToList();

        foreach (var record in records)
        {
            Console.WriteLine("Name: {0}, Surname: {1}, Age: {2}", record.Name, record.Surname, record.Age);
        }
    }
}

在这里您可以看到一些示例输出:

答案 1 :(得分:1)

您可以将可选的第二个StringSplitOptions参数传递给RemoveEmptyEntries

string[] splitArray = line.Split('|', StringSplitOptions.RemoveEmptyEntries);