我正在努力弄清楚如何引入.CSV文件,读入每个整数数据,并简单地找到文件的最大值。
我已经完成了在excel中打开文件并使用VB6在excel中进行计算。但是,我不想使用任何外部程序。
请有人帮忙解释如何打开.CSV文件,并将数据条目读入变量。
这已经好几个小时了,这让我绝对疯了。
我可以从那里轻松完成剩下的工作。
谢谢大家/女士......
答案 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?