Преобразование текстового файла с разделителями пробелами в CSV VB.NET

У меня есть сотни разделенных пробелами текстовых файлов, которые я хотел бы преобразовать в VB.NET в CSV-файлы в соответствии с RFC 4180. Файлы имеют различную длину, но могут содержать до 200000 строк и различное количество столбцов (до 30), разделенных несколькими "пробелами", которые также варьируются от одного до 20. Файлы содержат некоторую информацию, которую я хотел бы удалить, например первый столбец, и я также хотел бы изменить содержимое второго столбца на допустимый Штамп времени Javascript. Это пример первых строк одного из файлов (обратите внимание, что большая часть пробелов не показана).

# временной порядок boil_q_1 boil_q_2 chil_q1 chil_q2 loccool locheat qdomwat
0,000000000 1,0000 4,18700E-09 0,0000 4,18700E-11 1,31529E-03 132,39 9799,3 0,0000
8.0000000000E-02 1.0000 4.18700E-09 0.0000 4.18700E-11 1.31528E-03 132.11 9917.1 0.0000
0,1600000000 1,0000 4,18700E-09 0,0000 4,18700E-11 1,31527E-03 131,98 10047. 0,0000
0,2705515735 1,0000 4,18700E-09 0,0000 4,18700E-11 1,31527E-03 131,97 10152. 0,0000
0,2705515763 1,0000 4,18700E-09 0,0000 4,18700E-11 1,31526E-03 131,97 10152. 0,0000
0,3345515763 1,0000 4,18700E-09 0,0000 4,18700E-11 1,31525E-03 131,97 10184. 0,0000
0,3985515763 1,0000 4,18700E-09 0,0000 4,18700E-11 1,31524E-03 131,98 10192. 0,0000
0,5265515763 1,0000 4,18700E-09 0,0000 4,18700E-11 1,31524E-03 131,98 10178. 0,0000
0,7825515763 1,0000 4,18700E-09 0,0000 4,18700E-11 1,31523E-03 131,99 10164. 0,0000
0,7825515791 1,0000 4,18700E-09 0,0000 4,18700E-11 1,31522E-03 131,99 10164. 0,0000

Любые предложения будут приветствоваться.

С уважением Макс

2 ответа

Предполагая, что переменное количество пробелов не потому, что столбцы пусты...

Я хотел бы просто сделать это простым и использовать инструменты, к которым привык, грубые, но быстрые для меня:

    Dim s As String = TextBox1.Text
    s = s.Replace(vbNewLine, "|").Replace(vbCr, "").Replace(vbLf, "")
    s = s.Replace("| ", "|") ' trim leading space
    Dim iLen As Integer = -1
    Do
        iLen = s.Length
        s = s.Replace("  ", " ")
    Loop Until iLen = s.Length
    Dim aLines() As String = s.Split("|")
    Dim aLine() As String
    Dim aHeader() As String = aLines(0).Split(" ")
    ' process header
    For i As Long = 1 To aLines.GetUpperBound(0)
        aLine = aLines(i).Split(" ")
        Stop
        ' process line
    Next

TextBox1 содержит ваш образец с помехами? ведущий #. Если изменяющиеся пробелы обусловлены пустыми столбцами, массажирование будет более сложным и, возможно, будет лучше выполнено во внутреннем цикле.

Выше я просто массирую всю строку, затем помещаю строки в массив, а затем зацикливаю их.

Это единственный первый шаг в ОП.

Я обнаружил, что написание CSV проблематично, тем более что у потребителей иногда бывают разные идеи относительно того, что говорится в спецификации. Если возможно, протестируйте с помощью программы конечного потребления.

В итоге я использовал следующий код и добавил информацию в сетку данных

Dim rowvalue As String
Dim streamReader As IO.StreamReader = New IO.StreamReader(FileName)
    While streamReader.Peek() <> -1
    rowvalue = streamReader.ReadLine()
    DataGridView1.Rows.Add(rowvalue.Split(New String() {" "}, StringSplitOptions.RemoveEmptyEntries))
End While

Проблема в том, что он довольно медленный, и мне все еще нужно удалить один из кумнов и добавить все остальные файлы. Я думаю, что было бы проще хранить информацию другим способом? Есть идеи?

Другие вопросы по тегам