Файлы

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

Аватара пользователя
Justice
Сообщения: 4
Зарегистрирован: 11 мар 2007, 16:31
Откуда: Kyiv

16 мар 2007, 23:04

помогите разобраться с задачей: надо создать файл и добавить в конец файла символы 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, ... )
Аватара пользователя
Колядин Максим
Сообщения: 285
Зарегистрирован: 16 ноя 2006, 19:09
Откуда: Seattle, WA
Контактная информация:

17 мар 2007, 01:29

[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.
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
Аватара пользователя
Justice
Сообщения: 4
Зарегистрирован: 11 мар 2007, 16:31
Откуда: Kyiv

17 мар 2007, 12:19

Колядин Максим писал(а): Я бы решил эту задачу так:

Код: Выделить всё

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.
а если все же решать эту задачу с типовым файлом?
Аватара пользователя
Колядин Максим
Сообщения: 285
Зарегистрирован: 16 ноя 2006, 19:09
Откуда: Seattle, WA
Контактная информация:

17 мар 2007, 19:46

Я точно утверждать ничего не буду, но по-моему компилятор всегда будет выдавать ошибку во 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 не устраивает?...
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

19 мар 2007, 10:09

Если я правильно понял, задание можно сформулировать так: "Создать файл с текстом "end.""

Код: Выделить всё

var f:text;
begin
  assign(f,'books.dat');
  rewrite(f);
  writeln(f,'end');
  close(f)
end.
Можно, конечно, rewrite заменить на append, чтобы добавлять ИМЕННО в конец файла, но какой смысл это делать, если создаваемый файл все равно пустой изначально?
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
BBB
Сообщения: 1272
Зарегистрирован: 27 дек 2005, 13:37

19 мар 2007, 10:14

Колядин Максим писал(а):.... так как переменная 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 ] );
Так что, write вполне себе бует писать в типированный файл.
Аватара пользователя
Колядин Максим
Сообщения: 285
Зарегистрирован: 16 ноя 2006, 19:09
Откуда: Seattle, WA
Контактная информация:

19 мар 2007, 17:15

Хыиуду писал(а):

Код: Выделить всё

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", не разрешает использовать функции - только процедуры..?
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
BBB
Сообщения: 1272
Зарегистрирован: 27 дек 2005, 13:37

19 мар 2007, 17:24

Justice писал(а):помогите разобраться с задачей: надо создать файл и добавить в конец файла символы end.
................................
вроде все правильно писала, но не знаю что писать там где writeln(myfile, ... )
Вместо '?' надо писать переменную того же типа, "чьего типа" объявлен файл. В данном случае - tbook:

Код: Выделить всё

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.
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

20 мар 2007, 10:34

Думаю, без seek (myfile, filesize(myfile)); можно обойтись. Все равно файл изначально пустой.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
BBB
Сообщения: 1272
Зарегистрирован: 27 дек 2005, 13:37

20 мар 2007, 10:46

Хыиуду писал(а):Думаю, без seek (myfile, filesize(myfile)); можно обойтись. Все равно файл изначально пустой.
Я так понимаю, что это УЧЕБНАЯ задача. Поэтому и такие "странные" требования. То есть, как я полагаю, цель задачи - не получить практически используемую программу, а освоение определенных возможностей (операторов) языка программирования.
Поэтому, раз в условии сказано "добававить в конец", то нужно присутствие оператора, устанавливающего текущий указатель на конец файла.
;-)
Ответить