Удаление возврата каретки из строки c в c# - PullRequest
0 голосов
/ 28 мая 2020

У меня есть этот тип данных в текстовом файле (csv):

column1|column2|column3|column4|column5 (\r\n)
column1|column2|column3|column4|column5 (\r\n)
column1|column2 (\r\n)
column2 (\r\n)
column2|column3|column4|column5 (\r\n)

Я хотел бы удалить \ r \ n, которые являются строкой 3 и строкой 4, чтобы иметь:

column1|column2|column3|column4|column5 (\r\n)
column1|column2|column3|column4|column5 (\r\n)
column1|column2/column2/column2|column3|column4|column5 (\r\n)

Моя идея состоит в том, что если в строке нет 4 разделителей столбцов ("|"), удалите CRLF и повторяйте операцию, пока не получите только правильные строки.

Это мой код:

String path = "test.csv";

// Read file
string[] readText = File.ReadAllLines(path);

// Empty the file
File.WriteAllText(path, String.Empty);

int x = 0;
int countheaders = 0;
int countlines;
using (StreamWriter writer = new StreamWriter(path))
{
    foreach (string s in readText)
    {
        if (x == 0)
        {
            countheaders = s.Where(c => c == '|').Count();
            x = 1;
        }

        countlines = 0;
        countlines = s.Where(d => d == '|').Count();
        if (countlines == countheaders)
        {
            writer.WriteLine(s);
        }
        else
        {
            string s2 = s;
            s2 = s2.ToString().TrimEnd('\r', '\n');
            writer.Write(s2);
        }
    }
}

Проблема в том, что я читаю файл за один проход, поэтому разрыв строки в строке 4 удаляется, а строка 4 и строка 5 вместе ...

1 Ответ

1 голос
/ 28 мая 2020
• 1000 об этом решении заключается в том, что вы никогда не загружаете в память исходный исходный код. Вы просто строите строки на лету.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: это может вести себя странно с неверными входными строками.

...