1

Тема: AHK: Вырезание строки из файла

Уважаемые гуру, помогите пожалуйста с кодом.
Он наверное безобразный, т.к. я частями его собрал с разных тем форумов.

Вот что получилось

FILE = Список.txt

FileRead, out, %FILE%
loop, parse, out, `n, `r
{
	CNT_STROK:=a_index ; - запись в CNT_STROK количество строк
	If (A_LoopField != "")
		Num++
}
FileReadLine, line, %FILE%, 1

Loop, read, %FILE%, tempfile.txt
{
   IfNotInString, A_LoopReadLine, %line%, FileAppend, %A_LoopReadLine%`n
}

FileMove, tempfile.txt, %FILE%, 1
}

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

К вам я за помощью по коду, если не затруднит, подскажите, как переделать код так, чтобы в цикле можно было указать количество строк для вырезания, например Loop, 3, т.е. три строки первые строки вырезаем и смещаем их в тот же файл, но в конец, и после каждого пройденного цикла, выдавал MsgBox с названием вырезанной строки..

Можно ли переделать данный код под эту задачу? Буду очень признателен за Вашу помощь!

2

Re: AHK: Вырезание строки из файла

Для этого Loop вовсе не нужен.

countStrings := 3
text =
(
1 строка
2 строка
3 строка
4 строка
5 строка
)
newText := MoveStringsToEnd(text, countStrings)
MsgBox, % newText
Return

MoveStringsToEnd(text, count) {
   RegExMatch(text, "O)([^`n`r]+(\R|$)??){" . count . "}", match)
   Return match ? RegExReplace( SubStr(text, match.Len + StrLen(match[2]) + 1), "\R*$", match[2] . match[0],, 1 ) : text
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

3

Re: AHK: Вырезание строки из файла

teadrinker
Прошу прощения что я баран )) Но можно ли привести на моем примере с файлом, я не совсем понял куда я должен в скрипт вписать название файла )

4

Re: AHK: Вырезание строки из файла

teadrinker
countStrings := 1 пробовал.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

5 (изменено: serzh82saratov, 2019-01-31 01:04:41)

Re: AHK: Вырезание строки из файла

RegEx наверное тоже не нужен.

countStrings := 4
text =
(
1 строка
2 строка
3 строка
4 строка
5 строка
) 
newText := MoveStringsToEnd(text, countStrings)
MsgBox, % newText
Return

MoveStringsToEnd(text, count, d := "`n") {
	p := InStr(text, d, 0, 1, count) 
	Return p ? SubStr(text, p+1) d SubStr(text, 1, p-1) : text
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

6

Re: AHK: Вырезание строки из файла

trezubec


#SingleInstance Force
#NoEnv
#Persistent

FileName = %A_ScriptFullPath%
File := FileOpen(FileName, "rw`n")
File.Pos := 0
FileStr := File.Read()   
File.Length := 0
MsgBox % FileStr   
newText := MoveStringsToEnd(FileStr, 10)
MsgBox % newText 
File.Write(newText)
File.Close()
Return

MoveStringsToEnd(text, count, d := "`n") {
	p := InStr(text, d, 0, 1, count) 
	Return p ? SubStr(text, p+1) d SubStr(text, 1, p-1) : text
}

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

7

Re: AHK: Вырезание строки из файла

А откуда ты взял, что d = "`n"?

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

8

Re: AHK: Вырезание строки из файла

Думаешь FileOpen с "rw`n" не на все случаи?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

9

Re: AHK: Вырезание строки из файла

А, не обратил внимания. Так переписываешь файл с `n на `r`n.

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

10

Re: AHK: Вырезание строки из файла

Так, спасибо вроде разобрался, но только не совсем подходит под мои задачи, нужно чтобы каждую строку по одной выдавал в MsgBox, а не все сразу. Сам файл перезаписывается как надо! Уже большое спасибо за это! Но повторюсь, тут дело в том, что каждая строка это exe по сути, и он будет запускаться с помощью Run, поэтому и нужно чтобы скрипт AHK сместил первые три строки например вниз, но в тоже время и запустил их 01.exe, 02.exe, 03.exe

11

Re: AHK: Вырезание строки из файла

Так поймёте:

countStrings := 3
text =
(
1 строка
2 строка
3 строка
4 строка
5 строка
) 
newText := MoveStringsToEnd(text, countStrings, part)
Loop, Parse, part, `n
	MsgBox, % "Запустить: " A_LoopField
MsgBox, % "Новый файл:`n`n" newText
Return

MoveStringsToEnd(text, count, byref part, d := "`n") {
	p := InStr(text, d, 0, 1, count)
	Return p ? SubStr(text, p+1) d (part := SubStr(text, 1, p-1)) : text
}

teadrinker
Но сначала читаю `r`n как `n.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

12 (изменено: teadrinker, 2019-01-31 03:40:26)

Re: AHK: Вырезание строки из файла

serzh82saratov пишет:

Но сначала читаю `r`n как `n.

Если файл с `n, перезаписываешь с `r`n — некорректно.
Лучше так, без всяких фокусов:

countStrings := 3
text =
(
1 строка
2 строка
3 строка
4 строка
5 строка
)

Loop % countStrings {
   text := MoveStringsToEnd(text, 1, moved)
   MsgBox, Запустить: %moved%
}
MsgBox, % "Новый файл:`n`n" text
Return

MoveStringsToEnd(text, count, ByRef moved) {
   RegExMatch(text, "sO)((?:[^`n`r]+(\R)){" . count . "})(.*)", match)
   Return match[1] != "" ? match[3] . match[2] . (moved := RegExReplace(match[1], "\R$")) : text
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg