Author Topic: Список файлов, находящихся в указанной папке  (Read 6178 times)

0 Members and 1 Guest are viewing this topic.

Qwerry

  • Активный участник
  • ***
  • Posts: 117
    • View Profile
Доброго времени суток.
Имеется папка, в которой находится несколько картинок (их количество может меняться). Нужно занести в массив все названия файлов из этой папки.
Подскажите, пожалуйста, как можно реализовать?
(Конечная цель - поиск  по очереди этих картинок. Понимаю, что можно назвать их в духе 1, 2, 3, но не хотелось бы задавать количество картинок вручную)

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Требуется последняя бетта 4.13 Там функция GETFILELIST заработала как надо.
http://crapware.aidf.org/forum/index.php?topic=356.msg23510#msg23510

Code: (clickermann) [Select]
$path = "Image\" // Путь до папки с картинкой

GETFILELIST($a_image, STRCONCAT($path,"*.bmp")) // Получаем список файлов в массив
GETSCREEN
FOR($i=0,$i<ARRSIZE($a_image))  // Перебор списка 
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, STRCONCAT($path,$a_image[$i]), -1, 100)
      LCLICK($_return1, $_return2)
      WAITMS(100)
   END_IF   
END_CYC

Qwerry

  • Активный участник
  • ***
  • Posts: 117
    • View Profile

Классно) Спасибо, буду осваивать новую версию :)

Mitriy163

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Требуется последняя бетта 4.13 Там функция GETFILELIST заработала как надо.
http://crapware.aidf.org/forum/index.php?topic=356.msg23510#msg23510

Code: (clickermann) [Select]
$path = "Image\" // Путь до папки с картинкой

GETFILELIST($a_image, STRCONCAT($path,"name[b]*[/b].bmp")) // Получаем список файлов в массив
GETSCREEN
FOR($i=0,$i<ARRSIZE($a_image))  // Перебор списка 
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, STRCONCAT($path,$a_image[$i]), -1, 100)
      LCLICK($_return1, $_return2)
      WAITMS(100)
   END_IF   
END_CYC

вопрос следующий, как выполнить файл из списка при помощи radiobox("Выберете пункт", $arr[0]):
у меня есть проекты по Работе, Домашние, Игры, Прочие... работа_name.cms, картинки_name.cms...
Code: (clickermann) [Select]
GETFILELIST($arr, "Script\name[b]*[/b].cms")) // Получаем список файлов в массив
for($i=0, $i< arrsize($arr))
   print($arr[$i])
end_cyc
$res = radiobox("Выберете пункт", [b]$arr[/b]) - как вместо $arr вставить переменную (количество) найденных файлов
...
а после выбора реализовать запуск нужного скрипта?

другими словами хочу создать меню проектов.
Я только учусь!

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Очевидно так, а в чем смысл.
Code: (clickermann) [Select]
GETFILELIST($arr, "Script\name[b]*[/b].cms") // Получаем список файлов в массив
for($i=0, $i<arrsize($arr))
   print($arr[$i])
end_cyc

$res = RADIOBOX("Выберете пункт", arrsize($arr))

Mitriy163

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Очевидно так, а в чем смысл.
Code: (clickermann) [Select]
$res = RADIOBOX("Выберете пункт", arrsize($arr))
так он выводит количество найденных файлов
я пока остановился на таком решении:
Code: (clickermann) [Select]
TFCLEAR("file.cms", 0)
...
getfilelist($arr, $list) //$list предменю с путями, тут не указан

for($i=0, $i< arrsize($arr))
   print($arr[$i])
end_cyc

for($i=arrsize($arr), $i< 21)
   ARRPUSH($arr, "пусто")
end_cyc

$res = radiobox("Выберете пункт", $arr[0], $arr[1], $arr[2], $arr[3], $arr[4], $arr[5], $arr[6], $arr[7], $arr[8], $arr[9], $arr[10], $arr[11], $arr[12], $arr[13], $arr[14], $arr[15], $arr[16], $arr[17], $arr[18], $arr[19], $arr[20])

if ($res > 0)
   print("Вы выбрали: ", $arr[$res-1])
   DEFINE($var, $arr[$res-1])
   
   TFREADARR($var, $a)
   TFWRITEARR("file.cms", $a)
else
   print("Вы ничего не выбрали")
end_if

WAIT(3)

#include "file.cms"
halt
но возникла проблемма с #include "file.cms" он почему то запускается первым, то есть я указал на нужный файл, он его записывает в file.cms, но #include запускается до выполнения всего скрипта, получается, при последующих запусках, запускается предыдущий файл, хотя файл обновляется сразу...
« Last Edit: August 16, 2018, 03:51:26 PM by Mitriy163 »
Я только учусь!

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Кирил  описал выше  в чем дело. Так что скрипт должен выглядеть примерно так:
Code: (clickermann) [Select]
$list = "E:\test\*.*"


getfilelist($arr, $list)

for($i=0, $i< arrsize($arr))
   print($arr[$i])
end_cyc

for($i=arrsize($arr), $i< 21)
   ARRPUSH($arr, "пусто")
end_cyc

$res = radiobox("Выберете пункт‚", $arr[0], $arr[1], $arr[2], $arr[3], $arr[4], $arr[5], $arr[6], $arr[7], $arr[8], $arr[9], $arr[10], $arr[11], $arr[12], $arr[13], $arr[14], $arr[15], $arr[16], $arr[17], $arr[18], $arr[19], $arr[20])

if ($res > 0)
   print("Вы выбрали: ", $arr[$res-1])
else
   print("Вы ничего не выбрали")
end_if

WAIT(1)


SWITCH($res)
   CASE(1)
      #include "E:\test\test1.cms"
   CASE(2)
      #include "E:\test\test2.cms"
   CASE(3)
      #include "E:\test\test3.cms"
   CASE(4)
      #include "E:\test\test4.cms"
   CASE(5)
      #include "E:\test\test5.cms"
END_SWITCH

halt

Только вот у меня почему то в последней версии КМ инклуд с полным путем не работает  :-\ . Пишет что файла такого нет... а он то есть. Не пойму в чем дело, мож защита в ОС какая...



Глянул в справку:
Quote
#include - Вставляет в это место содержимое текстового файла из папки проекта.
так что придется извернуться как-то по другому.
« Last Edit: August 16, 2018, 08:56:26 PM by dramster »

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Только вот у меня почему то в последней версии КМ инклуд с полным путем не работает  :-\ . Пишет что файла такого нет... а он то есть
Вероятно, русское название одной из папок пути или не читаемые символы в названии.
Да не, потестил  в разных каталогах, и прямо из корня диска, ни в какую. В 4.13 выдает ошибку об отсутствии файла, в старших версиях просто скрипт с инклудом не запускается.
Если путь относительно папки проекта, то все норм, даже если инклуд в подкаталоге (относительно папки проекта).

Mitriy163

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Только вот у меня почему то в последней версии КМ ...
решили проблему по другому, но столкнулись с новой проблемой :) на 4.12 работает, а на 4.13 нет
Code: (clickermann) [Select]
$list_1 = INPUTBOX("message", "", 10)
   print($list_1)

if ($list_1 = 0)
   print("Отмена")
   halt
end_if

getfilelist($arr, "*"$list_1"*.cms")
   print($arr)
for($i=arrsize($arr), $i< 21)
   ARRPUSH($arr, "Пусто")
end_cyc

$list_2 = radiobox("Выберете название скрипта:", $arr[0], $arr[1], $arr[2], $arr[3], $arr[4], $arr[5], $arr[6], $arr[7], $arr[8], $arr[9], $arr[10], $arr[11], $arr[12], $arr[13], $arr[14], $arr[15], $arr[16], $arr[17], $arr[18], $arr[19], $arr[20])

if ($list_2 > 0)
   $list_3 = DIALOGBOX("Вы выбрали: "$arr[$list_2-1],4,2)
   
   if ($list_3 = 6)
      print("Вы выбрали: ",$arr[$list_2-1])
      TFCLEAR("Script_Start_Config.cms", 0)
      TFREADARR($arr[$list_2-1], $ara)
      TFWRITEARR("Script_Start_Config.cms", $ara)
      TFWRITE("Script_Start_Config.cms", "#Autorun")
      EXECUTE("Script_Start_Config.bat")
      HALT(1)
   else
      print("Отмена")
      halt
   end_if
else
   print("Отмена")
   halt
end_if
"*"$list_1"*.cms" в 4.12 понимает что от него хотят, ищет искомое слово на кириллице, в 4.13 на русском точно не ищет если проблема в этом.
Quote from: Script_Start_Config.bat
Code: (txt) [Select]
start ../Clickermann.exe Script_Start_Config.cms
« Last Edit: August 17, 2018, 05:52:09 AM by Mitriy163 »
Я только учусь!

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
А что это вообще такое?
Code: (clickermann) [Select]
getfilelist($arr, "*"$list_1"*.cms")
что за набор символов.
Возможно там должно быть что-то вроде этого:
Code: (clickermann) [Select]
getfilelist($arr, STRCONCAT($list_1, "\*.cms"))
Ещё с ранних сообщений кочует вот такая строка с обрывками тэгов, тоже хрень
Code: (clickermann) [Select]
GETFILELIST($arr, "Script\name[b]*[/b].cms"))


Vint

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

Code: (clickermann) [Select]
#include "Window.cms"


$path = INPUTBOX("Введите путь", "", 10)
IF($path = 0)
    LOGWRITE("Отмена")
    HALT
END_IF
$path = STRCONCAT($path, "\")
LOGWRITE("задан путь: ", $path)

GETFILELIST($items, STRCONCAT($path, "*.cms"))
IF(ARRSIZE($items) = 0)
    LOGWRITE("В директории нет подходящих файлов")
    HALT
END_IF

FOR($i=0, $i < ARRSIZE($items))
    LOGWRITE($items[$i])
END_CYC


Window_select(101, "Запустить скрипт:", 10) // ещё вариант вместо 101, указать 102
IF($return = -1)
    LOGWRITE ("Кнопка не нажата, время вышло или окно закрыто принудительно")
ELSE
    LOGWRITE("Запускаем ", $items[$return-1])
    EXECUTE(STRCONCAT($path, $items[$return-1]))
END_IF

HALT


Mitriy163

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
А что это вообще такое?
Code: (clickermann) [Select]
getfilelist($arr, "*"$list_1"*.cms")что за набор символов.
это строка поиска, найти список файлов содержащие $list_1, да все, тему можно считать закрытой, код доработали, все работает, всем спасибо.
Я только учусь!

Vint

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

Тогда так должно быть
Code: (clickermann) [Select]
getfilelist($arr, STRCONCAT("*", $list_1, "*.cms"))


Mitriy163

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
... так писать не нужно, чтоб потом не искать причины неправильной работы.

Тогда так должно быть
Code: (clickermann) [Select]
getfilelist($arr, STRCONCAT("*", $list_1, "*.cms"))
понял, попробую, возможно из-за этого и не работал на 4.13
Я только учусь!

clicker_student

  • Освоившийся
  • **
  • Posts: 25
    • View Profile
Искал информацию по функции GETFILELIST(), насколько понял, написал такой код
Code: (clickermann) [Select]
// выведем отладочные сообщения
$line = STRCONCAT("Получим список файлов в папке D:\MyFolder\*.csv")
TFWRITE("log.txt",$line)
GETFILELIST($files, "D:\MyFolder") // Получаем список файлов в массив
$line = STRCONCAT("В папке D:\MyFolder найдено файлов: ",ARRSIZE($files))
TFWRITE("log.txt",$line)

работает.

В справке сказано
Quote
    История развития программы
    v4.13.014 (16.05.18)
    + Ядро
      + Переход на Юникод, теперь в файлах применяется кодировка UTF-8
      + Создана 64-битная версия программы
    ....
        + Доработка KEYSTRING(), теперь он сам жмет Shift
        + Исправление GETFILELIST()
        + Исправление GETDIRLIST()
в самой справке описания функции нет.  Подскажите как ею пользоваться -что можно, а что нельзя.
И еще бы по GETDIRLIST().
Спасибо