如何从CSV文件中删除一些行和列并保存到新的CSV?

时间:2019-07-12 06:19:28

标签: vb.net

我有一个csv文件,其中前3行包含不需要的数据。第四行仅在第一列中需要数据。还有4行包含不需要的数据。第9行到最后的行需要数据。从第9行开始,共有11列数据,需要第1至6列,而不需要第7至11列。 我有使用DataGridView进行临时存储的代码。它提供了上述的解析,但是我不需要查看数据,我需要创建一个解析后的新CSV文件。 可能有一种方法使用数据表来临时存储,而不是使用DataGridView,但是使用LINQ可能有一种更简单的方法。我没有LINQ的经验,并且我对数据表的经验非常有限。我对DataGridView感到很满意,因为我已经广泛使用它,但是正如我之前写的那样,我不需要显示结果。

我在https://www.codeproject.com/questions/634373/how-to-delete-the-rows-in-csv-file中尝试了该代码。但这不适合我的情况。下面的代码使用DataGridView进行临时存储,但是我敢肯定有更好的方法。

   Using MyReader As New TextFieldParser(racerFile)
        Dim currentRow As String()
        MyReader.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited
        MyReader.Delimiters = New String() {","}
        currentRow = MyReader.ReadFields()
        currentRow = MyReader.ReadFields()
        currentRow = MyReader.ReadFields()
        boatClass = MyReader.ReadFields()(0)
        currentRow = MyReader.ReadFields()
        currentRow = MyReader.ReadFields()
        currentRow = MyReader.ReadFields()
        currentRow = MyReader.ReadFields()
        While Not MyReader.EndOfData
            Try
                Dgvs.Rows.Add()
                currentRow = MyReader.ReadFields()
                Dgvs(0, rd).Value = boatClass
                Dgvs(1, rd).Value = currentRow(1)
                Dgvs(2, rd).Value = currentRow(2)
                Dgvs(3, rd).Value = currentRow(3)
                Dgvs(4, rd).Value = currentRow(4)
                Dgvs(5, rd).Value = currentRow(5)
                rd += 1
            Catch ex As Exception
            End Try
        End While
   End Using

   Using WriteFile As New StreamWriter(myFile)
        For x As Integer = 0 To Dgvs.Rows.Count - 1 
            For y As Integer = 0 To Dgvs.Columns.Count - 1
                WriteFile.Write(Dgvs.Rows(x).Cells(y).Value)  
                If y <> Dgvs.Columns.Count - 1 Then
                    WriteFile.Write(", ")
                End If
            Next
            WriteFile.WriteLine()
        Next
    End Using

我需要一个CSV文件进行输出。

1 个答案:

答案 0 :(得分:0)

您可以将值存储在List(Of String)中,而不是将值存储在DatGridView中,其中列表中的每个字符串都是输出csv文件的一行。

 Dim output As New List(Of String)
 While Not MyReader.EndOfData
     Try
         currentRow = MyReader.ReadFields()
         Dim line As String
         line = boatClass
         line = line & "," & currentRow(1).ToString
         line = line & "," & currentRow(2).ToString
         line = line & "," & currentRow(3).ToString
         line = line & "," & currentRow(4).ToString
         line = line & "," & currentRow(5).ToString
         output.Add(line)
     Catch ex As Exception
     End Try
 End While

然后按如下所示编写output行。

Using WriteFile As New StreamWriter(myFile)
    For Each line As String In output 
        WriteFile.Write(line)
    Next
End Using