我需要将CSV文件中的列添加到数组中(多维数组或数组数组)。我使用CSV.au3加载行就好了,但我需要那个地方的列。我的CSV文件如下所示:
Item 1, Item 2, Another Item
Item 3, Item 4
它创建一个多维数组,如下所示:
$aResult[0] = [0] => 'Item 1', [1] => 'Item 2', [2] => 'Another Item'
$aResult[1] = [0] => 'Item 3', [1] => 'Item 4'
我希望它看起来像:
$aResult[0] = [0] => 'Item 1', [1] => 'Item 3'
$aResult[1] = [0] => 'Item 2', [1] => 'Item 4'
$aResult[2] = [0] => 'Another Item'
对于每一行,它应包含列而不是行。
答案 0 :(得分:1)
...它应该包含列而不是行。
根据Documentation - Function Reference - _ArrayTranspose()
:
转置1D或2D数组(交换行和列)
...获取CSV文件中的列并将其加载到数组中......
CSV文件到二维数组,按照Documentation - Function Reference - _FileReadToArray()
:
将指定文件读入1D或2D数组
示例:
#include <File.au3> ; _FileReadToArray() and $FRTA_NOCOUNT
#include <Array.au3>; _ArrayDisplay()
Global Const $g_sFileCSV = 'C:\file.csv'
Global Const $g_sDelimiterColumn = ','
Global $g_aCSV
_FileReadToArray($g_sFileCSV, $g_aCSV, $FRTA_NOCOUNT, $g_sDelimiterColumn)
If @error Then
ConsoleWrite('_FileReadToArray() error: ' & @error & @LF)
Else
_ArrayDisplay($g_aCSV)
EndIf
_FileWriteFromArray()
将数组保存为文本文件。
答案 1 :(得分:0)
这是CSV到2D数组示例。 Credits to Malkey
#include <array.au3>
Opt("MustDeclareVars", 1)
Dim $sCSV = '"010","2","03"' & @CRLF & _
'"24","30","20"' & @CRLF & _
'"txt","bla","toto"'
Local $arr = _CsvToArray2D($sCSV)
_ArrayDisplay($arr)
; Converts CSV format to a 2D array.
Func _CsvToArray2D($sCSV)
Local $aTmp = StringRegExp($sCSV & @CR, '(\V*)\v{1,2}', 3)
Local $NumCols[UBound($aTmp)]
For $x = 0 To UBound($aTmp) - 1
StringReplace($aTmp[$x], ",", ",")
$NumCols[$x] = @extended + 1
Next
Local $Max = _ArrayMax($NumCols, 1)
Dim $aArr[UBound($aTmp)][$Max]
For $i = 0 To UBound($aArr, 1) - 1
Local $aTemp = StringSplit($aTmp[$i], ",")
For $j = 0 To $aTemp[0] - 1
$aArr[$i][$j] = $aTemp[$j + 1]
Next
Next
Return $aArr
EndFunc ;==>_CsvToArray2D
;========> End of _CsvToArray2D ======================
答案 2 :(得分:0)
我暂时离开了这个项目,最后自己搞清楚了:
;Load the first line into an array (for our Count Later)
$columnsCounter = StringSplit($content[1], ",")
;Here we use the row count (from $content) and column count (from $columnsCounter)
;We define an array that is the perfect size for our Menu Items
Dim $MenuItems[$content[0] + 1][$columnsCounter[0] + 1]
; Now we loop through each row and column
For $x = 1 To ($content[0]) - 1
;Create an array with the row we are looking at
$oneRow = StringSplit($content[$x], ",")
;now loop through each column
For $y = 1 To ($columnsCounter[0])
;Grab the item we want and add it to our menu items array
$MenuItems[$x][$y] = $oneRow[$y]
Next
Next