如何在autoit中读取Test.csv文件格式

问题描述 投票:-1回答:3

我有test.csv文件需要使用autoit读取所有数据

autoit
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

0
投票

_ParseCSV()的返回值是2D数组

$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

不需要包括

PARAMS:

  1. 文件名
  2. 分隔符
  3. 消息显示如果无法打开文件
  4. logical true / false跳过文件的第一行

; _ParseCSV(“filename”,“,”,“如果发生错误则发出消息”,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

-1
投票

至于解析CSV文件,最好使用库(在AutoIt中称为用户定义的函数),尤其是具有带引号字符串的复杂CSV(“单元格”/字符串中的逗号)或换行符,这些很难处理。

我能推荐的最好的是CSVSplit。基本上你有一个函数_CSVSplit,它接受一个完整的CSV文件(内容,即字符串!)并返回一个二维数组:

Local $sCSV = FileRead($sFilePath)
If @error Then ; ....

$aSplitArray = _CSVSplit($sCSV, ",")

然后,您可以使用此数组执行所需的任何操作。显然,CSVSplit还提供了“反向”功能,可以将数组再次转换为CSV字符串,_ArrayToCSV


最初发布为an answer here,我认为这是这个问题的副本。

© www.soinside.com 2019 - 2024. All rights reserved.