1

Тема: AHK: Поиск значения в строке, по другому значению в той же строке.

Есть текстовый файл, пример:


DATE    TIME    NUMBER    CARD    NAME    UNIT    CHECK    SUM    OPER    RESTAURANT
20.08.2013    18:23    1    1600000000000101    Платежный сертификат 5000    15    1    -1    Скидка    22
20.08.2013    18:23    1    1600000000000101    Платежный сертификат 5000    15    1    5000    Потрачено    
20.08.2013    18:27    1    1600000000000101    Платежный сертификат 5000            2000    Взнос    0
21.08.2013    13:44    2    1600000000000102    Платежный сертификат 1000                Изменен номер карты    
21.08.2013    13:44    2    1600000000000102    Платежный сертификат 1000            1000    Взнос    0
21.08.2013    13:45    3    1600000000000103    Платежный Сертификат 3000                Изменен номер карты    
21.08.2013    13:45    4    1600000000000104    Платежный Сертификат 5000                Изменен номер карты    
21.08.2013    13:46    3    1600000000000103    Платежный Сертификат 3000            3000    Взнос    0
21.08.2013    13:46    4    1600000000000104    Платежный Сертификат 5000            5000    Взнос    0
21.08.2013    13:57    2    1600000000000102    Платежный сертификат 1000    15    1    -1    Скидка    
21.08.2013    13:57    2    1600000000000102    Платежный сертификат 1000    15    1    1000    Потрачено    
21.08.2013    14:00    2    1600000000000102    Платежный сертификат 1000    15    2    -1000    Оплата
21.08.2013    14:00    2    1600000000000102    Платежный сертификат 1000    15    2    2590    Потрачено    
21.08.2013    14:08    2    1600000000000102    Платежный сертификат 1000            1000    Взнос    

В файле 15 строк, необходимо найти код вида (1600000000000102) по значению -1 которое следует после кода. Т.е. если в строке есть -1, брать код вида(1600000000000102) и использовать как переменную, количество строк меняется (10-1000). Прошу подсказать в через какие команды , можно реализовать мою просьбу. Готовый скрипт мне не нужен т.к. все-равно не пойму, пока сам не сделаю. Для начала хотелось бы произвести поиск по тексту и выделение кода.

2

Re: AHK: Поиск значения в строке, по другому значению в той же строке.

Str =
(
DATE    TIME    NUMBER    CARD    NAME    UNIT    CHECK    SUM    OPER    RESTAURANT
20.08.2013    18:23    1    1600000000000101    Платежный сертификат 5000    15    1    -1    Скидка    22
20.08.2013    18:23    1    1600000000000101    Платежный сертификат 5000    15    1    5000    Потрачено    
20.08.2013    18:27    1    1600000000000101    Платежный сертификат 5000            2000    Взнос    0
21.08.2013    13:44    2    1600000000000102    Платежный сертификат 1000                Изменен номер карты    
21.08.2013    13:44    2    1600000000000102    Платежный сертификат 1000            1000    Взнос    0
21.08.2013    13:45    3    1600000000000103    Платежный Сертификат 3000                Изменен номер карты    
21.08.2013    13:45    4    1600000000000104    Платежный Сертификат 5000                Изменен номер карты    
21.08.2013    13:46    3    1600000000000103    Платежный Сертификат 3000            3000    Взнос    0
21.08.2013    13:46    4    1600000000000104    Платежный Сертификат 5000            5000    Взнос    0
21.08.2013    13:57    2    1600000000000102    Платежный сертификат 1000    15    1    -1    Скидка    
21.08.2013    13:57    2    1600000000000102    Платежный сертификат 1000    15    1    1000    Потрачено    
21.08.2013    14:00    2    1600000000000102    Платежный сертификат 1000    15    2    -1000    Оплата
21.08.2013    14:00    2    1600000000000102    Платежный сертификат 1000    15    2    2590    Потрачено    
21.08.2013    14:08    2    1600000000000102    Платежный сертификат 1000            1000    Взнос  
)
 
RegExMatch(Str, "m`a)^.*(\d{16}).*-1.*$", Match) 
MsgBox %  Match1
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

3

Re: AHK: Поиск значения в строке, по другому значению в той же строке.

Спасибо за помощь, у меня такой вопрос, при выполнении скрипта, он выдает значение переменной по первой найденной строке, как можно сделать, что бы каждую найденную строку он добавлял в отдельную переменную т.е. код в первой строке - match1, код в 10 строке - match2. И что значит знак %  после messagebox.

4 (изменено: serzh82saratov, 2013-08-22 19:21:53)

Re: AHK: Поиск значения в строке, по другому значению в той же строке.

что бы каждую найденную строку он добавлял в отдельную переменную т.е. код в первой строке - match1, код в 10 строке - match2.

Match0 содержит кол-во совпадений.


Pos := 1
While Pos 
    Pos := RegExMatch(Str, "m`a)^.*(\d{16}).*\s-1\s.*$", Found, Pos)
    , Pos := Pos ? ++Pos : 0 , Match%A_Index% := Found1, Match0 := A_Index-1
Loop % Match0
    MsgBox,,Match%A_Index% =, % Match%A_Index%
Return


что значит знак %  после messagebox.

Результат выражения.

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

5 (изменено: serzh82saratov, 2013-08-22 19:24:57)

Re: AHK: Поиск значения в строке, по другому значению в той же строке.

Так "правильнее":


i := 0, RegExMatch(Str, "m`a)^.*(\d{16}).*\s-1\s.*$(?CCallout)") 
Loop % i
    MsgBox,,Match%A_Index% =, % Match%A_Index%
Return

Callout(m)
{
    global match, i
    ++i, match%i% := m1
    Return 1
}

i содержит кол-во совпадений.

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