Правильный способ разбить CSV-файл, чтобы удалить лишние "VB.net - PullRequest
0 голосов
/ 03 октября 2019

Я импортирую CSV-файл в таблицу данных в приложении vb.net. Когда я импортирую файл csv, мой код добавляет дополнительный набор «вокруг моих дат. Это вызывает ошибку, когда у моего входного массива больше значений, чем столбцов в моей таблице данных. Как удалить лишнее» с помощью оператора split или другогоway.

Исходная строка из CSV-файла

 10411392601,Josue Smolcic 32278,10411392601,ProJet 7000,Not Burned-In,0.0,,0,,  ,10411392601 was started on 2019-10-02 11:41:13. 
 This Machine is Pending and still requires a passing inspection in Assembly / Integration. See Inspection Record #12367.,1.0,,This Machine is Pending and still requires a passing inspection in Assembly / Integration.
 ,"Oct 02, 2019","Oct 02, 2019 11:42 AM","Oct 02, 2019 11:41 AM",Pending, (2019-10-02 11:42:11)

Когда мой код запускается, когда я добавляю часы в финальную переменную, я получаю это.

 "10411392601,Josue Smolcic 32278,10411392601,ProJet 7000,Not Burned- 
 In,0.0,,0,,  ,10411392601 was started on 2019-10-02 11:41:13. This Machine is Pending and still requires a passing inspection in Assembly / Integration. See Inspection Record #12367.,1.0,,This Machine is Pending and still requires a passing inspection in Assembly / Integration.
,""Oct 02, 2019"",""Oct 02, 2019 11:42 AM"",""Oct 02, 2019 11:41 AM"",Pending, (2019-10-02 11:42:11)"

ПросмотрВ нижней части обоих примеров, которые вы видите около октябрьских дат, есть дополнительный набор скобок. Как мне удалить их?

Вот мой код VB.

Private Sub MergetblAllMachines()
Dim path As String = "Pathway.csv"

    Dim f As Integer = 0
    Dim myreader As New StreamReader(path)
    Dim fullfilestr As String = myreader.ReadToEnd
    myreader.Close()
    myreader.Dispose()
    Dim lines As String() = fullfilestr.Split(ControlChars.Lf)
    Dim recs As New DataTable()
    Dim sarr As String() = lines(0).Split(","c)
    For Each s As String In sarr
        f = f + 1
        recs.Columns.Add(New DataColumn())
        ' MsgBox(s)
    Next
    Dim row As DataRow
    Dim finalline As String = " "
    For Each line As String In lines
        row = recs.NewRow()
        finalline = line.Replace(Convert.ToString(ControlChars.Cr), "")
        row.ItemArray = finalline.Split(","c)
        recs.Rows.Add(row) '-----Here is where my code bugs out------
    Next
end sub

-

-

-

---------------------- Обновлено (правильный код) -----------------

попыткичтобы использовать класс textfieldparser, я удалил двойные кавычки, но теперь мне трудно правильно разбить строки. Вот мой обновленный код.

        Dim path As String = "path.csv"

    Dim f As Integer = 0
    Dim myreader As New StreamReader(path)
    Dim fullfilestr As String = myreader.ReadToEnd
    myreader.Close()
    myreader.Dispose()
    Dim lines As String() = fullfilestr.Split(ControlChars.Lf)
    Dim recs As New DataTable()
    Dim sarr As String() = lines(0).Split(","c)
    For Each s As String In sarr
        f = f + 1
        recs.Columns.Add(New DataColumn())
        ' MsgBox(s)
    Next

        Dim SplitRow As String = Nothing
    Using myreader1 As New Microsoft.VisualBasic.FileIO.TextFieldParser("path.csv")
        myreader1.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited
        myreader1.Delimiters = New String() {","}
        Dim currentrow As String()
        While Not myreader1.EndOfData
            Try
                currentrow = myreader1.ReadFields()

                recs.Rows.Add(currentrow)
            Catch ex As Exception

            End Try
        End While
    End Using

После выполнения этого все все строки находятся в первой ячейке каждой строки в таблице данных. Мне нужно разделить запятые, а затем заполнить остальные строки. Примечание: Recs - это дата, в которую я пытаюсь поместить все.

...