Что нового

[Массивы] Нумерация строк в массиве

op_joke

Новичок
Сообщения
20
Репутация
0
Доброго времени суток!
Смотрите, какая задача, читаю массив из большой-прибольшой Excel-книги, всяко-разно его обрабатываю (я теперь умею), а вот пронумеровать строки в массиве не могу. На идею про нумерацию меня натолкнуло значение переменной (и отсутствие нумерации в книге):

Код:
$iIndex = _ArraySearch($aRange, $sDelete, 1, 0, 0, 1) ; Поиск в массиве нашего значения


Она выдает номер искомой строки, можно такое реализовать вообще? Т.е. добавить к массиву колонку с нумерацией строк массива.

Будет ли правильным вот такое решение? Когда я заменяю данные в первом столбце на нумерацию
Код:
For $i = 0 To UBound($aRange) - 1
	  $aRange[$i][0] = $i+1
Next


Спасибо.
 

madmasles

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

Global $aArr1_1[Random(20, 50, 1)], $aArr1_2[Random(20, 50, 1)], $aArr2_1[Random(20, 50, 1)][Random(3, 6, 1)], $aArr2_2[Random(20, 50, 1)][Random(3, 6, 1)]

For $i = 0 To UBound($aArr1_1) - 1
	$aArr1_1[$i] = Random()
Next
_ArrayDisplay($aArr1_1, '$aArr1_1 до')
_ReDimArray_NumItem($aArr1_1)
ConsoleWrite(@error & @LF)
_ArrayDisplay($aArr1_1, '$aArr1_1 после')

$aArr1_2[0] = UBound($aArr1_2) - 1
For $i = 1 To $aArr1_2[0]
	$aArr1_2[$i] = Random()
Next
_ArrayDisplay($aArr1_2, '$aArr1_2 до')
_ReDimArray_NumItem($aArr1_2, 1, 1)
ConsoleWrite(@error & @LF)
_ArrayDisplay($aArr1_2, '$aArr1_2 после')

For $i = 0 To UBound($aArr2_1) - 1
	For $j = 0 To UBound($aArr2_1, 2) - 1
		$aArr2_1[$i][$j] = Random()
	Next
Next
_ArrayDisplay($aArr2_1, '$aArr2_1 до')
_ReDimArray_NumItem($aArr2_1)
ConsoleWrite(@error & @LF)
_ArrayDisplay($aArr2_1, '$aArr2_1 после')

$aArr2_2[0][0] = UBound($aArr2_2) - 1
For $i = 1 To $aArr2_2[0][0]
	For $j = 0 To UBound($aArr2_2, 2) - 1
		$aArr2_2[$i][$j] = Random()
	Next
Next
_ArrayDisplay($aArr2_2, '$aArr2_2 до')
_ReDimArray_NumItem($aArr2_2, 1, 1)
ConsoleWrite(@error & @LF)
_ArrayDisplay($aArr2_2, '$aArr2_2 после')



Func _ReDimArray_NumItem(ByRef $a_Array, $i_StartNum = 0, $i_FirstItem = 0)
	Local $i_Ub2, $i_Ub1

	Switch $i_StartNum
		Case 0, 1
		Case Else
			Return SetError(1, 0, $a_Array)
	EndSwitch
	Switch $i_FirstItem
		Case 0, 1
		Case Else
			Return SetError(2, 0, $a_Array)
	EndSwitch
	Switch UBound($a_Array, 0)
		Case 1, 2
		Case Else
			Return SetError(3, 0, $a_Array)
	EndSwitch
	$i_Ub2 = UBound($a_Array, 2)
	$i_Ub1 = UBound($a_Array)
	Switch $i_Ub2
		Case 0
			Local $a_Ret[$i_Ub1][2]

			If $i_FirstItem Then $a_Ret[0][0] = $a_Array[0]
			For $i = $i_FirstItem To $i_Ub1 - 1
				$a_Ret[$i][0] = $i_StartNum
				$a_Ret[$i][1] = $a_Array[$i]
				$i_StartNum += 1
			Next
		Case Else
			Local $a_Ret[$i_Ub1][$i_Ub2 + 1]

			If $i_FirstItem Then $a_Ret[0][0] = $a_Array[0][0]
			For $i = $i_FirstItem To $i_Ub1 - 1
				$a_Ret[$i][0] = $i_StartNum
				For $j = 0 To $i_Ub2 - 1
					$a_Ret[$i][$j + 1] = $a_Array[$i][$j]
				Next
				$i_StartNum += 1
			Next
	EndSwitch
	$a_Array = $a_Ret
	Return 1
EndFunc   ;==>_ReDimArray_NumItem
 
Автор
O

op_joke

Новичок
Сообщения
20
Репутация
0
madmasles
Работает =) Быстро работает. Спасибо :smile:
 
Верх