Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: Aleksandr31 on March 21, 2015, 06:16:32 PM
-
снова я с поиском в чисел ???, требуется найти одна, двух, трехзначных чисел. К сожалению как найти одно и двухзначные числа не могу понять, кликер находит одно и двухзначные числа в составе трехзначных (скажем 23 в 230 или в 623) :(, как это то исключить недопонимаю, может подскажите.
-
ищешь первую цифру. Потом проверяешь последующие позиции в строке, пока цифры не пропадут. Всё, есть начальная и конечная позиция числа, вырезаем из строки.
Только нужно искать все подряд сразу.
-
Примерно так:
$str = "строка примера № 336, содержит число 17"
$ns = "0123456789"
$len = STRLEN($str)
$start = 0
$end = 0
UNDEFINE($num)
FOR($i=1, $i < ($len+1))
$s = STRCUT ($str, $i, 1)
IF(STRPOS ($ns, $s) > 0)
IF($start = 0)
$start = $i
END_IF
ELSE
IF($start > 0)
$end = $i - 1
ARRPUSH($num, INT(STRCUT2 ($str, $start, $end)))
$start = 0
END_IF
END_IF
END_CYC
IF($start > 0)
ARRPUSH($num, INT(STRCUT2 ($str, $start, $len)))
END_IF
LOGWRITE ("Всего чисел в строке: ", ARRSIZE($num))
FOR($j=0, $j < ARRSIZE($num))
LOGWRITE ("Число №", $j+1, " ", $num[$j])
END_CYC
HALT
По нормальному, нужно давать пример строки. Или ссылку на обсуждение.
-
хм.. и правда пример текста чего то не подумал приложить, извиняйте, да и задачку я вкратце описал, что тоже наверно неправильно, просто хочется самому разобраться но знаний походу не хватает :-(, а задачка состоит в том что надо обработать текстовый файл полученный при помощи скрипта который недавно предложил Vint (еще раз спасибо), но обработать его надо с определённый условием. К примеру задано начальное строка "7" и число поиска "50", его может и не быть в этой строке но потом это число увеличивается на заданный шаг скажем "8", и снова ищется в этой строке и т.д. строка может содержать числа от 0-500, то есть число поиска может увеличится не более чем до 500. Когда все варианты для этой строки найдены, поиск переходит к следующей строке но начальное число поиска в следующей строке это разница числа с последним шагом и максимальным значением 500 ну и т.д., а самое интересное что закончится поиск должен там где начался, то есть с начальной строки и ограничится начальным числом поиска, как бы пройдя по кругу, ну вот такая нетривиальная задачка, по крайней мере для меня. В Обработанном варианте числа хотелось бы записать в виде 7:50:8. строка:число:шаг.
-
UNDEFINE($x)
UNDEFINE($y)
UNDEFINE($h)
UNDEFINE($s)
UNDEFINE($str)
DEFINE($x, 50) //начальное число для поиска
DEFINE($y, 7) //начальная строка поиска
DEFINE($h, 8) //шаг увеличения часла
FOR($y,$y<TFCOUNT ("ИсхНабор.txt")+1)
FOR($x,$x < 500)
$str = TFREAD ("ИсхНабор.txt", $y)
INT($str)
IF(STRPOS($str, $x,) > 0)
TFWRITE("ОбрНабор.txt",STRCONCAT($x,":", $y-1, ":",$h))
END_IF
LOGWRITE ("шаг=",$h)
LOGWRITE ("Х=",$x)
LOGWRITE ("У=",$y)
INC($x,$h)
END_CYC
DEFINE($s, $x-500)
UNDEFINE($x)
DEFINE($x, $s)
WAIT(5)
END_CYC
вот моя попытка, придумать но чую вызовет смех :-[, очень сильно не смейтесь лузер я. Уперся в правильный поиск числа и с шагом какая то ошибка, не пойму задаю определённый шаг а в итоге шаг на 1 больше :( , в записи результата $y-1, задал специально т.к. в тексте до : строки начинаются с нулевой а реально строка может быть только 1.
-
Попробуй.
Define($String) // Номер строки в файле
Define($Number) // Искомое число
Define($Step) // Шаг
Define($SubString)// Позиция пробела перед найденым числом
$String=INPUTBOX("Введите номер строки в файле. Нумерация идет от 0. Всего 15 строк.", "0",20)
$Number=INPUTBOX("Введите число от 0 до 500.", "0",20)
$Step =INPUTBOX("Введите шаг.", "1",20)
Print("Начальная строка =",$String)
Print("Начальное число =",$Number)
Print("Шаг =",$Step)
$Number=$Number+0 //Без этой записи кликер принимает переменную за строку
For($a,$a<17)
$String=$String+1
If($String=17)
$String=1
End_if
FOR ($Number,$Number<500,$Step)
$SubString=STRPOS(TFREAD("ИсхНабор.txt",$String),STRCONCAT(" ",$Number," "))
If($SubString>0)
Print("Число найдено!")
Print("Число =",$Number)
INC($String,-1)
Print("Строка =",$String)
HALT
End_if
End_cyc
$Number=500-$Number
End_cyc
Print("Число не найдено.")
HALT
В файле после последнеи цифры в строках должен быть пробел
v скачать v
-
NStra, спасибо за помощь, возьму твой скрипт за основу, попробую переделать т.к. нужно чтобы находил Все цифры в файле а не одно и записывал их в другой файл. Вечером попробую переделать, результат опишу :D. $Number=$Number+0 //Без этой записи кликер принимает переменную за строку - не знал, спасибо за подсказку. Получается если с переменной производится арифметическое действие то кликер воспринимает его как число, а если нет то как текст? Странно.