Тема: AHK: Чтение одной секции всех одинаковых ключей в ini файле
Привет.
Как прочитать в одной секции все ключи одного типа "Path"
Цель, чтоб при чтении ini файла, удалялись файлы, которые прописаны в ключах "Path" в секции, например "Trash".
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Привет.
Как прочитать в одной секции все ключи одного типа "Path"
Цель, чтоб при чтении ini файла, удалялись файлы, которые прописаны в ключах "Path" в секции, например "Trash".
А что вы понимаете под «типом» ключа? Если это название ключа, то в одной секции стандартного ini-файла не может быть нескольких ключей с одинаковым названием.
teadrinker
То есть вот так >>>
[Trash]
Path=1
Path=2
Не может быть?
Вот пример кода, только для txt.
Loop, read, 1.txt
{
Loop, parse, A_LoopReadLine, %A_Tab%
{
FileDelete, %A_LoopReadLine%
}
}
Как сделать то же самое, только чтоб читал ini и только одну, всю секцию "Trash" и все ключи которые там (пути к файлам), удалил.
Потом будут другие секции там же, их потом по другому нужно прочитать и сделать другие действия с файлами.
Не может быть?
Создать такую секцию можно, но обычно так не делается. Во всяком случае, это будет нестандартный ini-файл.
Чтобы прочитать секцию целиком, есть команда
IniRead, OutputVarSection, Filename, Section
Можно, пожалуйста пример, чтения и удаление всех файлов в ключах, path1=/path2=и т.д.
Чтобы прочитать секцию целиком, есть команда
Хотя, если файл нестандартный, я бы лучше читал регуляркой. Предположим есть ini:
[Files]
Path=C:\test0.txt
Path=D:\test0.exe
[Trash]
Path=C:\test.txt
Path=D:\test.exe
[Sect]
Path=C:\test2.txt
Path=D:\test2.exe
Ключи Path из секции Trash можно прочитать так:
filePath := A_Desktop . "\test.ini" ; указать правильный путь
section := "Trash"
key := "Path"
FileRead, text, % filePath
m := ""
while RegExMatch(text, "isO)(?:(?:^|\R)\[" . section . "]|(?!^)\G)(?:(?!\R\[|\s*$).)*?\K\R" . key . "=(\V+)", m, m ? m.Pos + m.Len : 1)
MsgBox, % m[1]
Как удалить прочитанные пути, надеюсь, догадаетесь.
Этот код читает секцию целиком, но и вместе с ключами, а мне не нужно чтоб он читал "path=" все что после нужно читать и передавать.
IniRead, OutputVarSection, Filename, Section
Тут regex нужно использовать?
UPD: поздно написал), сейчас попробую, спасибо.
Спасибо большое, работает, еще предстоит разобрать все строки, чтоб понять), особенно RegExMatch.
Ну или чтобы регулярка попроще была, то можно так:
filePath := A_Desktop . "\test.ini" ; указать правильный путь
section := "Trash"
key := "Path"
IniRead, pairs, % filePath, % section
m := ""
while RegExMatch(pairs, "`amiO)^" . key . "=\K\V+", m, m ? m.Pos + m.Len : 1)
MsgBox, % m[0]
Шедевр, еще раз спасибо.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться