1

Тема: AHK: Loop (Read). Как вернуть пред-пред последнюю строку?

Получаю последнюю строку:

Loop, read, C:\Text.txt
last_line := A_LoopReadLine

Файл "Text.txt" выглядит так:

Строка1

Строка2

Строка3

Нужная строка
(пустая строка)
(пустая строка)

Нужно получить пред-пред последнюю строку.

За ранее - спасибо!

2

Re: AHK: Loop (Read). Как вернуть пред-пред последнюю строку?

Так, наверно.


Loop, read, C:\Text.txt
{
    predpred_line := pred_line
    pred_line := last_line
    last_line := A_LoopReadLine
}

3 (изменено: serzh82saratov, 2014-08-11 13:51:24)

Re: AHK: Loop (Read). Как вернуть пред-пред последнюю строку?

Если без Loop подойдёт, то:


Text=
(
Строка1

Строка2

Строка3

Нужная строка


)
b := 2 ; 0 последняя, 1 предпоследняя, и.т.д.

MsgBox % (a := StrSplit(Text, "`n", "`r"))[a.maxindex()-b]

Конечно тут подразумевается FileRead.

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

4

Re: AHK: Loop (Read). Как вернуть пред-пред последнюю строку?

Можно узнать общее количество строк с помощью StringReplace и UseErrorLevel.
И потом прочитать нужную строку с помощью FileReadLine.

5 (изменено: serzh82saratov, 2014-08-11 13:53:57)

Re: AHK: Loop (Read). Как вернуть пред-пред последнюю строку?

Malcev
Хороший вариант.

Хотя лучше RegExReplace:

FileRead, Text, %A_ScriptFullPath% 
RegExReplace(Text, "m`a)$", "", RowCount)
MsgBox % RowCount
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

6

Re: AHK: Loop (Read). Как вернуть пред-пред последнюю строку?

Помог этот код

YMP пишет:

Loop, read, C:\Text.txt
{
    predpred_line := pred_line
    pred_line := last_line
    last_line := A_LoopReadLine
}

Только "predpred_line" почему-то всегда оказывалась пустой, а вот "pred_line" выдает нужный результат.

7

Re: AHK: Loop (Read). Как вернуть пред-пред последнюю строку?

Так в чём необходимость Loop, read? С FileRead варианты выглядят как то проще:


b := 2 ; 0 последняя, 1 предпоследняя, и.т.д.
FileRead, Text, % A_ScriptFullPath 
RegExReplace(Text, "m`a)$", "", RowCount)
FileReadLine, Line, % A_ScriptFullPath, % RowCount - b
MsgBox % Line

или

b := 2 ; 0 последняя, 1 предпоследняя, и.т.д.
FileRead, Text, % A_ScriptFullPath 
MsgBox % (a := StrSplit(Text, "`n", "`r"))[a.maxindex()-b]
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

8

Re: AHK: Loop (Read). Как вернуть пред-пред последнюю строку?

serzh82saratov, просто необходимо считывать Log-файл, а он постоянно обновляет и содержит разное кол-во строк.

9

Re: AHK: Loop (Read). Как вернуть пред-пред последнюю строку?

Desire
Ну и причём тут Loop, read?

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

10

Re: AHK: Loop (Read). Как вернуть пред-пред последнюю строку?

serzh82saratov пишет:

Desire
Ну и причём тут Loop, read?

Да я уже въехал, что ваш вариант лучше.

11 (изменено: serzh82saratov, 2014-08-11 14:24:07)

Re: AHK: Loop (Read). Как вернуть пред-пред последнюю строку?

Не то чтобы лучше для конкретной задачи, но если потом надо будет вернуть пред-пред-пред-пред последнюю строку, то с Loop, read будет не очень удобно это делать.

Поправка в мой вариант с StrSplit:


b := 2 ; 0 последняя, 1 предпоследняя, и.т.д. 
FileRead, Text, *t %A_ScriptFullPath% 
MsgBox % (a := StrSplit(Text, ["`n","`r"]))[a.maxindex()-b]
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

12

Re: AHK: Loop (Read). Как вернуть пред-пред последнюю строку?

serzh82saratov пишет:

Не то чтобы лучше для конкретной задачи, но если потом надо будет вернуть пред-пред-пред-пред последнюю строку, то с Loop, read будет не очень удобно это делать.

Поправка в мой вариант с StrSplit:


b := 2 ; 0 последняя, 1 предпоследняя, и.т.д. 
FileRead, Text, *t %A_ScriptFullPath% 
MsgBox % (a := StrSplit(Text, ["`n","`r"]))[a.maxindex()-b]

Можно вопрос? Что означает "*t" в этой строке:

FileRead, Text, *t %A_ScriptFullPath%

13

Re: AHK: Loop (Read). Как вернуть пред-пред последнюю строку?

Русская справка не катит?

Все эти заморочки для полной универсальности, так как файлы могут быть с тремя вариантами перевода строк - `r`n, `n, `r. Если вариант заранее известен, то это надо указывать в задаче.
Поэтому я сказал Malcev что StringReplace не совсем то, а также поправил свой вариант.

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

14

Re: AHK: Loop (Read). Как вернуть пред-пред последнюю строку?

serzh82saratov пишет:

Русская справка не катит?

Все эти заморочки для полной универсальности, так как файлы могут быть с тремя вариантами перевода строк - `r`n, `n, `r. Если вариант заранее известен, то это надо указывать в задаче.
Поэтому я сказал Malcev что StringReplace не совсем то, а также поправил свой вариант.

Спасибо, я что-то в справке смотрел, но не там.

15 (изменено: serzh82saratov, 2014-08-11 14:55:10)

Re: AHK: Loop (Read). Как вернуть пред-пред последнюю строку?

в справке смотрел, но не там

1 Документация по программе AutoHotkey
2 Ctrl+F в браузере
3 пишем FileRead  в строку поиска

???

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

16

Re: AHK: Loop (Read). Как вернуть пред-пред последнюю строку?

serzh82saratov пишет:

в справке смотрел, но не там

1 Документация по программе AutoHotkey
2 Ctrl+F в браузере
3 пишем FileRead  в строку поиска

???

Всегда так делаю, у меня даже страница справки в закладках, просто по невнимательности пытался найти ответ на свой вопрос в FileReadLine.