Что нового

Повернуть массив (как при iTranspose)

Vinosh

Сервер не ###. Стоял и стоять будет.
Сообщения
15
Репутация
1
есть массив в файле CSV вида:
Код:
1;2;3;4;5
a;b;c;d;e

Нужно преобразовать его в
Код:
1;a
2;b
3;c
4;d
5;e

Пока сам файл читаю в массив с помощью:
Код:
$sText = FileRead('FILE.csv')
$sText = StringRegExpReplace($sText, '([\r\n]*$)', '')
$aText = StringSplit(StringStripCR($sText), @LF)
StringReplace($aText[1], ';', '')
$i2D = @extended + 1
Dim $aRes[$aText[0]][$i2D]
For $i = 1 To $aText[0]
    $aTemp = StringSplit($aText[$i], ';')
    For $j = 1 To $aTemp[0]
        $aRes[$i - 1][$j - 1] = $aTemp[$j]
    Next
Next
$aText = 0
$aTemp = 0
_ArrayDisplay($aRes, 'Out', -1, 1)


может есть какой способ преобразовать сам массив $aRes или хотя бы csv файл?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Можно так:
Код:
$sFile = "myfile.csv"

$aLine1 = StringSplit(FileReadLine($sFile, 1), ';')
$aLine2 = StringSplit(FileReadLine($sFile, 2), ';')
FileDelete($sFile)

For $i = 1 To $aLine1[0]
	FileWriteLine($sFile, $aLine1[$i] & ';' & $aLine2[$i])
Next
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Если работать с массивом, то можно так

Код:
#include <Array.au3>

Dim $aOld[2][10]

For $i = 0 To UBound($aOld) -1
    For $j = 0 To UBound($aOld, 2) -1
        $aOld[$i][$j] = Random(1, 1000, 1)
    Next
Next

_ArrayDisplay($aOld)

$new_Array = ArrayReverse($aOld)
If IsArray($new_Array) Then
    _ArrayDisplay($new_Array)
EndIf

Func ArrayReverse($aArray)
    Local $iRow, $iCol, $aResult
    If (IsArray($aArray) And UBound($aArray, 2)) Then
        $iRow = UBound($aArray)
        $iCol = UBound($aArray, 2)
        If (($iRow > 0) And ($iCol > 0)) Then
            Dim $aResult[$iCol][$iRow]
            For $column = 0 To $iCol -1
                For $row = 0 To $iRow -1
                    $aResult[$column][$row] = $aArray[$row][$column]
                Next
            Next
            Return $aResult
        EndIf
    EndIf
    Return 0
EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Мой вариант.
Код:
#include <Array.au3>

Local $aArray[Random(10, 20, 1)][Random(10, 20, 1)]

For $i = 0 To UBound($aArray) - 1
	For $j = 0 To UBound($aArray, 2) - 1
		$aArray[$i][$j] = $i
	Next
Next

_ArrayDisplay($aArray, 'Before')
_ArraySwap_Rows_Columns($aArray)
_ArrayDisplay($aArray, 'After')

Func _ArraySwap_Rows_Columns(ByRef $a_Array)
	Local $i_Row, $i_Column, $a_Tmp[1]

	If UBound($a_Array, 0) <> 2 Then Return False
	$i_Row = UBound($a_Array)
	$i_Column = UBound($a_Array, 2)
	ReDim $a_Tmp[$i_Column][$i_Row]
	For $i = 0 To $i_Row - 1
		For $j = 0 To $i_Column - 1
			$a_Tmp[$j][$i] = $a_Array[$i][$j]
		Next
	Next
	$a_Array = $a_Tmp
	Return True
EndFunc   ;==>_ArraySwap_Rows_Columns
 
Верх