В качестве первого проекта я писал короткую программу для рендеринга фрактала Мандельброта.Я дошел до того, что пытался вывести свои результаты в файл (например, .bmp или .ppm) и застрял.
На самом деле я не нашел никаких примеров того, что я пытаюсь сделать, ноЯ нашел два примера кода для копирования из одного файла в другой.
Примеры в документации Gforth (раздел 3.27) не работали для меня (winXP), на самом деле они, казалось, открывали и создавали файлы, но неправильно записывать в файлы.
Это пример документации Gforth, который копирует содержимое одного файла в другой:
0 Value fd-in
0 Value fd-out
: open-input ( addr u -- ) r/o open-file throw to fd-in ;
: open-output ( addr u -- ) w/o create-file throw to fd-out ;
s" foo.in" open-input
s" foo.out" open-output
: copy-file ( -- )
begin
line-buffer max-line fd-in read-line throw
while
line-buffer swap fd-out write-line throw
repeat ;
Я нашел этот пример (http://rosettacode.org/wiki/File_IO#Forth), который выполняетРабота.Основная проблема заключается в том, что я не могу изолировать часть, которая пишет в файл, и она все еще работает.Основная путаница в том, что> r, кажется, не потребляет TOS, как я мог бы ожидать.
: copy-file2 ( a1 n1 a2 n2 -- )
r/o open-file throw >r
w/o create-file throw r>
begin
pad maxstring 2 pick read-file throw
?dup while
pad swap 3 pick write-file throw
repeat
close-file throw
close-file throw ;
\ Invoke it like this:
s" output.txt" s" input.txt" copy-file
Я был бы очень признателен, если бы кто-то мог точно объяснить, как слова open, create read и write -file на самом делеработа, поскольку мое расследование продолжает приводить к несколько странным стекам.
Любые подсказки относительно того, почему примеры Gforth не работают, также могут помочь.
В заключение, я хочу вывести из Gforth кфайл и до сих пор были сорваны.Кто-нибудь может предложить какую-нибудь помощь?
Спасибо Виджай , я думаю, что я понимаю пример, который вы привели.Однако, когда я пытаюсь использовать что-то вроде этого (что я думаю, похоже):
0 value test-file
: write-test
s" testfile.out" w/o create-file throw to test-file
s" test text" test-file write-line ;
Я получаю ok
, но ничего не добавляется в файл, я сделал ошибку?
Похоже, что проблема была в том, что не очищали соответствующие буферы или явно не закрывали файл.Добавляя что-то вроде
test-file flush-file throw
или
test-file close-file throw
между write-line
и ;
, это работает.Следовательно, пример документации Gforth сработал бы, если бы я следовал инструкциям.
Еще раз спасибо Виджай за помощь.