Автор Тема: Проверка наличия файла, или каталога по маске  (Прочитано 288 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Hito

  • Герой форума
  • *****
  • Сообщений: 1065
    • Просмотр профиля
Предлагаю ввести функцию проверки наличия файла или каталога по маске, на подобии - GetFileList. Только GetFileList помещает в массив список всех найденных файлов, а я говорю о функции, которая будет искать 1 файл по маске.
Объясню - зачем это может быть нужно...
К примеру, мне нужно получить расстояние до моба и вместо того, чтобы мутить долгий процесс по вычислению цифр, из которых состоит число (их позицию и их значение), я просто заранее сохранил бы в папку "расстояние" скрины с разным расстоянием, а их название состояло бы из их контрольной суммы пикселей и значения расстояния. Пример - "130_847690405.bmp". А в скрипте написал бы подобный код:
Код: Clickermann
  1. IF($target > 0)
  2.   GETSCREEN($x1,$y1, $x2,$y2)
  3.   $count = PXLCRC ($x1,$y1, $x2,$y2)
  4.   IF(FExists_mask(STRCONCAT("screens\расстояние\*_",$count,".bmp")))
  5.      $rasstoyanie = STRCUT ($_return1, 1, STRPOS($_return1, "_")-1)
  6.   else
  7.      IF(FExists(STRCONCAT("screens\расстояние\цех\_",$count,".bmp")))
  8.      else
  9.         SCREENSHOTFIX($x1,$y1, $x2,$y2, STRCONCAT("screens\расстояние\цех\_",$count,".bmp")) // Здесь сохраняем заготовку, которую я потом просмотрю, допишу расстояние в ее названии и перекину в папку - "расстояние".
  10.      END_IF
  11.   END_IF
  12. END_IF
Подобный способ распознания того же расстояния был бы очень быстрым в сравнении со способами, в которых используются большие массивы...
« Последнее редактирование: Апрель 26, 2020, 12:40:25 pm от Hito »
Я не ду... Потому и не бу...

Космич

  • Активный участник
  • ***
  • Сообщений: 247
    • Просмотр профиля
Re: Проверка наличия файла, или каталога по маске
« Ответ #1 : Апрель 26, 2020, 02:29:10 pm »
зачем искать 1 файл по маске? для проверки наличия файла/каталога есть функция FEXISTS
«Иногда ты ваяешь до тех пор, пока до тебя не дойдёт, что именно ты делаешь.»

Hito

  • Герой форума
  • *****
  • Сообщений: 1065
    • Просмотр профиля
Re: Проверка наличия файла, или каталога по маске
« Ответ #2 : Апрель 26, 2020, 05:58:20 pm »
зачем искать 1 файл по маске? для проверки наличия файла/каталога есть функция FEXISTS
Ты хорошо понял то, что я описал...?
Я не ду... Потому и не бу...

Космич

  • Активный участник
  • ***
  • Сообщений: 247
    • Просмотр профиля
Re: Проверка наличия файла, или каталога по маске
« Ответ #3 : Апрель 26, 2020, 08:38:24 pm »
Ну я понял. А ты проверял варианты с INIREAD/GETVAR? тебе действительно не хватает скорости?
«Иногда ты ваяешь до тех пор, пока до тебя не дойдёт, что именно ты делаешь.»

Hito

  • Герой форума
  • *****
  • Сообщений: 1065
    • Просмотр профиля
Re: Проверка наличия файла, или каталога по маске
« Ответ #4 : Апрель 26, 2020, 09:27:46 pm »
Ну я понял. А ты проверял варианты с INIREAD/GETVAR? тебе действительно не хватает скорости?
Я понимаю, что данные можно занести в ини. К примеру в ини на кеше пикселей будет записано - сколько это метров. Но ты представляешь себе, какой это объем работы - занести все эти данные в ини...? А так скрипт сам тебе скрин подготовил, если не распознал картинку, а ты посмотрел этот скрин, метры в его названии прописал и в рабочую папку перебросил.
« Последнее редактирование: Апрель 26, 2020, 09:31:10 pm от Hito »
Я не ду... Потому и не бу...

ya12

  • Активный участник
  • ***
  • Сообщений: 129
    • Просмотр профиля
1.А нельзя выдернуть координаты перса и моба из памяти программы и посчитать длину вектора?

2. Код получает данные перса с расшаренного диска ноутбука (здоровье, мана, координаты, id и время). В каждом каталоге находится 1 подкаталог имя которого является цифровым значением.
Если каталогов-параметров становится слишком много и файловая система начинает подтормаживать, их можно раскидать по подкаталогам-разделителям.
Код: Clickermann
  1. for($ia3=1, $ia3<= $_Pulse)
  2.               UNDEFINE($arr3)
  3.               SWITCH($ia3)
  4.                  CASE(1)
  5.                     getdirlist($arr3, "b:\HPm\*")
  6.                     $_HPmax[0]=$arr3[0]
  7.                  CASE(2)
  8.                     getdirlist($arr3, "b:\HPt\*")
  9.                     $_HPtek[0]=$arr3[0]
  10.                  CASE(3)
  11.                     getdirlist($arr3, "b:\MPm\*")
  12.                     $_MPmax[0]=$arr3[0]
  13.                  CASE(4)
  14.                     getdirlist($arr3, "b:\MPt\*")
  15.                     $_MPtek[0]=$arr3[0]
  16.                  CASE(5)
  17.                     getdirlist($arr3, "b:\x\*")
  18.                     $_Xper[0]=$arr3[0]
  19.                  CASE(6)
  20.                     getdirlist($arr3, "b:\y\*")
  21.                     $_Yper[0]=$arr3[0]
  22.                  CASE(7)
  23.                     getdirlist($arr3, "b:\fx\*")
  24.                     $f_Xper[0]=$arr3[0]
  25.                  CASE(8)
  26.                     getdirlist($arr3, "b:\fy\*")
  27.                     $f_Yper[0]=$arr3[0]
  28.                  CASE(9)
  29.                     getdirlist($arr3, "b:\fz\*")
  30.                     $f_Zper[0]=$arr3[0]
  31.                  CASE(10)
  32.                     $_TimeNout[1]=$_TimeNout[0]
  33.                     getdirlist($arr3, "b:\Time\*")
  34.                     $_TimeNout[0]=$arr3[0]
  35.                     if($_TimeNout[0]>$_TimeNout[1]+15000)
  36.                        BEEP(750,1000)
  37.                        BEEP(650,1000)
  38.                        print("Нет сигнала с ноута")
  39.                     end_if
  40.                  CASE(11)
  41.                     getdirlist($arr3, "b:\ID\*")
  42.                     $_ID[0]=$arr3[0]
  43.                     $_Pulse=10
  44.               END_SWITCH
  45.            end_cyc
  46.  
« Последнее редактирование: Май 14, 2020, 02:22:45 pm от ya12 »

Hito

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

2. Код получает данные перса с расшаренного диска ноутбука (здоровье, мана, координаты, id и время). В каждом каталоге находится 1 подкаталог имя которого является цифровым значением.
Если каталогов-параметров становится слишком много и файловая система начинает подтормаживать, их можно раскидать по подкаталогам-разделителям.
Код: Clickermann
  1. for($ia3=1, $ia3<= $_Pulse)
  2.               UNDEFINE($arr3)
  3.               SWITCH($ia3)
  4.                  CASE(1)
  5.                     getdirlist($arr3, "b:\HPm\*")
  6.                     $_HPmax[0]=$arr3[0]
  7.                  CASE(2)
  8.                     getdirlist($arr3, "b:\HPt\*")
  9.                     $_HPtek[0]=$arr3[0]
  10.                  CASE(3)
  11.                     getdirlist($arr3, "b:\MPm\*")
  12.                     $_MPmax[0]=$arr3[0]
  13.                  CASE(4)
  14.                     getdirlist($arr3, "b:\MPt\*")
  15.                     $_MPtek[0]=$arr3[0]
  16.                  CASE(5)
  17.                     getdirlist($arr3, "b:\x\*")
  18.                     $_Xper[0]=$arr3[0]
  19.                  CASE(6)
  20.                     getdirlist($arr3, "b:\y\*")
  21.                     $_Yper[0]=$arr3[0]
  22.                  CASE(7)
  23.                     getdirlist($arr3, "b:\fx\*")
  24.                     $f_Xper[0]=$arr3[0]
  25.                  CASE(8)
  26.                     getdirlist($arr3, "b:\fy\*")
  27.                     $f_Yper[0]=$arr3[0]
  28.                  CASE(9)
  29.                     getdirlist($arr3, "b:\fz\*")
  30.                     $f_Zper[0]=$arr3[0]
  31.                  CASE(10)
  32.                     $_TimeNout[1]=$_TimeNout[0]
  33.                     getdirlist($arr3, "b:\Time\*")
  34.                     $_TimeNout[0]=$arr3[0]
  35.                     if($_TimeNout[0]>$_TimeNout[1]+15000)
  36.                        BEEP(750,1000)
  37.                        BEEP(650,1000)
  38.                        print("Нет сигнала с ноута")
  39.                     end_if
  40.                  CASE(11)
  41.                     getdirlist($arr3, "b:\ID\*")
  42.                     $_ID[0]=$arr3[0]
  43.                     $_Pulse=10
  44.               END_SWITCH
  45.            end_cyc
  46.  

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

ya12

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

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

Hito

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