使用vb6保存为csv文件

时间:2014-01-15 08:12:52

标签: listview vb6

下面是我解析文本文件数据的代码..我需要做的下一件事就是将其作为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

1 个答案:

答案 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

这仍然是一些奇怪的代码:

  • 将csv项添加到列表框
  • 再次将csv项添加到列表框中(csv项为“Date Time”时除外)
  • 显示Text2.Text中的csv项目(除非csv项目为“Date Time”) -

顺便把数据写入你可以使用的文件.WriteLine():reference