1 (изменено: Turambar, 2015-05-31 04:25:04)

Тема: Как считывать несколько строк поочередно?

Здравствуйте.

Требуется сделать вот что. Существует готовый текстовый файл с именами игроков в формате
/id Ivan_Ivanov
/id Petya_Ivanov
/id Vasya_Pupkin

Мне нужно, чтобы скрипт сам поочерёдно выдавал в чат игры эти строки.
С одной строкой понятно. Как-то так.

F3::
#IfWinActive GTA:SA:MP
File = C:\Users\user\Documents\test.txt

FileRead, out, %File%
loop, parse, out, `n, `r
{
    Total_Stings:=a_index    ; Посчитали строки и присвоили их количество переменной Total_Stings
    If A_LoopField
        Num++
}

Loop
{
    FileRead, read, %File%
    
    {

RegExMatch(read, ".*", id)
        SendInput, {F6}%id%{Enter}    ; Берём из файла всю строку (.*) и выводим в чат
        Sleep, 500
        
    }

if a_index = %Total_Stings%   ; Повторяем вывод столько раз, сколько строк
   break
}


return

По нажатию клавиши F3, скрипт считает количество строк в документе. Далее повторяет вывод в чат строки столько раз, сколько у нас строк в документе.

Замечательно. Но как научить его идти дальше - брать содержимое второй строки, третьей, четёртой?

Господа, как это можно реализовать?

P.S: извиняюсь за кривость кода и заимствование его частей из других тем на форуме.

2

Re: Как считывать несколько строк поочередно?


F3::
#IfWinActive GTA:SA:MP
File = C:\Users\user\Documents\test.txt

Loop, Read, %File%
{
    SendInput, {F6}%A_LoopReadLine%{Enter}
    Sleep, 500
}
Return

3 (изменено: Turambar, 2015-06-02 10:34:38)

Re: Как считывать несколько строк поочередно?

Огромное спасибо. Возникло ещё два вопроса. Надеюсь, последние.
Суть такая. Я беру гугл-таблицу (через UrlDownloadToFile сконвертированный csv-файл), копирую и отправляю в чат содержимое одной из ячеек в том случае, если некоторые ячейки в следующих столбцах пусты. Но две проблемы.

1. Как сделать в RegExMatch присвоение переменной только части искомого выражения?
Пример из инструкции:

RegExMatch("abcXYZ123", "abc(.*)123", SubPat)  ; Возвращает 1 и сохраняет "XYZ" в SubPat1

Вот эти скобки в середине... они у меня просто не работают. Возвращается мне почему-то вся строка, а не та её часть, которую я ограничил скобками.

2. Можно ли сделать так, чтобы скрипт не открывал чат (SendInput и Sleep) в случае, если искомое  через RegExMatch выражение в строке не найдено?


!3::Pause
!1::            
UrlDownloadToFile, https://docs.google.com/spreadsheets/d/11bQVUu5hbxbDxjetzi7htThVMiPu_8Qp6QvMreSaypE/export?exportFormat=csv, %A_ScriptDir%\Blacklist.csv ;Берём конвертированный список
File = %A_ScriptDir%\Blacklist.csv      ; открываем сохранённый файл
Loop, Read, %File%
{
    RegExMatch(A_LoopReadLine, "(/id\s.*?_.*)?,.*?,.*?,.*?,.*?,,", id)
    SendInput, {F6}%id%{Enter}
    Sleep, 1000
}
FileDelete, %A_ScriptDir%\Blacklist.csv
!2::Reload
Return

4

Re: Как считывать несколько строк поочередно?

Turambar пишет:

Возникло ещё два вопроса.

Turambar, одна тема — один вопрос.

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