У меня есть входной файл 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
Frihu 22 Окт 2018 в 20:02

2 ответа

Лучший ответ

Просто проигнорируйте первый индекс, используя 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);
        }
    }
}

Здесь вы можете увидеть пример вывода:

6
Goodbye StackExchange 22 Окт 2018 в 17:42

Вы можете передать необязательный второй аргумент StringSplitOptions в RemoveEmptyEntries:

string[] splitArray = line.Split('|', StringSplitOptions.RemoveEmptyEntries);
1
Mureinik 22 Окт 2018 в 17:06
52934353