1 (изменено: serzh82saratov, 2012-07-29 23:57:55)

Тема: AHK: Как получить список имён файлов?

Господа подскажите как получить список имён файлов, из переменной.
Например в %clipboard% есть построчный список полных путей файлов, вида

E:\Torents\Агент Джонни Инглиш (Johnny English) [2003,DVDRip].avi
E:\Torents\Izgoy.BDRip.1080p.x264.MIF.mkv
E:\Torents\NG - Путешествие на край вселенной.mkv
E:\Torents\The Hitchhiker's Guide to the Galaxy [remux].ts

Как на выходе в переменной получить построчный список имён файлов

Агент Джонни Инглиш (Johnny English) [2003,DVDRip].avi
Izgoy.BDRip.1080p.x264.MIF.mkv
NG - Путешествие на край вселенной.mkv
The Hitchhiker's Guide to the Galaxy [remux].ts

Знаю что имя обрабатывает

SplitPath, clipboard, name

Читал в справке про Loop (parse a string) http://www.script-coding.com/AutoHotkey/LoopParse.html
Но ни в какую не доходит Помогите разобратся.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

2 (изменено: serzh82saratov, 2012-07-30 00:52:12)

Re: AHK: Как получить список имён файлов?

Придумал извращённый способ. Подскажите как это делать без создания файла, и как удалять пустые строки?

clipboard = %clipboard%
FileDelete, %A_Temp%\name.txt
Loop, parse, clipboard, `n, `r   
{
SplitPath, A_LoopField, name
FileAppend, %name%`r`n, %A_Temp%\name.txt
} 
FileRead, OutputVar, %A_Temp%\name.txt
FileDelete, %A_Temp%\name.txt
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

3

Re: AHK: Как получить список имён файлов?

Навскидку:

str=
(
E:\Torents\Агент Джонни Инглиш (Johnny English) [2003,DVDRip].avi
E:\Torents\Izgoy.BDRip.1080p.x264.MIF.mkv
E:\Torents\fghfg\NG - Путешествие на край вселенной.mkv
E:\Torents\The Hitchhiker's Guide to the Galaxy [remux].ts
C:\ddddddddddd
)
;способ раз:
NewStr := ""
Loop, Parse, str, `n, `r
{
	SplitPath, A_LoopField, name
	NewStr := NewStr . name . "`r`n"
}
msgbox %NewStr%
;способ двас:
NewStr := RegExReplace(str, "\w:\\.*?(?=[^\\]+(\R|$))([^\r\n$]+(\R|$)+)", "$2")
msgbox %NewStr%
ExitApp

4

Re: AHK: Как получить список имён файлов?

КРУТО!!!!
Особенно с RegEx!
Как бы ещё пустые строки удалить? а то енто

Loop
{
    StringReplace, NewStr, NewStr, `r`n`r`n, `r`n, UseErrorLevel
    if ErrorLevel = 0 
        break
}

Оставляет в начале и в конце пустые строки

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

5 (изменено: Александр_, 2012-07-30 01:53:15)

Re: AHK: Как получить список имён файлов?

serzh82saratov пишет:

КРУТО!!!!
Особенно с RegEx!
Как бы ещё пустые строки удалить?

На самом деле лучше избегать таких художеств, если в них нет крайней необходимости. Удалить любые символы в начале и конце строки можно функцией Trim:

str=
(

E:\Torents\Агент Джонни Инглиш (Johnny English) [2003,DVDRip].avi
E:\Torents\Izgoy.BDRip.1080p.x264.MIF.mkv

E:\Torents\fghfg\NG - Путешествие на край вселенной.mkv
E:\Torents\The Hitchhiker's Guide to the Galaxy [remux].ts
C:\ddddddddddd

динозавры захватывают мир!!!

)

NewStr := RegExReplace(Trim(str,"`r`n"), "\R+", "`r`n")
msgbox %NewStr%

Если это как-то связано с первым вопросом, то лучше сформулировать задачу целиком.

6 (изменено: serzh82saratov, 2012-07-30 02:03:04)

Re: AHK: Как получить список имён файлов?

Спасибо большое!
Даа RegEx это хорошая штука, понять бы как оно работает, уже с 10 раз перечитывал про неё, а понимание не приходит.
Создавал тему http://forum.script-coding.com/viewtopic.php?id=7273 Вы мне там сказали ошибки найти в RegEx, но до меня так и не дошло

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

7

Re: AHK: Как получить список имён файлов?

serzh82saratov пишет:

Спасибо большое!
Даа RegEx это хорошая штука, понять бы как оно работает, уже с 10 раз перечитывал про неё, а понимание не приходит.
Создавал тему http://forum.script-coding.com/viewtopic.php?id=7273 Вы мне там сказали ошибки найти в RegEx, но до меня так и не дошло

Без конкретных вопросов сложно объяснить. В последнем примере всё элементарно:
\R это \r либо \n либо \r\n, т.е. любой символ перевода строки.
+ означает, что предыдущее выражение должно встречаться не менее одного раза.
Соответственно шаблону \R+ соответствует ненулевое количество переводов строки, идущих подряд.

8

Re: AHK: Как получить список имён файлов?

str=
(
E:\Torents\Агент Джонни Инглиш (Johnny English) [2003,DVDRip].avi
E:\Torents\Izgoy.BDRip.1080p.x264.MIF.mkv

E:\Torents\fghfg\NG - Путешествие на край вселенной.mkv

E:\Torents\The Hitchhiker's Guide to the Galaxy [remux].ts
C:\ddddddddddd
)
msgbox % RegExReplace(str, "m`a)^.*\\|^\R")
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

9 (изменено: serzh82saratov, 2012-08-18 02:37:29)

Re: AHK: Как получить список имён файлов?

Не понятно, почему если текст поместить в файл и прочитать из него, то ничего не режется.
При записи этого текста в файл тоже.

MyString = 
(
	
      <u>RunScript(D:\AutoIt\players\XBMC\clipboard_paste.py)</u>                <!-- User -->        
      <k>System.Exec(D:\AutoIt\players\XBMC\тест.cmd)</k>                <!-- User -->        
      <s>RunScript(D:\AutoIt\players\XBMC\Test.py)</s>                <!-- User -->      
	  
      <y>XBMC.PlayMedia(E:\Video\=Beeline.m3u,playoffset=13)</y>    
      <r>ActivateWindow(Videos,D:\Music\=Playlist\1-Drum.m3u,dir,return)</r>    
      <h>Queue</h>                <!-- User -->        
      <q>ActivateWindow(VirtualKeyboard)</q>                <!-- User -->    
               <!-- ########  ONLY FOR IRLink 3 Plugin  ######## -->  
			   
			   
			   
			   
)
; FileRead, MyString, %A_ScriptDir%\new.txt
MyString := RegExReplace(Trim(MyString,"`r`n"), "\R+", "`r`n")
Gui, Add, ListView, r22 w560 h430   Grid -E0x200 -Multi -Hdr -ReadOnly AltSubmit, keyboard
Loop, Parse, MyString, `n, `r
LV_Add("", A_LoopField)
LV_ModifyCol()
Gui, Show
Return

teadrinker
Кстати в этом тексте RegExReplace(str, "m`a)^.*\\|^\R") отрезает большую часть некоторых строк.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

10

Re: AHK: Как получить список имён файлов?

serzh82saratov пишет:

teadrinker
Кстати в этом тексте RegExReplace(str, "m`a)^.*\\|^\R") отрезает большую часть некоторых строк.

Пример был только для предыдущей задачи — получить имена файлов и удалить пустые строки.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

11 (изменено: serzh82saratov, 2012-08-18 02:43:05)

Re: AHK: Как получить список имён файлов?

teadrinker пишет:
serzh82saratov пишет:

teadrinker
Кстати в этом тексте RegExReplace(str, "m`a)^.*\\|^\R") отрезает большую часть некоторых строк.

Пример был только для предыдущей задачи — получить имена файлов и удалить пустые строки.

Подскажите, как правильно записать в файл список файлов, или прочитать если в них есть пустые строки. То бишь удалить их.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

12

Re: AHK: Как получить список имён файлов?

serzh82saratov пишет:

или прочитать если в них есть пустые строки. То бишь удалить их.

Задача не ясна, сформулируй поточнее.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

13 (изменено: serzh82saratov, 2012-08-18 03:04:24)

Re: AHK: Как получить список имён файлов?

Пример был только для предыдущей задачи — получить имена файлов и удалить пустые строки.

Имя тоже режет

MyString = 
(
D:\AutoIt\players\XBMC\тест.cmd
E:\Video\=Beeline.m3u,playoffset=13
D:\Music\=Playlist\1-Drum.m3u,dir,return
)
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

14

Re: AHK: Как получить список имён файлов?

serzh82saratov пишет:

Имя тоже режет

Пример был для списка, в котором были только пути файлов, пустые строки и больше ничего. В таком варианте действовать нужно по-другому.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

15

Re: AHK: Как получить список имён файлов?

MyString = 
(
 
      <u>RunScript(D:\AutoIt\players\XBMC\clipboard_paste.py)</u>                <!-- User -->        
      <k>System.Exec(D:\AutoIt\players\XBMC\тест.cmd)</k>                <!-- User -->        
      <s>RunScript(D:\AutoIt\players\XBMC\Test.py)</s>                <!-- User -->      
 
      <y>XBMC.PlayMedia(E:\Video\=Beeline.m3u,playoffset=13)</y>    
      <r>ActivateWindow(Videos,D:\Music\=Playlist\1-Drum.m3u,dir,return)</r>    
      <h>Queue</h>                <!-- User -->        
      <q>ActivateWindow(VirtualKeyboard)</q>                <!-- User -->    
               <!-- ########  ONLY FOR IRLink 3 Plugin  ######## -->  
 
 
 
 
)

Loop, parse, MyString, `n, `r
   if RegExMatch(A_LoopField, "[A-Z]:\\.*\.\w+", Var)
      MsgBox, % RegExReplace(Var, ".*\\(.*)", "$1")
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

16 (изменено: serzh82saratov, 2012-08-18 03:22:56)

Re: AHK: Как получить список имён файлов?

teadrinker пишет:
serzh82saratov пишет:

Имя тоже режет

Пример был для списка, в котором были только пути файлов, пустые строки и больше ничего. В таком варианте действовать нужно по-другому.

Так это и есть только пути файлов, пустые строки и больше ничего

MyString = 
(


D:\AutoIt\players\XBMC\тест.cmd

E:\Video\=Beeline.m3u

D:\Music\=Playlist\1-Drum.m3u


)

msgbox % RegExReplace(MyString, "m`a)^.*\\|^\R")

Задача не ясна, сформулируй поточнее.

пытаюсь сформулировать...

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

17 (изменено: serzh82saratov, 2012-08-18 03:27:16)

Re: AHK: Как получить список имён файлов?

teadrinker  #15

У меня на выходе это
---------------------------
=Test.ahk
---------------------------
clipboard_paste.py
---------------------------
ОК   
---------------------------

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

18

Re: AHK: Как получить список имён файлов?

serzh82saratov пишет:
MyString = 
(


D:\AutoIt\players\XBMC\тест.cmd

E:\Video\=Beeline.m3u

D:\Music\=Playlist\1-Drum.m3u


)

msgbox % RegExReplace(MyString, "m`a)^.*\\|^\R")

Так всё работает. Ещё смотри пост выше.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

19

Re: AHK: Как получить список имён файлов?

serzh82saratov пишет:

teadrinker  #15

У меня на выходе это
---------------------------
=Test.ahk
---------------------------
clipboard_paste.py
---------------------------
ОК   
---------------------------

Так это и есть имена файлов. А что нужно-то?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

20

Re: AHK: Как получить список имён файлов?

teadrinker пишет:

Так всё работает. Ещё смотри пост выше.

---------------------------
=Test.ahk
---------------------------
тест.cmd
=Beeline.m3u
1-Drum.m3u

---------------------------
ОК   
---------------------------

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

21

Re: AHK: Как получить список имён файлов?

Ну да. А в чём проблема?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

22 (изменено: serzh82saratov, 2012-08-18 03:36:01)

Re: AHK: Как получить список имён файлов?

Прости, я что то забыл подчеркнуть , Нужны не имена файлов, а весь текст без пустых строк, в начале и в конце записать в файл

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

23

Re: AHK: Как получить список имён файлов?

Напиши точно в виде текста, что должно быть на выходе.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

24 (изменено: serzh82saratov, 2012-08-18 03:37:30)

Re: AHK: Как получить список имён файлов?

При записи в файл создаются пустые строки в конце

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

25

Re: AHK: Как получить список имён файлов?

Ничего не понятно. Вот смотри, есть строка:

MyString = 
(
 
      <u>RunScript(D:\AutoIt\players\XBMC\clipboard_paste.py)</u>                <!-- User -->        
      <k>System.Exec(D:\AutoIt\players\XBMC\тест.cmd)</k>                <!-- User -->        
      <s>RunScript(D:\AutoIt\players\XBMC\Test.py)</s>                <!-- User -->      
 
      <y>XBMC.PlayMedia(E:\Video\=Beeline.m3u,playoffset=13)</y>    
      <r>ActivateWindow(Videos,D:\Music\=Playlist\1-Drum.m3u,dir,return)</r>    
      <h>Queue</h>                <!-- User -->        
      <q>ActivateWindow(VirtualKeyboard)</q>                <!-- User -->    
               <!-- ########  ONLY FOR IRLink 3 Plugin  ######## -->  
 
 
 
 
)

Какой конкретно текст должен быть записан в файл?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

26

Re: AHK: Как получить список имён файлов?

Текст с пустыми строками, читаю из файла, и при записи обратно он добавляет 2 строки в конце текста. В этом и была проблема.
Оказалось не правильно записывал, разобрался.
Извиняюсь за беспокойство

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

27 (изменено: Malcev, 2012-11-03 06:41:17)

Re: AHK: Как получить список имён файлов?

str=
(
         
E:\Torents\Агент Джонни Инглиш (Johnny English) [2003,DVDRip].avi
E:\Torents\Izgoy.BDRip.1080p.x264.MIF.mkv
         
        
E:\Torents\fghfg\NG - Путешествие на край вселенной.mkv
E:\Torents\The Hitchhiker's Guide to the Galaxy [remux].ts
 
    
      
C:\ddddddddddd
 
динозавры захватывают мир!!!
          
)
 
NewStr := RegExReplace(Trim(str,"`r`n"), "\R+", "`r`n")
msgbox %NewStr%

А вот из этого примера, как получить так, чтобы все пустые строчки более одной идущие подряд даже если заполненные пробелами удалились?
То есть, если их идет 2 или 3 подряд оставить только одну.

28 (изменено: creature.ws, 2012-11-03 08:01:22)

Re: AHK: Как получить список имён файлов?

str=
(

E:\Torents\Агент Джонни Инглиш (Johnny English) [2003,DVDRip].avi
E:\Torents\Izgoy.BDRip.1080p.x264.MIF.mkv
 
       
E:\Torents\fghfg\NG - Путешествие на край вселенной.mkv
E:\Torents\The Hitchhiker's Guide to the Galaxy [remux].ts

        
           
C:\ddddddddddd

динозавры захватывают мир!!!

)

NewStr := RegExReplace(Trim(str,"`r`n"), "\R[\R\s]+", "`r`n`r`n")
msgbox %NewStr%

29

Re: AHK: Как получить список имён файлов?

Спасибо!
А я пробовал писать \R\R+ а также \s\s+ а вкупе их применить не додумался.
А можешь, пожалуйста, объяснить, почему мои варианты не срабатывали, а твой работает.
Кстати, набрел на неплохой, пожалуй единственный туториал по RegEx.
http://www.autohotkey.com/board/topic/3 … -to-regex/

30

Re: AHK: Как получить список имён файлов?

\R\R+ — перевод строки за которым следует один или более переводов строки.
\s\s+ — whitespace-символ за которым следует один или более whitespace-символов.
\R[\R\s]+ — перевод строки за которым следует один или более переводов строки или whitespace-символов.
Не срабатывали потому, что не должны были «срабатывать».

Для того, чтоб написать выражение решающее конкретную задачу достаточно статьи в справке — Regular Expressions (RegEx) - Quick Reference.