Author Topic: поиск чисел в текстовом файле  (Read 4162 times)

0 Members and 1 Guest are viewing this topic.

Aleksandr31

  • Зашел в гости
  • *
  • Posts: 19
    • View Profile
поиск чисел в текстовом файле
« on: March 21, 2015, 06:16:32 PM »
снова я с поиском в чисел  ???, требуется найти одна, двух, трехзначных чисел. К сожалению как найти одно и двухзначные числа не могу понять, кликер находит одно и двухзначные числа в составе трехзначных (скажем 23 в 230 или в 623)  :(, как это то исключить недопонимаю, может подскажите.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: поиск чисел в текстовом файле
« Reply #1 on: March 21, 2015, 08:18:34 PM »
ищешь первую цифру. Потом проверяешь последующие позиции в строке, пока цифры не пропадут. Всё, есть начальная и конечная позиция числа, вырезаем из строки.
Только нужно искать все подряд сразу.


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: поиск чисел в текстовом файле
« Reply #2 on: March 21, 2015, 10:02:33 PM »
Примерно так:
Code: (clickermann) [Select]
$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

По нормальному, нужно давать пример строки. Или ссылку на обсуждение.


Aleksandr31

  • Зашел в гости
  • *
  • Posts: 19
    • View Profile
Re: поиск чисел в текстовом файле
« Reply #3 on: March 21, 2015, 11:52:11 PM »
хм.. и правда пример текста чего то не подумал приложить, извиняйте, да и задачку я вкратце описал, что тоже наверно неправильно, просто хочется самому разобраться но знаний походу не хватает :-(, а задачка состоит в том что надо обработать текстовый файл полученный при помощи скрипта который недавно предложил Vint (еще раз спасибо), но обработать его надо с определённый условием. К примеру задано начальное строка "7" и число поиска "50", его может и не быть в этой строке но потом это число увеличивается на заданный шаг скажем "8", и снова ищется в этой строке и т.д. строка может содержать числа от 0-500, то есть число поиска может увеличится не более чем до 500. Когда все варианты для этой строки найдены, поиск переходит к следующей строке но начальное число поиска в следующей строке это разница числа с последним шагом и максимальным значением 500 ну и т.д., а самое интересное что закончится поиск должен там где начался, то есть с начальной строки и ограничится начальным числом поиска, как бы пройдя по кругу, ну вот такая нетривиальная задачка, по крайней мере для меня.  В Обработанном варианте числа хотелось бы записать в виде 7:50:8. строка:число:шаг.
« Last Edit: March 22, 2015, 12:03:57 AM by Aleksandr31 »

Aleksandr31

  • Зашел в гости
  • *
  • Posts: 19
    • View Profile
Re: поиск чисел в текстовом файле
« Reply #4 on: March 22, 2015, 12:13:18 AM »
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.
« Last Edit: March 22, 2015, 12:27:50 AM by Aleksandr31 »

NStra

  • Освоившийся
  • **
  • Posts: 45
  • Подпись под аватаром.
    • View Profile
Re: поиск чисел в текстовом файле
« Reply #5 on: March 22, 2015, 05:33:01 AM »
Попробуй.
Code: [Select]
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
« Last Edit: March 22, 2015, 07:54:54 AM by NStra »
Тут должна быть подпись...

Aleksandr31

  • Зашел в гости
  • *
  • Posts: 19
    • View Profile
Re: поиск чисел в текстовом файле
« Reply #6 on: March 22, 2015, 12:56:02 PM »
NStra, спасибо за помощь, возьму твой скрипт за основу, попробую переделать т.к. нужно чтобы находил Все цифры в файле а не одно и записывал их в другой файл. Вечером попробую переделать, результат опишу  :D. $Number=$Number+0 //Без этой записи кликер принимает переменную за строку - не знал, спасибо за подсказку. Получается если с переменной производится арифметическое  действие то кликер воспринимает его как число, а если нет то как текст? Странно.