在VB6中读取.CSV文件并找到最大数值:

时间:2011-12-28 03:46:41

标签: csv vb6

我正在努力弄清楚如何引入.CSV文件,读入每个整数数据,并简单地找到文件的最大值。

我已经完成了在excel中打开文件并使用VB6在excel中进行计算。但是,我不想使用任何外部程序。

请有人帮忙解释如何打开.CSV文件,并将数据条目读入变量。

这已经好几个小时了,这让我绝对疯了。

我可以从那里轻松完成剩下的工作。

谢谢大家/女士......

3 个答案:

答案 0 :(得分:3)

Dim F As Long, d As Double, dMax As Double
F = Freefile
Open "file.csv" For Input As F
While Not Eof(F)
    Input #F, d
    If d > dMax Then dMax = d
Wend
Close F
MsgBox "Max is " & dMax

它假定CSV中只有一列。使用

Input #F, col1, col2, col3

等......对于多列。

答案 1 :(得分:2)

Jet Text IISAM可以成为包含表格文本的各种文件处理的强大工具。您可以执行简单查询,在文件之间进行JOIN,在查询中嵌入VBA表达式服务表达式,将输入文件转换为另一种输出格式以及许多其他内容。

通过添加schema.ini文件,您可以更好地控制分隔符,列命名,数据类型格式,还可以处理固定字段文本。

仅用于查找列的最大值:

'Requires a reference to ADO 2.5 or later.

Private Function GetMax( _
    ByVal FieldNum As Integer, _
    ByVal CSVFile As String, _
    Optional ByVal CSVFolder As Variant) As Variant
    'Find max value in field FieldNum of CSVfile, assumed
    'here to be a HDR=No CSV file so field names are F1,
    'F2, etc.

    Dim rsResult As ADODB.Recordset

    If IsMissing(CSVFolder) Then
        CSVFolder = App.Path
    ElseIf VarType(CSVFolder) <> vbString Then
        CSVFolder = App.Path
    End If

    Set rsResult = New ADODB.Recordset
    With rsResult
        .CursorLocation = adUseClient
        .Open "SELECT Max(F" & CStr(FieldNum) & ") FROM [" & CSVFile & "]", _
              "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" _
              & CSVFolder _
              & "';Extended Properties='Text;HDR=No'", _
              adOpenStatic, adLockReadOnly, adCmdText
        GetMax = .Fields(0).Value
        .Close
    End With
End Function

虽然这看起来有点矫枉过正,但请将其视为许多其他文本表处理创意的“细菌”。

这在VBScript中与在VB中一样有效和有用。

有关详细信息,请参阅Processing Text Databases

答案 2 :(得分:1)

看起来问题的根源是一次读取一行文件。我将使用Scripting.FileSystemObject http://support.microsoft.com/kb/186118来完成这项工作。它比内置的Input语句更容易使用。以下是该页面的一些代码:

Private Sub Command1_Click()
   'Declare variables.
    Dim fso As New FileSystemObject
    Dim ts As TextStream
    'Open file.'
    Set ts = fso.OpenTextFile(Environ("windir") & "\system.ini")
   'Loop while not at the end of the file.'
    Do While Not ts.AtEndOfStream
        Debug.Print ts.ReadLine
    Loop
    'Close the file.'
    ts.Close
End Sub

获得一行文本后,使用Split获取一组值,然后检查每一个值以查看它是否为数字。如果是,请在搜索中包含最大值。请参阅此问题,以获得可能有所帮助的类似问题的一些解决方案:Is there a VB6 function analagous to C's sscanf?