помощь начинаешему

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

помощь начинаешему

Postby bender_523 » Wed, 25 Jan 2012, 13:24

Всем доброго времени суток.
Есть пара непонятных вопросов:
1) вот код:
Code: Select all
S" FirsT|SeconD"
2DUP
S" |" SEARCH DROP
SWAP 1+ SWAP
DUP >R
2SWAP
R>
NEGATE +
MsgBox MsgBox

по идеи должно появится два сообщения, первое с текстом "FirsT" , а второе "SeconD".
Получается: второе нормально, а первое вот такое "FirsT|SeconD".
Попробовал заменить
Code: Select all
NEGATE +

на
Code: Select all
2DROP 2

т.е. пытаюсь вручную задать размер первой строки.
По идеи должно получится "Fi" , а выдаёт опять всю строку.
Выходит, что компилятору ваще пофиг на размер строки! :Hangman:
Попробовал поэкспериментировать
Code: Select all
S" FirsT|SeconD"
2DUP
S" |" SEARCH DROP
SWAP 1+ SWAP
DUP >R
2SWAP
R>
\ NEGATE +
 2DROP 2
S>ZALLOC ASCIIZ>
MsgBox MsgBox

теперь всё работает! :D
Плиз объясните почему так получается, как вообще надо работать со строками??
bender_523
 
Posts: 16
Joined: Fri, 03 Sep 2010, 22:57

Re: помощь начинаешему

Postby bender_523 » Wed, 25 Jan 2012, 13:32

второй вопрос)
тож непонятки со строками (((

вот вбиваю в консоли:
Code: Select all
S" string" TYPE <enter>


консоль выдаёт:
Code: Select all
string Ok


а вот, если так пробую:
Code: Select all
S" string" <enter>
Ok..
TYPE <enter>

выдаёт:
Code: Select all
E
ing Ok



объясните почему???
может проблема та же, что и в первом вопросе...
bender_523
 
Posts: 16
Joined: Fri, 03 Sep 2010, 22:57

Re: помощь начинаешему

Postby VoidVolker » Wed, 25 Jan 2012, 16:49

На самом деле, все очень просто - это особенность архитектуры форта: текст интерпретируется построчно, и для этого используется "входной" буфер, соответственно при интерпретации новой строки старая будет затерта. Слово S" просто возвращает положение строки во входном буфере. Так вот, в режиме интерпретации строка по-прежнему остается в этом буфере и ввод новой строки перезапишет её.
Достаточно ввести в консоли вот такой текст:
Code: Select all
TIB #TIB @ TYPE CR

И можно будет увидеть содержимое входного буфера.
Поэтому в консоли со строками надо работать в одну строку.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: помощь начинаешему

Postby bender_523 » Wed, 25 Jan 2012, 17:27

На самом деле, все очень просто ....

спасибо! стало немного понятнее.
bender_523
 
Posts: 16
Joined: Fri, 03 Sep 2010, 22:57

Re: помощь начинаешему

Postby bender_523 » Wed, 25 Jan 2012, 18:39

а с первым вопросом кто нибуть поможет?
bender_523
 
Posts: 16
Joined: Fri, 03 Sep 2010, 22:57

Re: помощь начинаешему

Postby VoidVolker » Wed, 25 Jan 2012, 19:08

А какова задача-то?
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: помощь начинаешему

Postby bender_523 » Wed, 25 Jan 2012, 22:52

задача:
если не сложно объяснить почему это работает
Code: Select all
S" FirsT|SeconD"
2DUP
S" |" SEARCH DROP
SWAP 1+ SWAP
DUP >R
2SWAP
R>
NEGATE +
S>ZALLOC ASCIIZ>
MsgBox MsgBox



а это нет
Code: Select all
S" FirsT|SeconD"
2DUP
S" |" SEARCH DROP
SWAP 1+ SWAP
DUP >R
2SWAP
R>
NEGATE +
MsgBox MsgBox
bender_523
 
Posts: 16
Joined: Fri, 03 Sep 2010, 22:57

Re: помощь начинаешему

Postby VoidVolker » Thu, 26 Jan 2012, 16:36

Основную причину я уже назвал. MsgBox показывает сообщение через винапи, а для для винапи нужны az строки, в то время как строка из входного буфера просто не имеет нуля после последнего символа (фактически там кавычка).
Кстати, вот есть несколько полезных слов для работы со строками. И, возможно, полезным будет плагин Autostrings.spf.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56


Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 2 guests