Используйте vb.net в приложении Windows Form для объединения файлов .csv в datagridview, когда «столбцы» основаны на строках, необходимо развернуть - PullRequest
0 голосов
/ 18 июня 2019

У меня есть список файлов .csv (около 120) внутри каталога, который мне нужно объединить и экспортировать в один CSV-файл, а также поместить на сервер SQL.Для этого у меня была кнопка, которая помещала бы всю информацию о файлах csv в представление данных, а затем экспортировала представление данных в файл csv, а также импортировала их в таблицу sql.Я могу сделать все это, за исключением обработки формата файла CSV.Файлы csv сохраняются нечетным образом, когда заголовки столбцов располагаются внизу столбца A, а данные - в столбце B. Мне по сути нужно повернуть таблицу и затем загрузить ее в таблицу данных.Я не уверен, как это сделать: Пример файла

.csv:

РЕДАКТИРОВАТЬ: все 133 заголовка столбца вручную добавлены в Datagridview.

 Column A            Column B
Column Header 1      Data for Column Header 1
Column Header 2      Data for column Header 2
 ......                .........
Column Header 133    Data for column Header 133

Мне нужны заголовки столбцов и информация, чтобы не быть в 2 столбца, как это.Я мог бы вручную изменить файл CSV с Excel, но это было бы для 100 файлов.

Вот мой код до сих пор

        Try

                Dim thereader As New StreamReader("Y:\Public\Sanmina Production\3-Projector MTF Test\MTFTest_LJ902A180412AT00022_2019-04-10_17-14-11.csv", Encoding.Default)
                Dim sline As String = ""
                Dim colsexpected As Integer = 133
                Do
                    sline = thereader.ReadLine
                    If sline Is Nothing Then Exit Do
                'Dim words() As String = sline.Split(",")
                Dim keptwords As New List(Of String)
                Dim dataentry() As String = sline.Split(",")
                'DataGridView1.Rows.Add("")
                For ix As Integer = 0 To 132
                    'DataGridView1.Rows(DataGridView1.Rows.Count - 1).Cells(ix).Value = dataentry
                    'keptwords.Add(dataentry(1))
                    kkeptwords.
                Next
                Dim sResult As String = ""

                For Each elem As String In keptwords
                    sResult &= elem & " "
                Next

                MsgBox(sResult)
            Loop
                thereader.Close()

            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try


            'strFileName = Dir()
        'Loop


    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try

Я остановил кодирование после добавления пустой строки, потому что я понял,каким будет мой исход.

1 Ответ

0 голосов
/ 18 июня 2019

Теперь у меня все работает оптимально.У меня есть работающий цикл каталогов, и я обнаружил, что большая часть ошибок возникла из-за отсутствия правильной пустой строки, добавленной к правильному месту.Этот код теперь работает полностью.Тем не менее, я в конечном итоге использовал обходной путь, чтобы пропустить ненужные данные, ища буквы MTF или нет данных в файле CSV.Вот рабочий обновленный код.

    Try
        DataGridView1.Rows.Add("")
        lblFile.Text = "Working"
        Dim i As Integer = 0
        Dim RowEdit As Integer = 0
        Dim Files() As String = Directory.GetFiles("Y:\Public\test\", "*.csv", SearchOption.TopDirectoryOnly)
        Dim ArrLength As Integer = Files.Length
        Dim ProgressBarStep As Decimal = 100 / ArrLength
        Dim ProgressBarTotal As Decimal = Nothing
        Dim sResult As String = ""
        For Each element As String In Files
            sResult &= element & " "
        Next
        'MsgBox(sResult)

        For Each element As String In Files
            'lblFile.Text = element
            PB1.Value = ProgressBarTotal


            Try
                i = 0
                Using myReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(element)
                    myReader.TextFieldType = FileIO.FieldType.Delimited
                    myReader.SetDelimiters(",")

                    Dim currentRow As String()
                    While Not myReader.EndOfData
                        Try
                            currentRow = myReader.ReadFields()
                            Dim currentField As String
                            For Each currentField In currentRow
                                If currentField = "" Then
                                    'Must be value
                                    DataGridView1.Rows(0).Cells(i).Value = currentField
                                    i = i + 1
                                Else

                                    If currentField.Substring(0, 1) = "M" Then

                                        If currentField.Substring(1, 1) = "T" Then

                                            If currentField.Substring(2, 1) = "F" Then
                                                'Skip this one
                                                ' MsgBox("Skip")
                                            Else
                                                DataGridView1.Rows(0).Cells(i).Value = currentField
                                                i = i + 1
                                            End If
                                        Else
                                            DataGridView1.Rows(0).Cells(i).Value = currentField
                                            i = i + 1

                                        End If
                                    Else
                                        DataGridView1.Rows(0).Cells(i).Value = currentField
                                        i = i + 1

                                    End If
                                End If

                            Next
                        Catch ex As Exception
                            MsgBox(ex.ToString)
                        End Try
                    End While
                End Using

                DataGridView1.Rows.Add("")
                'RowEdit = RowEdit + 1
                'Select bottom row
                Dim nRowIndexLast As Integer = DataGridView1.Rows.Count - 1
                DataGridView1.Rows(nRowIndexLast).Selected = True
                Dim CurrentRow1 As DataGridViewRow = DataGridView1.CurrentRow
                Dim results As DataGridViewRow = CType(CurrentRow1.Clone(), DataGridViewRow)
                Dim currentindex As Int32 = DataGridView1.CurrentRow.Index
                DataGridView1.Rows.RemoveAt(currentindex)
                Dim newindex As Int32 = 0
                DataGridView1.Rows.Insert(0, results)
                ProgressBarTotal = ProgressBarTotal + ProgressBarStep
                i = 0

            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try

        Next
        DataGridView1.Rows.RemoveAt(DataGridView1.Rows.Count - 1)
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try

    DataGridView1.Rows.RemoveAt(0)
    lblFile.Text = "Complete"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...