Какой разделитель можно использовать для .csv, в столбце которого стоит "," - PullRequest
0 голосов
/ 05 августа 2020

Я хочу читать файл .csv и записывать в другой файл .csv. Я использую streamwriter и string.split с delimiter (',').

 using (StreamWriter file = new StreamWriter(destFile, true))
            {
                  string lines = System.IO.File.ReadAllLines(inputFile);
                  foreach (string line in lines)
                    {
                        if (line != lines[0])
                        {  
                            string[] values = line.Split(',');
                            file.WriteLine("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9}",
                                    values[43], values[0], values[11], values[12], values[13], values[15], values[14], values[28], values[22], values[9]);
 }}}

Но есть несколько столбцов, которые имеют , в data, например, как показано ниже, что дает incorrect output потому что программа считает его как delimiter.

введите описание изображения здесь

Я пробовал использовать библиотеку tinyCSVParser, но она также использует разделитель, который даст тот же результат. Когда я перехожу на библиотеку CSVHelper, в ней не используется разделитель, но поскольку во входном файле есть столбец с именем public double B/S, я застрял там, потому что свойства не могут принять это имя.

[Name("B/S")]
private double p = 0;
public double B/S
{
    get
    {
        return p;
    }
    set
    {
        double result;
        result = double.Parse(Principal) * value / Day / 100;
        p = Math.Abs(result);
    }
}

Что должно Я заменяю delimiter на?

Ответы [ 2 ]

1 голос
/ 05 августа 2020

Если я вас хорошо понимаю ...

Попробуйте следующее:

using (StreamWriter file = new StreamWriter(destFile, true))     
{
    string lines = System.IO.File.ReadAllLines(inputFile);
    foreach (string line in lines)
    {
        string[] delimiter = line==lines[0] ? new string[]{","} : new string[]{"\",\"", "\""};
        string[] values = line.Split(delimiter, StringSplitOptions.RemoveEmptyEntries);
        //...
    }
}

EDIT

Проверьте это: . NET Fiddle

Примечание: если вы хотите разделить строку по qoutation mark, вам нужно использовать backsla sh в строке. См .: Как: поставить кавычки в строку (Windows формы)

1 голос
/ 05 августа 2020

Я рекомендую вам использовать CSV-библиотеку для написания csv-файла. Но вы можете проверить, как отформатировать csv в определении RF C -4180 .

Каждое поле может быть заключено или не заключено в двойные кавычки (однако некоторые программы, такие как Microsoft Excel, вообще не используют двойные кавычки). Если поля не заключены в двойные кавычки, двойные кавычки могут не отображаться внутри полей.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...