2014-04-09 5 views
0

Мне нужно изменить функцию ниже, чтобы читать из файла с разделителями табуляции любые идеи, как это сделать?Изменить функцию для чтения файла с разделителями табуляции в datable?

Public Function ConvertCsvToDatatable(ByVal ColumnNames As Boolean) As DataTable 
    Try 
     Dim dt As New DataTable 
     For Each columnName In getColumns(ColumnNames) 
      dt.Columns.Add(columnName) 
     Next 
     Dim fileReader As New StreamReader(FileName) 
     If ColumnNames Then 
      fileReader.ReadLine() 
     End If 
     Dim line As String = fileReader.ReadLine 
     While Not IsNothing(line) 
      line = line.Replace(Chr(34), "") 
      dt.Rows.Add(line.Split(",")) 
      line = fileReader.ReadLine 
     End While 
     fileReader.Close() 
     Return dt 
    Catch ex As Exception 
     'log to file 
    End Try 
    Return Nothing 
End Function 

ответ

2

я бы, вероятно, заменить следующую строку:

dt.Rows.Add(line.Split(",")) 

С:

dt.Rows.Add(line.Split(vbTab)) 

Это должно разделить на вкладке разделителями значений ...

То есть, я бы очень рекомендую чтобы сделать это, поскольку SCV/TSV может быть довольно сложным. Мне нравится KBCsv.

+0

Класс 'TextFieldParser', который встроен в платформу .NET, поддерживает чтение CSV и TSV. –

+0

Я смутно помню, что библиотека KbCsv была превосходной при работе со сложными csv, которые включали запятые в столбцах ... –

+0

Я не сомневаюсь в этом. Если ничего другого, открытый интерфейс «TextFieldParser» неуклюжим, что затрудняет его использование. Я никогда не слышал о KBCsv, но легко представить, что это лучше, чем MS. Однако иногда бывает полезно использовать встроенные классы, когда они доступны, чтобы избежать дополнительных зависимостей сторонних разработчиков. –

2

Изменение line.Split(",") в line.Split(vbTab). Это позволит использовать символ табуляции в качестве разделителя вместо запятой.

+1

'\ t' не будет работать в VB.NET. Используйте 'ControlChars.Tab' или' vbTab'. –

+0

Да, только что понял, что я думал на C#. Спасибо что подметил это. –

Смежные вопросы