Author Topic: Ни у кого нет вариантов - как работать с текстовым файлом?  (Read 8678 times)

0 Members and 1 Guest are viewing this topic.

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Вобщем я хз - как так получилось, но сейчас кликер может читать этот файл лога, но стоит ему, либо добавить какую-то строку в этот файл, либо удалить из него какую-то строку и игра начинает записывать в этот файл кракозябры. Я так понимаю, что для удаления строк, или для записи их в файл, кликеру нужно открыть его и потом сохранить. И сохроняет он его уже в своей кодировке. Что с этим делать - я хз...
Я не ду... Потому и не бу...

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
В общем вот два файла лога. Один файл был создан клиентом игры и в нем нормально видно лог, пока Clickermann не стал работать с этим файлом.
https://disk.yandex.ru/d/VpDmDudb16NzrQ
А вот файл, созданный Clickermann-ом, и подсунутый вместо файла, созданного игрой. И не важно - создан ли этот файл Clickermann-ом, или Clickermann просто удалит хотя бы одну строку из файла, созданного игровым клиентом - эффект будет тот же.
https://disk.yandex.ru/d/j7_lomBbLQn_9g
В обоих файлах идентичные логи использования одного и того же скила.
Я не ду... Потому и не бу...

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Ты скажи, что ты хочешь сделать. Если одновременно писать в файл двумя программами, то не выйдет.
Что тебе мешает создать второй файл и копировать туда строки из первого и дописывать кликером свои.


Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Ты скажи, что ты хочешь сделать.
Нужно работать со скилами. Вся беда в том, что восстановленный скилл не сложно вычислить на экране, но вычислить то, что скилл использован до конца, графически вычислить очень сложно. И потому я хочу, чтобы сигнал для начала использования скила Clickermann получал с экрана, а сигнал о том, что скилл использован, брал из чата, путем перебора строк чата и поиска в них строки с названием нужного скила. Если такая строка имеется, то скилл использован. Но каждую такую строку нужно подчищать, чтобы при следующем использовании скилла этого, Clickermann не "обманулся" прошлой строкой. Я не знаю - понятно ли я объяснил...
Я не ду... Потому и не бу...

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Если файл лога кликер удалит, программа пишущая лог создаст его заново и продолжит в него писать?


Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Если файл лога кликер удалит, программа пишущая лог создаст его заново и продолжит в него писать?
Ну, как бы на этом грубом решении я вчера и остановился пока...
Я не ду... Потому и не бу...

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Ну как бы вот. Сорри что только сейчас пишу, никак не было времени и пк.
Только по итогу выходит одна большая строка со всем текстом из файла. Если нужно разделить, можно и разделить. И потом в обратном порядке можно опять в файл записать.
Code: (clickermann) [Select]
FREADDATA ("Chat-game.log", $arr)
FOR($a=0,$a<ARRSIZE($arr))
   if($arr[$a]>191)
      $arr[$a] = $arr[$a]+848
   end_if
   
   $str = STRCONCAT($str,CHAR($arr[$a]))
   
END_CYC
LOGWRITE ($str)
HALT

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
А вот и с разделением на строки. Массив $all_str, в каждой ячейку по строке.
Code: (clickermann) [Select]
FREADDATA ("Chat-game.log", $arr)
FOR($a=0,$a<ARRSIZE($arr))
   if($arr[$a]>191)  //в win-1251 все буквы и цифры занимают по одному байту. поэтому вся таблица это 256 символов, и все, больше не влезет. в юникоде же используют два байта на символ, а это ооочень дофига 65535 вариантов вместо 256. я глянул для интереса таблицу, долго листал, а там она как оказалось еще не полная, то есть можно еще добавлять всякие символы там всякие языки новые.
   //так вот, в вин-1251 русские символы начинаются с 192 символа, а в юникоде с 1040
      $arr[$a] = $arr[$a]+848
   end_if
   IF($arr[$a] = 13) //смотрим когда у нас символ переноса строки
      $a = $a + 1   //прыгаем еще через один символ там есть такой
      ARRPUSH ($all_str, $str) //добавляем созданную ранее строку в массив
      undefine($str)  //и избавляемся, на время
   ELSE
      $str = STRCONCAT($str,CHAR($arr[$a]))  //тут без перерыва строчим в  $str
   END_IF   
END_CYC

FOR($a=0,$a<ARRSIZE($all_str)) //смотрим результат
print($all_str[$a])
END_CYC


HALT