Поиск в txt файле и вывод строки с найденным совпадением

Обсуждение программ nnCron и nnCron LITE

Re: Поиск в txt файле и вывод строки с найденным совпадением

Postby ascerdfg1 » Sat, 28 Aug 2010, 07:34

Пробовал и модульную и не модульную.
nncron.exe v 1.93b10 Build 1141
tm.exe v 1.93b10 Build 569
Windows XP (5.1.2600) SP3
Комп без nnCron - груда металла!
User avatar
ascerdfg1
 
Posts: 541
Joined: Thu, 29 Nov 2007, 02:45
Location: г. Алексин

Re: Поиск в txt файле и вывод строки с найденным совпадением

Postby elos » Sat, 28 Aug 2010, 14:47

Оп-па! У меня перестала работать "телефонная книга" и этот скрипт. В последнее время только накатил SP3. Может из-за этого (хотя и не должно)? Придётся на работе воспроизвести. Удаление сервиса и восстановление его, перезапуск виндовс ничего не дали.
elos
 
Posts: 664
Joined: Tue, 25 Apr 2006, 11:15

Re: Поиск в txt файле и вывод строки с найденным совпадением

Postby ascerdfg1 » Sat, 28 Aug 2010, 14:54

буду ждать...
nncron.exe v 1.93b10 Build 1141
tm.exe v 1.93b10 Build 569
Windows XP (5.1.2600) SP3
Комп без nnCron - груда металла!
User avatar
ascerdfg1
 
Posts: 541
Joined: Thu, 29 Nov 2007, 02:45
Location: г. Алексин

Re: Поиск в txt файле и вывод строки с найденным совпадением

Postby elos » Sat, 28 Aug 2010, 19:26

Не утерпел, снёс SP3 - "записная книжка" не заработала с модульной версией. Восстановил старую версию - работает. Получается, мне надо переделывать свой алгоритм по возможности под любую версию.

Работают для модульной версии плагина
Code: Select all
#( test_read_by_line1
NoActive
Action:
S" D:\test.txt" READ-BY-LINE
FOUND-LINE
MsgBox
;READ-BY-LINE
)#

#( job1
NoActive
Action:
READ-BY-LINE: "D:\test.txt"
MSG: "%FOUND-LINE%"
;READ-BY-LINE
)#


Просто надо знать, что старая версия ложила на стек адрес и длину считанной из файла строки, а в новой - строка находится в новом слове FOUND-LINE, применение которого и положит на стек нужные данные.

Теперь придётся SP3 восстанавливать...
elos
 
Posts: 664
Joined: Tue, 25 Apr 2006, 11:15

Re: Поиск в txt файле и вывод строки с найденным совпадением

Postby ascerdfg1 » Sat, 28 Aug 2010, 22:03

Содержание файла "D:\test.txt"
Code: Select all
выполнять, завершать === accomplish
пересекать === cross
Выдаёт первое сообщение с казюльками, второе пустое при обоих версиях плагина.
nncron.exe v 1.93b10 Build 1141
tm.exe v 1.93b10 Build 569
Windows XP (5.1.2600) SP3
Комп без nnCron - груда металла!
User avatar
ascerdfg1
 
Posts: 541
Joined: Thu, 29 Nov 2007, 02:45
Location: г. Алексин

Re: Поиск в txt файле и вывод строки с найденным совпадением

Postby elos » Sat, 28 Aug 2010, 22:51

У меня работает - выводит всё!
Ты случаем не "условником" пытаешься делать со старой версией плагина?
Code: Select all
MsgBox 0
;?READ-BY-LINE

Здесь для ;?READ-BY-LINE
0 -выход, 1- продолжать до окончания файла.

При "казюльках" сразу надо думать про не ту кодировку - ты в DOS (866) ввёл.
elos
 
Posts: 664
Joined: Tue, 25 Apr 2006, 11:15

Re: Поиск в txt файле и вывод строки с найденным совпадением

Postby ascerdfg1 » Sun, 29 Aug 2010, 09:14

ты в DOS (866) ввёл.
Ты спрашиваешь или утверждаешь?
nncron.exe v 1.93b10 Build 1141
tm.exe v 1.93b10 Build 569
Windows XP (5.1.2600) SP3
Комп без nnCron - груда металла!
User avatar
ascerdfg1
 
Posts: 541
Joined: Thu, 29 Nov 2007, 02:45
Location: г. Алексин

Re: Поиск в txt файле и вывод строки с найденным совпадением

Postby ascerdfg1 » Sun, 29 Aug 2010, 09:20

Слова "?READ-BY-LINE" нет ни в одном из двух попеременно используемых мной плагинов.
nncron.exe v 1.93b10 Build 1141
tm.exe v 1.93b10 Build 569
Windows XP (5.1.2600) SP3
Комп без nnCron - груда металла!
User avatar
ascerdfg1
 
Posts: 541
Joined: Thu, 29 Nov 2007, 02:45
Location: г. Алексин

Re: Поиск в txt файле и вывод строки с найденным совпадением

Postby elos » Sun, 29 Aug 2010, 09:59

Найди в этой теме пост VoidVolker-а и внимательно посмотри текст самого плагина (это "старая" версия) - второе снизу слово. Ты же свой вопрос задал, смешав в задаче "нормальный" цикл
Code: Select all
S" D:\test.txt" READ-BY-LINE
... \ код
;READ-BY-LINE
)#
с куском "условного" выполнения
Code: Select all
MsgBox -1
;?READ-BY-LINE

Естественно, взяв MsgBox -1и подставив в "нормальные скобки" цикла чтения строки, получим за счёт минус единицы (она же TRUE) мусор на стеке - флаг то некому снять, "условное" завершающее слово цикла отсутствует.
Чтобы мы не путались, просто внимательно просмотри тексты плагинов, зафиксируйся, какую версию применяешь, на всякий случай просмотри примеры этой темы (про разницу между плагинами я сказал и рабочий пример под новую версию показал).
elos
 
Posts: 664
Joined: Tue, 25 Apr 2006, 11:15

Re: Поиск в txt файле и вывод строки с найденным совпадением

Postby ascerdfg1 » Sun, 29 Aug 2010, 11:13

Выложи свой плагин
nncron.exe v 1.93b10 Build 1141
tm.exe v 1.93b10 Build 569
Windows XP (5.1.2600) SP3
Комп без nnCron - груда металла!
User avatar
ascerdfg1
 
Posts: 541
Joined: Thu, 29 Nov 2007, 02:45
Location: г. Алексин

Re: Поиск в txt файле и вывод строки с найденным совпадением

Postby elos » Sun, 29 Aug 2010, 11:48

Старая версия (уже была приведена автором в этой же теме вместе с примерами - 12-ый пост)
Code: Select all
: (?READ-BY-LINE) { xt \ Lf Lc fEND -- }  ( a u xt -- )
    -1 TO fEND
    10240   \ максимальная длина строки (в символах)
    ALLOCATE THROW TO Lc
    R/O OPEN-FILE-SHARED THROW TO Lf
    BEGIN Lc 10238 Lf READ-LINE THROW
    fEND AND WHILE  \ Выход по команде
    Lc + 0 SWAP C!
    Lc ASCIIZ> xt EXECUTE TO fEND
    REPEAT  DROP
    Lf CLOSE-FILE DROP
    Lf FREE DROP
    Lc FREE DROP ;
: (READ-BY-LINE) { xt \ Lf Lc fEND -- }  ( a u xt -- )
    10240   \ максимальная длина строки (в символах)
    ALLOCATE THROW TO Lc
    R/O OPEN-FILE-SHARED THROW TO Lf
    BEGIN Lc 10238 Lf READ-LINE THROW WHILE
    Lc + 0 SWAP C!
    Lc ASCIIZ> xt EXECUTE \ TO fEND
    REPEAT  DROP
    Lf CLOSE-FILE DROP
    Lf FREE DROP
    Lc FREE DROP ;
: READ-BY-LINE \ compile: ( -- )
            \  execute: ( a u --)
    POSTPONE [NONAME
; IMMEDIATE
: ;READ-BY-LINE
    POSTPONE NONAME]
    POSTPONE (READ-BY-LINE)
; IMMEDIATE
: ;?READ-BY-LINE  ( ? -- )  \ 0 (FALSE) - выход из цикла, все остальные значения считаются правдой и цикл продолжится
    POSTPONE NONAME]
    POSTPONE (?READ-BY-LINE)
; IMMEDIATE
: READ-BY-LINE: eval-string,  POSTPONE READ-BY-LINE ; IMMEDIATE


Новая версия (можно найти в плагинах на сайте):
Code: Select all
MODULE: READ-BY-LINE-MODULE
\ Autor:  VoidVolker
\ Date:   21:56 20/01/09
    USER-VALUE fEND
    USER-VALUE Lc
    : (READ-BY-LINE) { xt \ Lf -- }  ( a u xt -- )
        fEND >R  Lc >R  \ Сохраняем переменные (для вложенных случаев)
        -1 TO fEND
        10240   \ максимальная длина строки (в символах)
        ALLOCATE THROW TO Lc
        R/O OPEN-FILE-SHARED THROW TO Lf
        BEGIN Lc 10238 Lf READ-LINE THROW
            fEND AND WHILE  \ Выход по команде
            Lc + 0 SWAP C!
            xt EXECUTE
        REPEAT  DROP
        Lf CLOSE-FILE DROP
        Lc FREE DROP
        R> TO Lc  R> TO fEND  \ Восстанавливаем переменные
    ;

EXPORT

    : RBL-EXIT   \ ( -- ) \ Выйти из цикла
       0 TO fEND
    ;

    : FOUND-LINE   \ ( -- a u ) \ Найденная строка
       Lc ASCIIZ>
    ;

    : READ-BY-LINE \ compile: ( -- )
                \  execute: ( a u --)
        POSTPONE [NONAME
    ; IMMEDIATE

    : ;READ-BY-LINE
        POSTPONE NONAME]
        POSTPONE (READ-BY-LINE)
    ; IMMEDIATE

    : READ-BY-LINE: eval-string,  POSTPONE READ-BY-LINE ; IMMEDIATE

;MODULE
elos
 
Posts: 664
Joined: Tue, 25 Apr 2006, 11:15

Re: Поиск в txt файле и вывод строки с найденным совпадением

Postby ascerdfg1 » Sun, 29 Aug 2010, 13:39

elos wrote:...Работают для модульной версии плагина
Code: Select all
#( test_read_by_line1
NoActive
Action:
S" D:\test.txt" READ-BY-LINE
FOUND-LINE
MsgBox
;READ-BY-LINE
)#

#( job1
NoActive
Action:
READ-BY-LINE: "D:\test.txt"
MSG: "%FOUND-LINE%"
;READ-BY-LINE
)#
При модульном "этом" плагине у меня та же самая неисправность (первое сообщение - козявки, второе - пустое).
nncron.exe v 1.93b10 Build 1141
tm.exe v 1.93b10 Build 569
Windows XP (5.1.2600) SP3
Комп без nnCron - груда металла!
User avatar
ascerdfg1
 
Posts: 541
Joined: Thu, 29 Nov 2007, 02:45
Location: г. Алексин

Re: Поиск в txt файле и вывод строки с найденным совпадением

Postby ascerdfg1 » Sun, 29 Aug 2010, 13:43

elos wrote:Не утерпел, снёс SP3 - "записная книжка" не заработала с модульной версией. Восстановил старую версию - работает. Получается, мне надо переделывать свой алгоритм по возможности под любую версию...
...Просто надо знать, что старая версия ложила на стек адрес и длину считанной из файла строки, а в новой - строка находится в новом слове FOUND-LINE, применение которого и положит на стек нужные данные.
Старая версия чего?
nncron.exe v 1.93b10 Build 1141
tm.exe v 1.93b10 Build 569
Windows XP (5.1.2600) SP3
Комп без nnCron - груда металла!
User avatar
ascerdfg1
 
Posts: 541
Joined: Thu, 29 Nov 2007, 02:45
Location: г. Алексин


Re:

Postby Aveiro » Thu, 08 Sep 2011, 01:38

VoidVolker wrote:Примеры:
Code: Select all
#( Test-Read-BY-Line
NoActive
Action:
\ Выведет в сообщении все строчки файла test.txt
READ-BY-LINE: "D:\test.txt"
MsgBox
;READ-BY-LINE

S" D:\test.txt" READ-BY-LINE  \ Быстрее, т.к. строке не делается EVAL-SUBST (т.е. не работает %<...code...>%)
MsgBox
;READ-BY-LINE
\ Выведет в сообщении все строчки файла test.txt
READ-BY-LINE: "D:\test.txt"
MsgBox -1
;?READ-BY-LINE

S" D:\test.txt" READ-BY-LINE  \ Быстрее, т.к. строке не делается EVAL-SUBST (т.е. не работает %<...code...>%)
MsgBox -1
;?READ-BY-LINE


\ Выведет в сообщении первую строчку файла test.txt
READ-BY-LINE: "D:\test.txt"
MsgBox 0
;?READ-BY-LINE

S" D:\test.txt" READ-BY-LINE  \ Быстрее, т.к. строке не делается EVAL-SUBST (т.е. не работает %<...code...>%)
MsgBox 0
;?READ-BY-LINE
)#

Почему то с модульной версией string_manipulation примеры не работают.
Интересно как сделать:
1. Вывести первое сообщение из файла
2. Вывести последнее сообщение из файла
3. Вывести все сообщения
4. По маске /текст/ вывести найденную строку.
5. Ну и работа с найденной строкой (вытащить из строки различные слова)

P.S
Еще вопрос родился....
FOUND-LINE может искать строку по маске ?
Есть текст,где:
Code: Select all
 Иванов-5.06;
 Иванов-7.07;
 Иванов-12.11;

Нужно найти все строчки Иванов,причем цифры могут быть любыми.
Пытался по маске:
Code: Select all
FOUND-LINE S" Иванов-/...../;"

и
Code: Select all
FOUND-LINE S" Иванов-/\d\d\d\d/;"

Что-то не так.
nncron.exe v 1.93b15 Build 1177 08.02.2016
tm.exe v 1.93b15 Build 604 08.02.2016
Aveiro
 
Posts: 222
Joined: Tue, 06 Jul 2010, 21:19

PreviousNext

Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 1 guest