1 (изменено: viviancels, 2023-01-12 17:07:21)

Тема: AHK: При записи в файл цикл копирования строк работает лишь частично

Здравствуйте. С MsgBox цикл, вроде бы, работает (при каждом нажатии OK копируется следующая ссылка):

#NoEnv
Haystack1 =
(
nLpvkPRx/SDR001.jpg
fRxcYNv5/SDR002.jpg
Gm0PB2vH/SDR003.jpg
)
Haystack2 =
(
[spoiler="[SDR001] Khoa (2015)"]
[123][456]
[/spoiler]
[spoiler="[SDR002] Lissa (2015)"]
[123][456]
[/spoiler]
[spoiler="[SDR003] Phil (2015)"]
[123][456]
[/spoiler]
)
Loop, parse, Haystack1, `n
 {
Cat := regexreplace(A_LoopField, "`am)^.*\/(.*).jpg$", "$1")
pos := InStr(Haystack2, "[spoiler=""["Cat)
MsgBox % RegExReplace(Haystack2, "s)(?<=\[123\]).*?(?=\[456\])", A_LoopField,, 1, pos)
 }

Но при записи в файл записывается, почему-то, только третья ссылка, а первая и вторая не записываются (текст в файлах Haystack1.txt и Haystack2.txt тот же самый):


#NoEnv
FileRead, Haystack1, Haystack1.txt
FileRead, Haystack2, Haystack2.txt
Loop, parse, Haystack1, `n
 {
Cat := regexreplace(A_LoopField, "`am)^.*\/(.*).jpg$", "$1")
pos := InStr(Haystack2, "[spoiler=""["Cat)
Haystack3 := RegExReplace(Haystack2, "s)(?<=\[img=right\]).*?(?=\[/img\])", A_LoopField,, 1, pos)
 }

file := FileOpen("Haystack2.txt", "w `n", "UTF-8")
if !IsObject(file)
log("Can't open " Haystack2 " for writing.")
file.Write(Haystack3)
file.Close()

При записи в файл результат получается таким:


[spoiler="[SDR001] Khoa (2015)"]
[123][456]
[/spoiler]
[spoiler="[SDR002] Lissa (2015)"]
[123][456]
[/spoiler]
[spoiler="[SDR003] Phil (2015)"]
[123]Gm0PB2vH/SDR003.jpg[456]
[/spoiler]

Версия Autohotkey 1.1.34.4.

2

Re: AHK: При записи в файл цикл копирования строк работает лишь частично

viviancels пишет:

при каждом нажатии OK копируется следующая ссылка

Копируется куда?

viviancels пишет:

при записи в файл записывается, почему-то, только третья ссылка, а первая и вторая не записываются

А почему должны записываться первая и вторая? Что у вас в переменной, то и записывается. В каждой итерации Loop, Parse в переменную Haystack3 помещается новое значение, предыдущее нигде не сохраняется. Соответственно, перед записью в файл в переменной самый последний вариант. Посмотреть содержание переменной можно через MsgBox.

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

3

Re: AHK: При записи в файл цикл копирования строк работает лишь частично

teadrinker пишет:

перед записью в файл в переменной самый последний вариант

Теперь понятно. Файл должен записываться после каждого варианта (обновления переменной)?

4

Re: AHK: При записи в файл цикл копирования строк работает лишь частично

Проще дописывать в переменную новое значение, сохраняя старое. Есть такой приём:

var := "text"
var .= "`nnew text"
MsgBox % var

Я, правда, не понял, как должен в итоге выглядеть файл.

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

5 (изменено: viviancels, 2023-01-12 21:30:51)

Re: AHK: При записи в файл цикл копирования строк работает лишь частично

teadrinker пишет:

Проще дописывать в переменную новое значение, сохраняя старое.

Нужно, чтобы текст переменной Haystack2 обновлялся или заменялся другой переменной после каждого шага цикла. Сначала значение Haystack2 считывается из файла, потом в него добавляется текст и этот результат возвращается в эту же (или другую) переменную, чтобы при следующем шаге текст считывался уже из него, а не из файла.

Как-то так:

Haystack =
(
text1
text2
)
Loop, 1
{
Haystack2 := RegExReplace(Haystack, "text1", "text123")
Haystack3 := RegExReplace(Haystack2, "text2", "text456")
MsgBox % Haystack3
}
teadrinker пишет:

Я, правда, не понял, как должен в итоге выглядеть файл.

[spoiler="[SDR001] Khoa (2015)"]
[123]nLpvkPRx/SDR001.jpg[456]
[/spoiler]
[spoiler="[SDR002] Lissa (2015)"]
[123]fRxcYNv5/SDR002.jpg[456]
[/spoiler]
[spoiler="[SDR003] Phil (2015)"]
[123]Gm0PB2vH/SDR003.jpg[456]
[/spoiler]

6

Re: AHK: При записи в файл цикл копирования строк работает лишь частично

Haystack1 =
(
nLpvkPRx/SDR001.jpg
fRxcYNv5/SDR002.jpg
Gm0PB2vH/SDR003.jpg
)
Haystack2 =
(
[spoiler="[SDR001] Khoa (2015)"]
[123][456]
[/spoiler]
[spoiler="[SDR002] Lissa (2015)"]
[123][456]
[/spoiler]
[spoiler="[SDR003] Phil (2015)"]
[123][456]
[/spoiler]
)
temp := Haystack2
Loop, parse, Haystack1, `n
{
    Cat := regexreplace(A_LoopField, "`am)^.*\/(.*).jpg$", "$1")
    pos := InStr(temp, "[spoiler=""["Cat)
    temp := RegExReplace(temp, "s)(?<=\[123\]).*?(?=\[456\])", A_LoopField,, 1, pos)
}
MsgBox % temp
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder