Файлы
Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill
помогите разобраться с задачей: надо создать файл и добавить в конец файла символы end.
uses crt;
type tbook=record
tekst:string;
end;
tfile=file of tbook;
var
myfile:tfile;
newrecord:tbook;
begin
assign(myfile,'book.dat');
rewrite(myfile);
with newrecord do begin
writeln('vvedit tekst'); readln(tekst);
end;
close(myfile);
reset(myfile);
begin clrscr;
with newrecord do
seek(myfile,filesize(myfile)); write(myfile,?);
readln
end.
вроде все правильно писала, но не знаю что писать там где writeln(myfile, ... )
uses crt;
type tbook=record
tekst:string;
end;
tfile=file of tbook;
var
myfile:tfile;
newrecord:tbook;
begin
assign(myfile,'book.dat');
rewrite(myfile);
with newrecord do begin
writeln('vvedit tekst'); readln(tekst);
end;
close(myfile);
reset(myfile);
begin clrscr;
with newrecord do
seek(myfile,filesize(myfile)); write(myfile,?);
readln
end.
вроде все правильно писала, но не знаю что писать там где writeln(myfile, ... )
- Колядин Максим
- Сообщения: 297
- Зарегистрирован: 16 ноя 2006, 19:09
- Откуда: Seattle, WA
- Контактная информация:
[quote="Justice"]
Вот с текстовым файлом:
Код: Выделить всё
uses crt] [/quote]
Ты, наверное, запутала сама себя, создав много лишних "проблем"-); Я бы решил эту задачу так:
[code]
uses crt;
var
myfile: file;
tekst: string;
begin
assign(myfile,'book.dat');
rewrite(myfile);
close(myfile);
tekst:='end';
reset(myfile);
seek(myfile,filesize(myfile));
blockwrite(myfile, tekst, 1);
end.
Вот с текстовым файлом:
Код: Выделить всё
uses crt;
var f: text;
s: string;
begin
clrscr;
s:='end';
assign(f, 'book.dat'); rewrite(f);
append(f);
write(f,s);
close(f);
end.
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
а если все же решать эту задачу с типовым файлом?Колядин Максим писал(а): Я бы решил эту задачу так:Код: Выделить всё
uses crt; var myfile: file; tekst: string; begin assign(myfile,'book.dat'); rewrite(myfile); close(myfile); tekst:='end'; reset(myfile); seek(myfile,filesize(myfile)); blockwrite(myfile, tekst, 1); end.
Вот с текстовым файлом:Код: Выделить всё
uses crt; var f: text; s: string; begin clrscr; s:='end'; assign(f, 'book.dat'); rewrite(f); append(f); write(f,s); close(f); end.
- Колядин Максим
- Сообщения: 297
- Зарегистрирован: 16 ноя 2006, 19:09
- Откуда: Seattle, WA
- Контактная информация:
Я точно утверждать ничего не буду, но по-моему компилятор всегда будет выдавать ошибку во write(myfile, ?), так как переменная var myfile: tfile не является текстовой, а процедура write(f,...) (var f: text) используется только как запись в типизированный текстовый файл. BlockWrite здесь тоже неподойдёт - это только для нетипизорованного типа file. Возможно, компилятор всегда будет писать: "Tip mistmach" - потому что он не знает что нужно твоему type tbook=record tekst:string; end; tfile=file of tbook; var myfile:tfile;
P.S Чем тебя без type не устраивает?...
P.S Чем тебя без type не устраивает?...
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
Если я правильно понял, задание можно сформулировать так: "Создать файл с текстом "end.""
Можно, конечно, rewrite заменить на append, чтобы добавлять ИМЕННО в конец файла, но какой смысл это делать, если создаваемый файл все равно пустой изначально?
Код: Выделить всё
var f:text;
begin
assign(f,'books.dat');
rewrite(f);
writeln(f,'end');
close(f)
end.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
С чего бы это?Колядин Максим писал(а):.... так как переменная var myfile: tfile не является текстовой, а процедура write(f,...) (var f: text) используется только как запись в типизированный текстовый файл.
Смотрим паскалевский встроенный Help:
Код: Выделить всё
[b]Write (procedure)[/b]
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
For typed files, writes a variable into a file component. For text files,
writes one or more values to the file
Declaration:
Typed files: procedure Write(F, V1 [, V2,...,Vn ] );
Text files: procedure Write( [ var F: Text; ] P1 [,P2,...,Pn ] );
- Колядин Максим
- Сообщения: 297
- Зарегистрирован: 16 ноя 2006, 19:09
- Откуда: Seattle, WA
- Контактная информация:
Хыиуду писал(а):Код: Выделить всё
var f:text][/quote] Ну вот не нравится ей (Justice) такой код! Ей хочется сначала создать [b]type tbook=record tekst:string;[/b], потом [b]tfile=file of tbook;[/b], затем [b]var myfile:tfile;[/b]. [b]Justice[/b], что у тебя за преподователь, который задаёт [b]в конец пустого файла[/b] записать "end", не разрешает использовать функции - только процедуры..?
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
Вместо '?' надо писать переменную того же типа, "чьего типа" объявлен файл. В данном случае - tbook:Justice писал(а):помогите разобраться с задачей: надо создать файл и добавить в конец файла символы end.
................................
вроде все правильно писала, но не знаю что писать там где writeln(myfile, ... )
Код: Выделить всё
uses crt;
type tbook=record
tekst:string;
end;
tfile=file of tbook;
var
myfile:tfile;
newrecord:tbook;
begin
assign(myfile,'book.dat');
rewrite(myfile);
with newrecord do begin
writeln('vvedit tekst'); readln(tekst);
end;
clrscr;
close(myfile);
reset(myfile);
seek (myfile, filesize(myfile));
write (myfile, newrecord);
readln;
end.
Думаю, без seek (myfile, filesize(myfile)); можно обойтись. Все равно файл изначально пустой.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Я так понимаю, что это УЧЕБНАЯ задача. Поэтому и такие "странные" требования. То есть, как я полагаю, цель задачи - не получить практически используемую программу, а освоение определенных возможностей (операторов) языка программирования.Хыиуду писал(а):Думаю, без seek (myfile, filesize(myfile)); можно обойтись. Все равно файл изначально пустой.
Поэтому, раз в условии сказано "добававить в конец", то нужно присутствие оператора, устанавливающего текущий указатель на конец файла.
;-)