Строки из текстового файла в переменные

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

Re: Строки из текстового файла в переменные

Postby SeMa » Thu, 12 Aug 2010, 16:07

Что-то я запутался :Hangman: .
Покажите "правильный" вариант FILE-READ-LINE-N и FILE-NUM-LINE, работающий с последней версией READ-BY-LINE. Старой у меня нет.
Компьютер ─ устройство, разработанное для ускорения и автоматизации человеческих ошибок
User avatar
SeMa
 
Posts: 637
Joined: Fri, 15 Apr 2005, 12:49
Location: Украина

Re: Строки из текстового файла в переменные

Postby sournk » Fri, 13 Aug 2010, 07:26

1. Выбросить слова crlf S+ я попробовал первым делом, только тогда FILE-READ-LINE-N ничего не возвращает.
2. Уменьшить длину строки действительно получилось. Почему на 2 не понятно. 13 и 10 - конец строки что ли?
3. Что такое 2SWAP в вашем примере?
sournk
 
Posts: 22
Joined: Fri, 15 Jan 2010, 14:31

Re: Строки из текстового файла в переменные

Postby sournk » Fri, 13 Aug 2010, 07:28

У меня работает в такой конфигурации:
1. string_manipulation.spf
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


2. Задача пока выглядит так:
Code: Select all
#( test_read
NoActive
: FILE-NUM-LINE ( a u -- n )
\ возвращает количество строк n в файле a u
0 ROT ROT
READ-BY-LINE
ROT 1 +
NIP NIP
;READ-BY-LINE ;

: FILE-READ-LINE-N ( a1 u1 n -- a2 u2 )
\ возвращает n-строку файла a1 u1
\ если n больше количества строк в файле a u, то возвращает последнюю строку
>R 2DUP FILE-NUM-LINE R> MIN 1 MAX
ROT ROT
READ-BY-LINE
     crlf S+
     ROT 1 - DUP
     IF
       NIP NIP -1
     THEN
;?READ-BY-LINE ;

Action:
   FOR-FILES: "c:\Temp\09\kat\*.kat"
      IS-DIR?
      IF
      ELSE
         FOUND-FULLPATH 1 FILE-READ-LINE-N 2 -
         FILE-WRITE: "%1 esPICKS%" "123"
      THEN
   ;FOR-FILES
)#
sournk
 
Posts: 22
Joined: Fri, 15 Jan 2010, 14:31

Re: Строки из текстового файла в переменные

Postby SeMa » Fri, 13 Aug 2010, 16:26

sournk wrote: Почему на 2 не понятно. 13 и 10 - конец строки что ли?
Да. cr+lf

sournk wrote:3. Что такое 2SWAP в вашем примере?
2SWAP "two-swap" CORE
( x1 x2 x3 x4 -- x3 x4 x1 x2 )
Меняет местами две верхние пары чисел на стеке.
Компьютер ─ устройство, разработанное для ускорения и автоматизации человеческих ошибок
User avatar
SeMa
 
Posts: 637
Joined: Fri, 15 Apr 2005, 12:49
Location: Украина

Re: Строки из текстового файла в переменные

Postby ascerdfg1 » Wed, 09 May 2012, 20:07

А можно ли упростить:
Code: Select all
#( test_read_n_string
NoActive
VARIABLE my_var
VARIABLE my_va
Action:
1 my_var !
READ-BY-LINE: "C:\flag_1.txt"
my_var @
CASE
    1 OF FOUND-LINE S>NUM my_va ! ENDOF \ преобразую первую строку файла в число
ENDCASE
;READ-BY-LINE
MSG: "%my_va @%"
)#
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 VoidVolker » Thu, 10 May 2012, 18:48

Code: Select all
#( test_read_n_string
NoActive
Action:
" C:\flag_1.txt" FILE MsgBox
)#
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Строки из текстового файла в переменные

Postby ascerdfg1 » Thu, 10 May 2012, 19:02

А чтоб
Code: Select all
MSG: "%my_va @%"
)#
обязательно было?
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 ascerdfg1 » Thu, 10 May 2012, 19:18

Во как работает:
Code: Select all
#( test_read_n_string
NoActive
VARIABLE my_va
Action:
READ-BY-LINE: "C:\flag_1.txt"
     FOUND-LINE S>NUM my_va ! \ преобразую первую строку файла в число
;READ-BY-LINE
MSG: "%my_va @%"
)#
Всё ли тут корректно если в файле всего одна строка?
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 VoidVolker » Fri, 11 May 2012, 15:59

Если в файле находится число (с самого первого байта) - то можно просто загрузить файл в память и отдать слову S>NUM - оно его вполне корректно преобразует, т.к. считает окончанием числа не конец строки, а первый не числовой символ.
Code: Select all
" C:\flag_1.txt" FILE S>NUM N>S MsgBox
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Строки из текстового файла в переменные

Postby ascerdfg1 » Fri, 11 May 2012, 17:56

Спасибо!
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 dimmer123 » Tue, 12 Jun 2012, 20:03

elos wrote:Соединить READ-BY-LINE с CASE
или почти готовое решение...

Никак не могу сообразить, как это сделать. Число из файла выводится, а вот добавить CASE не получается. В файле одна строка в ней число, нужно в зависимости от числа выполнять действия. Подскажите, как правильно вставить CASE.
Code: Select all
#( test_read_file
NoActive
Action:
READ-BY-LINE: "E:\Tes\1.txt" MsgBox
 
;READ-BY-LINE
)#
dimmer123
 
Posts: 13
Joined: Tue, 12 Jun 2012, 19:19

Re: Строки из текстового файла в переменные

Postby ascerdfg1 » Tue, 12 Jun 2012, 20:51

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 VoidVolker » Tue, 12 Jun 2012, 23:10

Code: Select all
" C:\flag_1.txt" FILE S>NUM
CASE
 1 OF <...> ENDOF
 2 OF <...> ENDOF
 3 OF <...> ENDOF
 DUP OF <...ни один из вариантов...> ENDOF
ENDCASE
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Строки из текстового файла в переменные

Postby dimmer123 » Tue, 12 Jun 2012, 23:57

Code: Select all
#( test_read_file1
NoActive
Action:
READ-BY-LINE: "E:\Tes\1.txt" FILE S>NUM
CASE
 70 OF MSG: "70" ENDOF
 60 OF MSG: "60" ENDOF
 50 OF MSG: "50" ENDOF
 DUP OF MSG: "0" ENDOF
ENDCASE
;READ-BY-LINE
)#


VoidVolker, в файле 1.txt прописано 70, nncron выдает Msg с 0, а потом "Ошибка стека в Action".
dimmer123
 
Posts: 13
Joined: Tue, 12 Jun 2012, 19:19

Re: Строки из текстового файла в переменные

Postby ascerdfg1 » Wed, 13 Jun 2012, 05:28

#( test_read_n_string
NoActive
VARIABLE my_va
Action:
S" C:\flag_1.txt" FILE S>NUM my_va !
MSG: "%my_va @%"
)#
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: г. Алексин

PreviousNext

Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 7 guests