我有一个具有以下格式的 csv 文件:
Line,Title1,Title2,Title3,Title4,Title5
181,25.1,225.2,-7,120.3,35
180,10.1,325.2,-5,320.3,20
179,0.1,525.2,-2,520.3,0
178,0.1,525.3,-2,520.5,0
177,0.1,525.3,-2,520.6,0
我想将其格式化为以下结构:
Line;Title;Value
181,Title1,25.1
181,Title2,225.2
181,Title3,-7
181,Title4,120.3
181,Title5,35
182,Title1,10.1
182,Title2,325.2
182,Title3,-5
182,Title4,320.3
182,Title5,20
到目前为止,我已经将 csv 导入到具有以下功能的数据表中:
Public Function CsvToDatatable(ByVal filename As String, ByVal separator As String)
'Dim dt As New System.Data.DataTable
'Dim firstLine As Boolean = True
Dim myDate As DateTime
If IO.File.Exists(filename) Then
Using sr As New StreamReader(filename)
While Not sr.EndOfStream
If firstLine Then
firstLine = False
Dim cols = sr.ReadLine.Split(separator)
For Each col In cols
If col <> "Title" Then
dt.Columns.Add(New DataColumn(col, GetType(Decimal)))
Else
dt.Columns.Add(New DataColumn(col, GetType(String)))
End If
Next
Else
Dim data() As String = sr.ReadLine.Split(separator)
'Dim oDate As DateTime = Convert.ToDateTime(data(0))
'data(0) = oDate
dt.Rows.Add(data.ToArray)
End If
End While
End Using
End If
Return dt
End Function
我的想法是通过另一个函数将数据表转换为新格式。但我不知道如何做到这一点。 实现这一目标的最简单方法是什么?
答案 0 :(得分:1)
您可以简单地随时编写输出 CSV,而不是将其加载到数据表中。以下代码实现了这一点:
Public Sub ConvertCsv(sourceFile As String, destinationFile As String, delimiter As String)
If IO.File.Exists(sourceFile) Then
Dim reader As New StreamReader(sourceFile)
Dim writer As New StreamWriter(destinationFile)
Dim headers As String()
If Not reader.EndOfStream Then
' Read headers
headers = reader.ReadLine.Split(delimiter)
While Not reader.EndOfStream
Dim line As String = reader.ReadLine
Dim values = Split(line, delimiter)
Dim item As String
' Save first column as the item name
item = values(0)
' Loop through remaining columns
For counter As Integer = 1 To values.Count - 1
' Write line with values to destination file
writer.WriteLine(item & delimiter & headers(counter) & delimiter & values(counter))
Next
End While
End If
' CLose files
reader.Close()
writer.Close()
End If
End Sub