下面是我解析文本文件数据的代码..我需要做的下一件事就是将其作为csv文件执行..将文本文件保存到csv文件类型的代码是什么?提前感谢您的帮助。
Private Sub cmd_parse_Click()
Dim i As Long
Dim ff As Integer
Dim sText As String
Dim myFSO, ts, ts2, ft2, ft1, r
Set myFSO = CreateObject("Scripting.FileSystemObject")
Set ts = myFSO.GetFile(txtfilename.Text)
Set ft1 = ts.OpenAsTextStream(ForReading, TristateUseDefault)
List1.AddItem Format(Now, "YYYY-MM-DD HH:MM:SS") & " Time start"
Do Until ft1.AtEndOfStream
a = ft1.ReadLine
r = r + 1
Text1.Text = r
a = Split(a, ",")
For i = 0 To UBound(a)
Text2.Text = a(i)
If Text2.Text = "Date Time" Then
ListView1.ListItems.Add(1).Text = Text2.Text
End If
If Text2.Text = "Date Time" Then
Text2.Text = ""
End If
If Text2.Text = a(1) Then
ListView2.ListItems.Add(1).Text = a(1)
GoTo 1
End If
If Not IsNumeric(Text2.Text) Then
ListView1.ListItems.Add(1).Text = a(i)
Else
ListView2.ListItems.Add(1).Text = a(i)
' Stop
End If
1
Next i
DoEvents
Loop
List1.AddItem Format(Now, "YYYY-MM-DD HH:MM:SS") & " Time end"
txtfilename.Text = ""
End Sub
答案 0 :(得分:1)
你的示例代码应该做什么?
一些评论:
你定义了一些没有类型的变量,这将使它们变成一个变量..将变量声明为特定类型总是更好
Dim myFSO, ts, ts2, ft2, ft1, r
它首先读入一个文件并将每一行存储在一个变量中 它然后在每个逗号上分割有线数据,所以我假设它读取了一个csv文件? 你正在使用相同的变量来存储整行,以及存储包含每个项目的数组...我从来没有尝试过,如果这样可行会很惊讶...但你应该绝对使用一个变量来保存完整的字符串另一个用于保存数组的变量
a = ft1.ReadLine
r = r + 1
Text1.Text = r
a = Split(a, ",")
你可以按如下方式声明和数组:
dim strArray() as string
然后您的split命令可能是:
strArray = Split(a, ",")
然后循环遍历csv的每个项目并执行一些操作:
您将csv项目存储在文本框中..为什么?你已经把它作为(i)..将它复制到文本框只会减慢过程
然后检查项目是否为“日期时间”,如果为真,则将其添加到列表框
If Text2.Text = "Date Time" Then
ListView1.ListItems.Add(1).Text = Text2.Text
End If
接下来你再次检查项目是否为“日期时间”,如果那是真的那么你就清空了文本框......为什么不在同一个“if then”中那样做呢?
然后你检查text2是否仍然包含相同的数据,除非数据是“日期时间”,否则总是如此...所以为什么不用“else”和你的“if then”......那就是什么
然后检查数据是否为数字,但是是否为数字,您执行相同的操作?
If Not IsNumeric(Text2.Text) Then
ListView1.ListItems.Add(1).Text = a(i)
Else
ListView2.ListItems.Add(1).Text = a(i)
' Stop
End If
在循环中清理代码后(但仍然想知道它的作用),它可能如下所示:
Do Until ft1.AtEndOfStream
a = ft1.ReadLine
r = r + 1
Text1.Text = r
strArray = Split(a, ",")
For i = 0 To UBound(strArray)
If strArray(i) = "Date Time" Then
ListView1.ListItems.Add(1).Text = strArray(i)
Text2.Text = ""
Else
ListView2.ListItems.Add(1).Text = strArray(i)
Text2.Text = strArray(i)
GoTo 1
End If
ListView1.ListItems.Add(1).Text = strArray(i)
1
Next i
DoEvents
Loop
这仍然是一些奇怪的代码:
顺便把数据写入你可以使用的文件.WriteLine():reference