Author Topic: Проверка наличия файла, или каталога по маске  (Read 7000 times)

0 Members and 1 Guest are viewing this topic.

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Предлагаю ввести функцию проверки наличия файла или каталога по маске, на подобии - GetFileList. Только GetFileList помещает в массив список всех найденных файлов, а я говорю о функции, которая будет искать 1 файл по маске.
Объясню - зачем это может быть нужно...
К примеру, мне нужно получить расстояние до моба и вместо того, чтобы мутить долгий процесс по вычислению цифр, из которых состоит число (их позицию и их значение), я просто заранее сохранил бы в папку "расстояние" скрины с разным расстоянием, а их название состояло бы из их контрольной суммы пикселей и значения расстояния. Пример - "130_847690405.bmp". А в скрипте написал бы подобный код:
Code: (clickermann) [Select]
IF($target > 0)
   GETSCREEN($x1,$y1, $x2,$y2)
   $count = PXLCRC ($x1,$y1, $x2,$y2)
   IF(FExists_mask(STRCONCAT("screens\расстояние\*_",$count,".bmp")))
      $rasstoyanie = STRCUT ($_return1, 1, STRPOS($_return1, "_")-1)
   else
      IF(FExists(STRCONCAT("screens\расстояние\цех\_",$count,".bmp")))
      else
         SCREENSHOTFIX($x1,$y1, $x2,$y2, STRCONCAT("screens\расстояние\цех\_",$count,".bmp")) // Здесь сохраняем заготовку, которую я потом просмотрю, допишу расстояние в ее названии и перекину в папку - "расстояние".
      END_IF
   END_IF
END_IF
Подобный способ распознания того же расстояния был бы очень быстрым в сравнении со способами, в которых используются большие массивы...
« Last Edit: April 26, 2020, 12:40:25 PM by Hito »
Я не ду... Потому и не бу...

Космич

  • Активный участник
  • ***
  • Posts: 265
    • View Profile
зачем искать 1 файл по маске? для проверки наличия файла/каталога есть функция FEXISTS
«Иногда ты ваяешь до тех пор, пока до тебя не дойдёт, что именно ты делаешь.»

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
зачем искать 1 файл по маске? для проверки наличия файла/каталога есть функция FEXISTS
Ты хорошо понял то, что я описал...?
Я не ду... Потому и не бу...

Космич

  • Активный участник
  • ***
  • Posts: 265
    • View Profile
Ну я понял. А ты проверял варианты с INIREAD/GETVAR? тебе действительно не хватает скорости?
«Иногда ты ваяешь до тех пор, пока до тебя не дойдёт, что именно ты делаешь.»

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Ну я понял. А ты проверял варианты с INIREAD/GETVAR? тебе действительно не хватает скорости?
Я понимаю, что данные можно занести в ини. К примеру в ини на кеше пикселей будет записано - сколько это метров. Но ты представляешь себе, какой это объем работы - занести все эти данные в ини...? А так скрипт сам тебе скрин подготовил, если не распознал картинку, а ты посмотрел этот скрин, метры в его названии прописал и в рабочую папку перебросил.
« Last Edit: April 26, 2020, 09:31:10 PM by Hito »
Я не ду... Потому и не бу...

ya12

  • Активный участник
  • ***
  • Posts: 165
    • View Profile
1.А нельзя выдернуть координаты перса и моба из памяти программы и посчитать длину вектора?

2. Код получает данные перса с расшаренного диска ноутбука (здоровье, мана, координаты, id и время). В каждом каталоге находится 1 подкаталог имя которого является цифровым значением.
Если каталогов-параметров становится слишком много и файловая система начинает подтормаживать, их можно раскидать по подкаталогам-разделителям.
Code: (clickermann) [Select]
for($ia3=1, $ia3<= $_Pulse)
               UNDEFINE($arr3)
               SWITCH($ia3)
                  CASE(1)
                     getdirlist($arr3, "b:\HPm\*")
                     $_HPmax[0]=$arr3[0]
                  CASE(2)
                     getdirlist($arr3, "b:\HPt\*")
                     $_HPtek[0]=$arr3[0]
                  CASE(3)
                     getdirlist($arr3, "b:\MPm\*")
                     $_MPmax[0]=$arr3[0]
                  CASE(4)
                     getdirlist($arr3, "b:\MPt\*")
                     $_MPtek[0]=$arr3[0]
                  CASE(5)
                     getdirlist($arr3, "b:\x\*")
                     $_Xper[0]=$arr3[0]
                  CASE(6)
                     getdirlist($arr3, "b:\y\*")
                     $_Yper[0]=$arr3[0]
                  CASE(7)
                     getdirlist($arr3, "b:\fx\*")
                     $f_Xper[0]=$arr3[0]
                  CASE(8)
                     getdirlist($arr3, "b:\fy\*")
                     $f_Yper[0]=$arr3[0]
                  CASE(9)
                     getdirlist($arr3, "b:\fz\*")
                     $f_Zper[0]=$arr3[0]
                  CASE(10)
                     $_TimeNout[1]=$_TimeNout[0]
                     getdirlist($arr3, "b:\Time\*")
                     $_TimeNout[0]=$arr3[0]
                     if($_TimeNout[0]>$_TimeNout[1]+15000)
                        BEEP(750,1000)
                        BEEP(650,1000)
                        print("Нет сигнала с ноута")
                     end_if
                  CASE(11)
                     getdirlist($arr3, "b:\ID\*")
                     $_ID[0]=$arr3[0]
                     $_Pulse=10
               END_SWITCH
            end_cyc
« Last Edit: May 14, 2020, 02:22:45 PM by ya12 »

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
1.А нельзя выдернуть координаты перса и моба из памяти программы и посчитать длину вектора?

2. Код получает данные перса с расшаренного диска ноутбука (здоровье, мана, координаты, id и время). В каждом каталоге находится 1 подкаталог имя которого является цифровым значением.
Если каталогов-параметров становится слишком много и файловая система начинает подтормаживать, их можно раскидать по подкаталогам-разделителям.
Code: (clickermann) [Select]
for($ia3=1, $ia3<= $_Pulse)
               UNDEFINE($arr3)
               SWITCH($ia3)
                  CASE(1)
                     getdirlist($arr3, "b:\HPm\*")
                     $_HPmax[0]=$arr3[0]
                  CASE(2)
                     getdirlist($arr3, "b:\HPt\*")
                     $_HPtek[0]=$arr3[0]
                  CASE(3)
                     getdirlist($arr3, "b:\MPm\*")
                     $_MPmax[0]=$arr3[0]
                  CASE(4)
                     getdirlist($arr3, "b:\MPt\*")
                     $_MPtek[0]=$arr3[0]
                  CASE(5)
                     getdirlist($arr3, "b:\x\*")
                     $_Xper[0]=$arr3[0]
                  CASE(6)
                     getdirlist($arr3, "b:\y\*")
                     $_Yper[0]=$arr3[0]
                  CASE(7)
                     getdirlist($arr3, "b:\fx\*")
                     $f_Xper[0]=$arr3[0]
                  CASE(8)
                     getdirlist($arr3, "b:\fy\*")
                     $f_Yper[0]=$arr3[0]
                  CASE(9)
                     getdirlist($arr3, "b:\fz\*")
                     $f_Zper[0]=$arr3[0]
                  CASE(10)
                     $_TimeNout[1]=$_TimeNout[0]
                     getdirlist($arr3, "b:\Time\*")
                     $_TimeNout[0]=$arr3[0]
                     if($_TimeNout[0]>$_TimeNout[1]+15000)
                        BEEP(750,1000)
                        BEEP(650,1000)
                        print("Нет сигнала с ноута")
                     end_if
                  CASE(11)
                     getdirlist($arr3, "b:\ID\*")
                     $_ID[0]=$arr3[0]
                     $_Pulse=10
               END_SWITCH
            end_cyc

Я это, как пример привел. Примеров может быть куча. Под каждый пример искать выход из положения, вместо того, чтобы найти просто файл по маске...? Согласен - можно. Но я просто предложил ввести такую функцию...
Я не ду... Потому и не бу...

ya12

  • Активный участник
  • ***
  • Posts: 165
    • View Profile
Это многогранный костыль. С его помощью можно через расшаренную папку обмениваться данными по локальной сети, получать на виртуальный диск результаты расчетов из dll. Можно запускать dll в нескольких потоках, без опасения, что возвращаемый в глобальную переменную результат будет получен не тем потоком.

ps Мы не можем ждать милостей от природы. Взять их у неё – наша задача
« Last Edit: May 15, 2020, 09:05:15 AM by ya12 »

Hito

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