Что нового

[Массивы] Как удалить пустые значения из массива.

misha497

Новичок
Сообщения
24
Репутация
2
В частности. Нужно прочитать какое-то кол-во ячеек в exсele в массив, однако кол-во этих строк не известно.
 
Автор
M

misha497

Новичок
Сообщения
24
Репутация
2
все таки не понял я этот код :-[. Новенький ещё. Мог бы кто нибудь с комментариями объяснить:
Код:
Dim $Temp[UBound($array)][UBound($array, 2)]

$Index = 0
For $i = 0 To UBound($array) - 1
    If $array[$i][0] Then
        For $j = 0 To UBound($array, 2) - 1
            $Temp[$Index][$j] = $array[$i][$j]
        Next
        $Index += 1
    EndIf
Next

If $Index Then
    ReDim $Temp[$Index][UBound($Temp, 2)]
Else
    $Temp = 0
EndIf

$array = $Temp


ну или свой вариант предложить.
 

Microteam

Осваивающий
Сообщения
74
Репутация
34
Код:
; Объявляем переменные.
Dim $Temp[UBound($array)][UBound($array, 2)]

;Объявляем переменную и присвиваем значение.
$Index = 0
;Это цикл на проверку.
For $i = 0 To UBound($array) - 1
    If $array[$i][0] Then
        For $j = 0 To UBound($array, 2) - 1
            $Temp[$Index][$j] = $array[$i][$j]
        Next
        $Index += 1
    EndIf
Next

;Это условие Если $Index Правда то размер указанного массива изменяеться
If $Index Then
; Изменение размера массива при этом не теряя информациии в нём.
    ReDim $Temp[$Index][UBound($Temp, 2)]
Else
    $Temp = 0
EndIf

$array = $Temp
 
Автор
M

misha497

Новичок
Сообщения
24
Репутация
2
Microteam, вы меня не поняли мне суть понять надо.
Ок, то что переменные объявляем эт. я понял, ;D меня интересует что в "цикле на проверку" происходит. Т.Е. :

Код:
Dim $Temp[UBound($array)][UBound($array, 2)]
;размерность $Temp равна размерности массива.
$Index = 0
For $i = 0 To UBound($array) - 1 ;пересматриваем строки от 0 до последней в массиве.
    If $array[$i][0] Then ;вот это что такое??, можно поподробнее
        For $j = 0 To UBound($array, 2) - 1 ;пересматриваем столбцы от 0 до последнего.
            $Temp[$Index][$j] = $array[$i][$j] ;вот здесь логику абсолютно не вкуряю, 
        Next
        $Index += 1
    EndIf
Next

If $Index Then
    ReDim $Temp[$Index][UBound($Temp, 2)]
Else
    $Temp = 0
EndIf

$array =

Если не сложно, мог бы кто нить объяснить на словах, что происходит. Т.Е. алгоритм кода.
 

XpycT

Скриптер
Сообщения
380
Репутация
133
misha497
Вот еще вариант очистки одномерного массива
Код:
#Region Includes
#Include <Array.au3>
#EndRegion Includes
#NoTrayIcon

For $i = UBound($aArray, 1) - 1 To 0 Step -1
	If $aArray[$i] = "" Then _ArrayDelete($aArray, $i)
Next
 
Верх