Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: putman on January 23, 2014, 06:32:44 PM
-
Здравствуйте, не могу извлечь из массива нужный элемент.
print ($arr[1]) - работает, возвращает первый элемент.
print($arr [$index]) - не работает.
И со скобками пробовал и с квадратными и вообще без них и через запятую и двоеточие и точкой с тире.... перебрал всю клавиатуру, толку нуль.
Из описания по языку ничего не понял, кликерман не может работать с индексами массива в виде переменных, можно только реальные числа писать ?
Странные тогда массивы получаются, теперь надо для вывода инфы написать что то вроде этого:
print ($arr[1])
print ($arr[2])
print ($arr[3])
print ($arr[4])
print ($arr[5])
print ($arr[6])
print ($arr[7])
print ($arr[8])
print ($arr[9])
print ($arr[10])
print ($arr[11])
print ($arr[12])
, для чего тогда циклы если массив с ним не умеет работать.
Перечитал весь хелп по командам, нету там примера работы с переменной в роли индекса массива.
Очень жаль, придётся отказаться от массива и в новых версиях с нетерпением ждём думаю все появления возможности работы с индексами массива в виде обычной переменной.
-
Вот ты даешь. Как это нельзя. И примеры плохо читал.
Ищи ошибку у себя. Скорее всего переменная не числовая.
-
Да, мой косяк.
Использовал одну переменную для чтения строк из файла в массив, и потом её же из массива.
В файле первой идёт [1]-ая строка, а в массиве
Я всегда читал из массива несуществующую строку, которая только следующей запишется.
Простите, что нагнал кипишу.
-
Массив начинается с 0. Все прекрасно работает, по край ней мере на 4.9 версии, но в ней есть пока серьезный баг с циклом и подпрограммой в нем.
ARRPUSH($arr, 1)
ARRPUSH($arr, 2)
ARRPUSH($arr, 3)
ARRPUSH($arr, 4)
$index = 3
print("Вывод 1ой и 2ой строки массива")
print($arr[0])
print($arr[1])
print(" ")
print("Вывод 4ой строки")
print($arr[$index])
print(" ")
print("Вывод всех строк массива")
$index = 0
WHILE($index < ARRSIZE($arr))
print($arr[$index])
INC($index,1)
END_CYC
HALT
-
Cпасибо.
-
Можно и одну. Просто для массива писать $arr [$index-1]
-
Чтоб не создавать...
Привет Всем :) Такая вопрос-задачка. Можно ли вытащить из середины массивов массив и поставить его в конец, при этом остальные соответственно должны сместиться вниз на один.
Пример. Есть, допустим, 10 массивов (если я правильно выражаюсь, может правильно называть 1 массив и в нём 10 переменных?!):
$g[0]=47
$g[1]=22
$g[2]=53
$g[3]=12
$g[4]=5
$g[5]=85
$g[6]=44
$g[7]=17
$g[8]=3
$g[9]=74
Можно ли, допустим, $g[2] сделать $g[9], при этом все остальные должны сместиться вниз, т.е. должно потом получиться такое:
...
$g[0]=47
$g[1]=22
$g[2]=12
$g[3]=5
$g[4]=85
$g[5]=44
$g[6]=17
$g[7]=3
$g[8]=74
$g[9]=53
? :)
-
Проще всего это сделать через временный текстовый файл.
Пример
$g[0]=47
$g[1]=22
$g[2]=53
$g[3]=12
$g[4]=5
$g[5]=85
$g[6]=44
$g[7]=17
$g[8]=3
$g[9]=74
$zamena = 2 // номер строки массива
LOGWRITE ("До")
LOGWRITE (" ")
FOR($a=0,$a<ARRSIZE($g))
LOGWRITE ($g[$a])
END_CYC
$gsav = $g[$zamena]
TFWRITEARR("arr.txt", $g)
TFDELETE("arr.txt", $zamena+1)
TFWRITE("arr.txt", $gsav)
UNDEFINE($g)
TFREADARR("arr.txt", $g)
TFCLEAR("arr.txt", 1)
LOGWRITE (" ")
LOGWRITE ("После")
LOGWRITE (" ")
FOR($a=0,$a<ARRSIZE($g))
LOGWRITE ($g[$a])
END_CYC
HALT
$g[0]=47
$g[1]=22
$g[2]=53
$g[3]=12
$g[4]=5
$g[5]=85
$g[6]=44
$g[7]=17
$g[8]=3
$g[9]=74
$zamena = 2 // номер строки массива
$gsav = $g[$zamena]
TFWRITEARR("arr.txt", $g)
TFDELETE("arr.txt", $zamena+1)
TFWRITE("arr.txt", $gsav)
UNDEFINE($g)
TFREADARR("arr.txt", $g)
TFCLEAR("arr.txt", 1)
-
Зачем через текстовый? :o Неужели никто массивы не сортирует...
$g[0]=47
$g[1]=22
$g[2]=53
$g[3]=12
$g[4]=5
$g[5]=85
$g[6]=44
$g[7]=17
$g[8]=3
$g[9]=74
$zamena = 2 // номер строки массива
// сама перестановка
$len = ARRSIZE($g)
$temp = $g[$zamena]
FOR($i=$zamena, $i < ($len - 1))
$g[$i] = $g[$i+1]
END_CYC
$g[$len-1] = $temp
// выведем результат
FOR($i=0, $i < $len)
LOGWRITE ("$g[", $i, "]=", $g[$i])
END_CYC
HALT
-
Зачем через текстовый? :o Неужели никто массивы не сортирует...
Потому что там может быть не 9 строк а 100500. И сколько этот FOR все это будет перебирать?
-
А сколько он их будет писать и читать?
Но это всё в сторону быстродействия массивов.
Не думаю что в спрашиваемой задаче их больше 100, а скорее не больше десятка-двух, иначе бы он его руками не задавал каждый элемент ;D