Как создать и заполнить Datatable из Txt файла - PullRequest
0 голосов
/ 15 января 2019

Я новичок на vb.net, поэтому не знаю, может ли этот вопрос звучать глупо. У меня есть txt файл на входе и я хочу создать Datatable и заполнить его текстовым файлом, но по некоторым причинам я не могу его заполнить. Вот мой код:

Public Function TxtToCsv(ByVal txtPath As String)

    Console.ReadLine()
    Dim dt As DataTable = New DataTable

    dt.Columns.Add("1", GetType(String))
    dt.Columns.Add("2", GetType(String))

    Dim myString As String = File.ReadAllText(txtPath)
    Dim rows() As String = myString.Split({Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)

    For i As Integer = 1 To dt.Rows.Count - 1

        Dim dr As DataRow
        dr = dt.NewRow()

        dr(columnIndex:=0) = rows(i).Substring(0, 25)
        dr(columnIndex:=1) = rows(i).Substring(26, 8)

        i += 1

    Next

    Console.WriteLine(dt)
    Console.ReadLine()

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Console.WriteLine(dt) вызовет .ToString для dt, которая возвращает полностью определенное имя.

Sub Main()
    Dim dt As DataTable = FillDataTable("C:\Users\***\Desktop\TestData.txt")
    Console.Write(DataTableToString(dt))
    Console.ReadKey()
End Sub

Private Function FillDataTable(txtPath As String) As DataTable
    Dim dt As New DataTable
    dt.Columns.Add("1", GetType(String))
    dt.Columns.Add("2", GetType(String))
    'ReadAllLines returns and array of the lines in the text file
    Dim rows() As String = File.ReadAllLines(txtPath)
    'Start at zero, the index of the first line
    For i As Integer = 0 To rows.Length - 1
        Dim dr As DataRow
        dr = dt.NewRow()
        dr(columnIndex:=0) = rows(i).Substring(0, 5)
        dr(columnIndex:=1) = rows(i).Substring(7, 3)
        dt.Rows.Add(dr)
        'Your index is incremented by the For...Next loop
        'i += 1
    Next
    Return dt
End Function

Private Function DataTableToString(dt As DataTable) As String
    Dim sb As New StringBuilder
    For Each r As DataRow In dt.Rows
        For Each c As DataColumn In dt.Columns
            sb.Append(r(c).ToString & " ")
        Next
        sb.AppendLine()
    Next
    Return sb.ToString
End Function
0 голосов
/ 15 января 2019

Вы зацикливаете строки таблицы данных вместо строк файла.

For i As Integer = 1 To rows.length - 1

Цикл for автоматически увеличивает «I», уберите + = 1

' i += 1

Я не думаю, что вы можете написать строку данных напрямую.

Console.WriteLine(dt) ' Find an other way to print the data

Я предлагаю вам включить Option Strict. Это поможет вам найти ошибки. Кроме того, пишите всего несколько строк за раз и проверяйте их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...