我有 test.csv 文件需要使用 autoit 读取所有数据
问问题
9770 次
3 回答
2
正如 TeamKiller 所说,您的问题非常模糊,但这里有一个示例代码,可以让您了解如何读取 CSV 文件。
#include <GUIConstants.au3>
#include <Array.au3>
#include <File.au3>
#include <String.au3>
Opt("MustDeclareVars", 1)
Global Const $CSVFILE = "C:\Temp\test.csv"
Global Const $DELIM = ";" ;the delimiter in the CSV file
Global $i, $arrContent, $arrLine, $res = 0
$res = _FileReadToArray($CSVFILE, $arrContent)
If $res = 1 Then
For $i = 1 To $arrContent[0]
$arrLine = StringSplit($arrContent[$i], $DELIM)
If IsArray($arrLine) And $arrLine[0]<>0 Then
_ArrayDisplay($arrLine)
; do something with the elements of the line
Else
MsgBox(48, "", "Error splitting line!")
EndIf
Next
Else
MsgBox(48, "", "Error opening file!")
EndIf
于 2012-12-18T10:53:23.483 回答
0
_ParseCSV() 的返回值是二维数组,如
$array[1][1] first line first data
$array[1][2] first line second data
$array[3][5] 3rd line 5th data
$array[0][0] gives number of lines
$array[0][1] gives number of data in each line
不需要包含
参数:
- 文件名
- 分界线
- 无法打开文件时显示消息
- 逻辑真/假跳过文件的第一行
;_ParseCSV("文件名",",","发生错误时的消息",true)
Func _ParseCSV($f,$Dchar,$error,$skip)
Local $array[500][500]
Local $line = ""
$i = 0
$file = FileOpen($f,0)
If $file = -1 Then
MsgBox(0, "Error", $error)
Return False
EndIf
;skip 1st line
If $skip Then $line = FileReadLine($file)
While 1
$i = $i + 1
Local $line = FileReadLine($file)
If @error = -1 Then ExitLoop
$row_array = StringSplit($line,$Dchar)
If $i == 1 Then $row_size = UBound($row_array)
If $row_size <> UBound($row_array) Then MsgBox(0, "Error", "Row: " & $i & " has different size ")
$row_size = UBound($row_array)
$array = _arrayAdd_2d($array,$i,$row_array,$row_size)
WEnd
FileClose($file)
$array[0][0] = $i-1 ;stores number of lines
$array[0][1] = $row_size -1 ; stores number of data in a row (data corresponding to index 0 is the number of data in a row actually that's way the -1)
Return $array
EndFunc
Func _arrayAdd_2d($array,$inwhich,$row_array,$row_size)
For $i=1 To $row_size -1 Step 1
$array[$inwhich][$i] = $row_array[$i]
Next
Return $array
EndFunc
于 2013-12-14T21:05:49.423 回答
-1
至于解析 CSV 文件,您可能最好使用库(在 AutoIt 中称为用户定义函数),特别是如果您有带有引号字符串(“单元格”/字符串内的逗号)或换行符的复杂 CSV,很难处理。
我可以推荐的最好的是CSVSplit。基本上你有一个函数_CSVSplit
,它接受一个完整的 CSV 文件(内容,即字符串!)并返回一个二维数组:
Local $sCSV = FileRead($sFilePath)
If @error Then ; ....
$aSplitArray = _CSVSplit($sCSV, ",")
然后你可以用这个数组做你想做的一切。显然,CSVSplit还提供了“反向”功能,可以将数组再次转为 CSV 字符串,_ArrayToCSV
.
最初作为答案发布在这里,我认为这是这个问题的副本。
于 2019-03-12T08:25:23.190 回答