Author Topic: поиск и частичная замена/дополнение в текстовом файле  (Read 4846 times)

0 Members and 1 Guest are viewing this topic.

FJ

  • Освоившийся
  • **
  • Posts: 59
    • View Profile
Доброго дня!
Подскажите пожалуйста, как мне осуществить такую штуку. На сайте выводится текст и периодически меняется. допустим может поменяться 3-7 раз за день.
Мне нужно чтобы кликер мне показал:
"дата появления(когда был первый раз замечен)" , "ТАВ" , "дата замены(когда последний раз был замечен)" , "ТАВ" , "сам текст(может быть несколько слов, и так же содержать ТАВуляцию)"
Если текст не находит, создает новую строчку с датой появления и замены, и обновляет ее.
Хотя бы натолкните на мысль, как мне это можно сделать, ну или пример, было бы шикарно! :)
Спасибо заранее! :)

security

  • Освоившийся
  • **
  • Posts: 68
    • View Profile
А не проще такие задачи поручить php/pyhton скриптам которые имеют безграничные возможности по парсингу данных и запускать его по cron-у?
Покажи адрес сайта, хотя бы в лс, чтобы я примерно знал какие данные и как меняются, может быть и скриптом кликера помогу, и php

FJ

  • Освоившийся
  • **
  • Posts: 59
    • View Profile
Адресс сайта - это онлайн игра. timezero.ru, там аукцион.
Я в данный момент все делаю, выдергиваю текст и дату ставлю, но лог получается слишком большим, представьте, на протяжении 2 дней каждые 5 минут пишет в файл одно и то же :)

В итоге хочется узнать наиболее точное время, когда меняется значение. например(во вложенном файле)
Может быть другой способ для этого придумать...
PS: еще я не правильно сказал, цена меняется 1 раз в сутки в одно и то же время.
Но для разного товара цена меняется в разное время
« Last Edit: November 25, 2015, 09:57:02 AM by FJ »

security

  • Освоившийся
  • **
  • Posts: 68
    • View Profile
Я сколько не пытался найти, так и не нашел именно саму эту страницу с аукционом, только описание его. Мне бы найти именно страничку как во вложении, я бы тогда сделал парсер для тебя простой без привлечения кликера, так как у меня нету особых идей как его тут можно применить. или свяжись в лс, скажи джаббер, скайп или icq для связи, чтобы непосредственно обговорить - уверен там 5 минут работы

security

  • Освоившийся
  • **
  • Posts: 68
    • View Profile
Зарегистрировался, игра во флеше, я так понял аукцион этот тоже скорее всего внутри игры и рендерит эти таблицы, так что к сожалению я ничем тут не смогу помочь, прошу прощения

FJ

  • Освоившийся
  • **
  • Posts: 59
    • View Profile
Вот для наглядности пример в экселе закинул, что должно получиться (изначально кликер мне должен закинуть это все с ТХТ файл)
Если кликер не находит в файле наименование и характеристику, то создает новую строчку и добавляет туда Начало   конец   Наименование   Характеристика.
А если наименование и характеристика находятся, то просто обновлялась дата во 2 колонке(конец)
Вот такая задумка.
Дальше планирую все это в экселе автоматизировать
« Last Edit: November 26, 2015, 01:32:17 PM by FJ »

FJ

  • Освоившийся
  • **
  • Posts: 59
    • View Profile
Вот что получилось... Должен искать в файле текст из INPUTBOX, и если находит, обновлять 2ю дату, если не находит - то дописывать с низу.
С низу дописывает, а вот с обновлением времени... Помогите пожалуйста, что я неправильно делаю? Может сменить подход?

Code: [Select]
SUB(LOG) // текущая дата и время
   $th = $_time_h
   $tm = $_time_m
   $ts = $_time_s
   $dd = $_date_d
   $dm = $_date_m
   $dy = $_date_y
   IF(STRLEN($th)<2)
      $th = STRCONCAT ("0", $th)
   END_IF
   IF(STRLEN($tm)<2)
      $tm = STRCONCAT ("0", $tm)
   END_IF
   IF(STRLEN($ts)<2)
      $ts = STRCONCAT ("0", $ts)
   END_IF
   IF(STRLEN($dd)<2)
      $dd = STRCONCAT ("0", $dd)
   END_IF
   IF(STRLEN($dm)<2)
      $dm = STRCONCAT ("0", $dm)
   END_IF
   IF(STRLEN($dy)<2)
      $dy = STRCONCAT ("0", $dy)
   END_IF
   $date = STRCONCAT ($dd,".",$dm,".",$dy," ",$th,":",$tm,":",$ts)
END_SUB

LOG ()

$text  = INPUTBOX("message", "asd1", 10)
$str_num_max = TFCOUNT ( "group_base.txt" ) //находим сколько строк в файле
$str_num_max = $str_num_max +1
print ($str_num_max)
FOR ( $str_num = 1 , $str_num < $str_num_max ) // перебираем все строки в файле
   
   $text_file = TFREAD ( "group_base.txt" , $str_num ) // записываем строку в переменную 
   IF ( $text  = STRFILTER ( $text_file , $text , 1 ) ) //сверяем строки
     
      //если нашли, то нужно заменить дату!
      print ("$text_file 1",$text_file)
      $text_file = STRFILTER ( $text_file , " \/ " ,  0 ) // оставляем $t 1 встречи
      print ("$text_file 2",$text_file)
      $text_file = STRCONCAT ( $text_file , " \/ " , $date , " /\ " , $text ) // дописываем остальное к 1 дате
      print ("$text_file 3",$text_file)
      //заменяем текст в файле
     
      TFDELETE ("group_base.txt" , $str_num) // удаляем старую инфу
     
     
      TFWRITE ( "group_base.txt" , $text_file , $str_num ) / записываем новую инфу
     
      $str_num = $str_num_max //выходим из цикла
      halt
   END_IF
   
END_CYC

//Записываем в конец файла новую инфу(если запись не найдена):

TFWRITE ( "group_base.txt" , STRCONCAT ( $date , " \/ " , $date , " /\ " , $text ))

halt
« Last Edit: November 26, 2015, 08:02:41 PM by FJ »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Может так?

Code: (clickermann) [Select]
SUB(LOG) // текущая дата и время
   $th = $_time_h
   $tm = $_time_m
   $ts = $_time_s
   $dd = $_date_d
   $dm = $_date_m
   $dy = $_date_y
   IF(STRLEN($th)<2)
      $th = STRCONCAT ("0", $th)
   END_IF
   IF(STRLEN($tm)<2)
      $tm = STRCONCAT ("0", $tm)
   END_IF
   IF(STRLEN($ts)<2)
      $ts = STRCONCAT ("0", $ts)
   END_IF
   IF(STRLEN($dd)<2)
      $dd = STRCONCAT ("0", $dd)
   END_IF
   IF(STRLEN($dm)<2)
      $dm = STRCONCAT ("0", $dm)
   END_IF
   IF(STRLEN($dy)<2)
      $dy = STRCONCAT ("0", $dy)
   END_IF
   $date = STRCONCAT ($dd,".",$dm,".",$dy," ",$th,":",$tm,":",$ts)
END_SUB

LOG ()

$text  = INPUTBOX("message", "asd1", 10)
$str_num_max = TFCOUNT ( "group_base.txt" ) //находим сколько строк в файле
print ($str_num_max)
FOR ( $str_num = 1, $str_num < $str_num_max+1) // перебираем все строки в файле
   
   $text_file = TFREAD ( "group_base.txt" , $str_num ) // записываем строку в переменную

   IF ( STRPOS($text_file, $text) > 0 ) //сверяем строки
     
      //если нашли, то нужно заменить дату!
      $text_file = STRCONCAT ( $date , " \/ " , $date , " /\ " , $text ) // дописываем остальное к 1 дате
      //заменяем текст в файле
     
      TFDELETE ("group_base.txt" , $str_num) // удаляем старую инфу     
      TFWRITE ( "group_base.txt" , $text_file , $str_num ) // записываем новую инфу
     
      $str_num = $str_num_max+1 //выходим из цикла
      halt
   END_IF
   
END_CYC

//Записываем в конец файла новую инфу(если запись не найдена):

TFWRITE ( "group_base.txt" , STRCONCAT ( $date , " \/ " , $date , " /\ " , $text ))

halt

FJ

  • Освоившийся
  • **
  • Posts: 59
    • View Profile
Нет, время же старое не остается. а мне именно это и нужно!
Допустим, после 1 раза, сторочка выглядит так
27.11.2015 19:05:35   \/   27.11.2015 19:05:35   /\   asd1
А после 2 раза будет выглядеть так.
27.11.2015 19:05:35   \/   27.11.2015 19:06:11   /\   asd1
Как видно, старое время осталось, а новое добавилось.
« Last Edit: November 27, 2015, 04:11:40 PM by FJ »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Вот теперь работает так как ты хочешь, берется вторая отметка времени и вставляется за место первой а вторая обновляется.
Code: (clickermann) [Select]
SUB(LOG) // текущая дата и время
   $th = $_time_h
   $tm = $_time_m
   $ts = $_time_s
   $dd = $_date_d
   $dm = $_date_m
   $dy = $_date_y
   IF(STRLEN($th)<2)
      $th = STRCONCAT ("0", $th)
   END_IF
   IF(STRLEN($tm)<2)
      $tm = STRCONCAT ("0", $tm)
   END_IF
   IF(STRLEN($ts)<2)
      $ts = STRCONCAT ("0", $ts)
   END_IF
   IF(STRLEN($dd)<2)
      $dd = STRCONCAT ("0", $dd)
   END_IF
   IF(STRLEN($dm)<2)
      $dm = STRCONCAT ("0", $dm)
   END_IF
   IF(STRLEN($dy)<2)
      $dy = STRCONCAT ("0", $dy)
   END_IF
   $date = STRCONCAT ($dd,".",$dm,".",$dy," ",$th,":",$tm,":",$ts)
END_SUB

LOG ()

$text  = INPUTBOX("message", "asd1", 10)
$str_num_max = TFCOUNT ( "group_base.txt" ) //находим сколько строк в файле
print ($str_num_max)
FOR ( $str_num = 1, $str_num < $str_num_max+1) // перебираем все строки в файле
   
   $text_file = TFREAD ( "group_base.txt" , $str_num ) // записываем строку в переменную
   
   IF ( STRPOS($text_file, $text) > 0 ) //сверяем строки
     
      //если нашли, то нужно заменить дату!
      $dats = STRCUT2 ($text_file, STRPOS ($text_file, " \/ ")+4, STRPOS($text_file, " /\ ")-1)
      $text_file = STRCONCAT( $dats, " \/ ", $date, " /\ ", $text) // дописываем остальное к 1 дате
      //заменяем текст в файле
     
      TFDELETE ("group_base.txt" , $str_num) // удаляем старую инфу
      TFWRITE ( "group_base.txt" , $text_file , $str_num ) // записываем новую инфу
     
      $str_num = $str_num_max+1 //выходим из цикла
      halt
   END_IF
   
END_CYC

//Записываем в конец файла новую инфу(если запись не найдена):

TFWRITE ( "group_base.txt" , STRCONCAT ( $date , " \/ " , $date , " /\ " , $text ))

halt

FJ

  • Освоившийся
  • **
  • Posts: 59
    • View Profile
Чет пока не понял, как работает, разбираюсь.
Нужно чтобы 1 дата навсегда оставалась, а 2я менялась только. Можете поменять? а так да.. супер! То, что нужно! :)
Спасибо! :)

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Code: (clickermann) [Select]
SUB(LOG) // текущая дата и время
   $th = $_time_h
   $tm = $_time_m
   $ts = $_time_s
   $dd = $_date_d
   $dm = $_date_m
   $dy = $_date_y
   IF(STRLEN($th)<2)
      $th = STRCONCAT ("0", $th)
   END_IF
   IF(STRLEN($tm)<2)
      $tm = STRCONCAT ("0", $tm)
   END_IF
   IF(STRLEN($ts)<2)
      $ts = STRCONCAT ("0", $ts)
   END_IF
   IF(STRLEN($dd)<2)
      $dd = STRCONCAT ("0", $dd)
   END_IF
   IF(STRLEN($dm)<2)
      $dm = STRCONCAT ("0", $dm)
   END_IF
   IF(STRLEN($dy)<2)
      $dy = STRCONCAT ("0", $dy)
   END_IF
   $date = STRCONCAT ($dd,".",$dm,".",$dy," ",$th,":",$tm,":",$ts)
END_SUB

LOG ()

$text  = INPUTBOX("message", "asd1", 10)
$str_num_max = TFCOUNT ( "group_base.txt" ) //находим сколько строк в файле
print ($str_num_max)
FOR ( $str_num = 1, $str_num < $str_num_max+1) // перебираем все строки в файле
   
   $text_file = TFREAD ( "group_base.txt" , $str_num ) // записываем строку в переменную
   
   IF ( STRPOS($text_file, $text) > 0 ) //сверяем строки
     
      //если нашли, то нужно заменить дату!
      $dats = STRCUT2 ($text_file, 1, STRPOS($text_file, " \/ ")-1)
      $text_file = STRCONCAT( $dats, " \/ ", $date, " /\ ", $text) // дописываем остальное к 1 дате
      //заменяем текст в файле
     
      TFDELETE ("group_base.txt" , $str_num) // удаляем старую инфу
      TFWRITE ( "group_base.txt" , $text_file , $str_num ) // записываем новую инфу
     
      $str_num = $str_num_max+1 //выходим из цикла
      halt
   END_IF
   
END_CYC

//Записываем в конец файла новую инфу(если запись не найдена):

TFWRITE ( "group_base.txt" , STRCONCAT ( $date , " \/ " , $date , " /\ " , $text ))

halt

FJ

  • Освоившийся
  • **
  • Posts: 59
    • View Profile
Спасибо!
То что нужно! :)