Помощь - Поиск - Пользователи - Календарь
Полная версия: формирование файла
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
nasekomaya
почему у меня вот эта программа работает:
type tz=record
fio: string[10];
tn:integer;
zp:real
end;
var zap:tz;
fout: file of tz;
fl:boolean;
name:string;
begin
repeat
writeLN('imy faila');
readLN(name);
assign (fout,name);
{$i-} reset(fout); {$i+}
if ioresult=0 then
begin
writeLN('fail uge est');
close(fout);
fl:=false
end
else
begin
rewrite(fout);
fl:=true
end
until fl;
writeLN('vvod');
with zap do
repeat
readLN(input,fio,tn,zp);
write(fout,zap);
until eof(input);
close(fout);
reset(fout);
with zap do
repeat
read(fout,zap);
writeLN(fio:15,tn:9,zp:8:2);
until eof (fout);
close(fout)
end.

т.е. я ввожу по задумке буквенную часть, потом 2 цифровые, потом опять буквы и т.д. в итоге формируется табличка со строками:бквы, цифры, цифры.
а вот эта программа:
type tz=record
fio: string[10];
tn:integer;
zp:string;
end;
var zap:tz;
fout: file of tz;
fl:boolean;
name:string;
begin
repeat
writeLN('imy faila');
readLN(name);
assign (fout,name);
{$i-} reset(fout); {$i+}
if ioresult=0 then
begin
writeLN('fail uge est');
close(fout);
fl:=false
end
else
begin
rewrite(fout);
fl:=true
end
until fl;
writeLN('vvod');
with zap do
repeat
readLN(input,tn,zp,fio);
write(fout,zap);
until eof(input);
close(fout);
reset(fout);
with zap do
repeat
read(fout,zap);
writeLN(tn:5,zp:8,fio:15);
until eof (fout);
close(fout)
end.

не работает, т.е. не получается сделать табличку из 1й цифровой и 2х буквеных частей...
VBproffi
Программу я просмотрю, но может ты опишешь условие задачи?
Так будет немного легче
Altair
nasekomaya, что вы этим хотели сказать?

writeLN('vvod');
with zap do
repeat
readLN(input,fio,tn,zp);
write(fout,zap);
until eof(input);



Когда будет завершен ввод?
я думаю первая программа не работает тоже.


input-стандартная файловая переменная, по умолчанию связанна с консолью, EOF к ней не применим...


продолжим...

repeat
writeLN('imy faila');
readLN(name);
assign (fout,name);
{$i-} reset(fout); {$i+}
if ioresult=0 then begin
writeLN('fail uge est');
close(fout);
fl:=false
end else begin
rewrite(fout);
fl:=true
end
until fl;



Зачем здесь цикл?
Тем более раз вы ве равно файл переписываете в любом случае, достаочносразу его создать по новой,
rewrite(fout);
без всяких циклов..


Смотри... первую программу, я изменил тебе так.
type
tz=record
fio: string[10];
tn:integer;
zp:real
end;

var
zap:tz;
fout: file of tz;
fl:boolean;
name:string;

begin
writeLN('imy faila');
readLN(name);
assign (fout,name);
{$I-} reset(fout);{$I+}
if ioresult<>0 then begin
writeLN('faila net!');
rewrite(Fout);
end;
writeLN('vvod');
repeat
with zap do begin
readln(fio);
if fio<>'' then begin
readln(tn,zp);
write(fout,zap);
end
end
until zap.fio='';
{close(fout);} {<-- !!!}
reset(fout);
repeat
with zap do begin
read(fout,zap);
writeLN(fio:15,tn:9,zp:8:2);
end
until eof (fout);
close(fout)
end.

1. убрал лишние циклы.
2. сделал правильные ввод (ввод заершается когдаFIO вводитсяпустым (то естьпросто нажимаем ENTER)
...
разницы между первой и второй программами я не увидел!
Попробуйте тот код что я дал, и если на нем неполучится ваша задумка, скажите какие входные данные были и какие выхотели плучить...

Цитата
Программу я просмотрю, но может ты опишешь условие задачи?
Так будет немного легче

вот:
Цитата

я ввожу по задумке буквенную часть, потом 2 цифровые, потом опять буквы и т.д. в итоге формируется табличка со строками:бквы, цифры, цифры.
trminator
Oleg_Z
Цитата
nput-стандартная файловая переменная, по умолчанию связанна с консолью, EOF к ней не применим...

Не совсем. Вот тестовая программка, когда надоест вводить строки, нажми Ctrl-Z под Win или Ctrl-D под Lin +)

var s : string;
begin
repeat
readLn(s);
until eof(input);
end.

Altair
не везде прокатывает такое! в BPW не останавливается вводю (использую wincrt)
nasekomaya
Цитата(VBproffi @ 22.06.05 9:07)
Программу я просмотрю, но может ты опишешь условие задачи?
Так будет немного легче

ну условием было введение с клавиатуры информации: табельные номера, фамилии и з\п, в итоге вводимая инфа должна записаться в файл, ну и вывестись на экран ввиде такой вот таблички. Инфа вводится НЕ беспорядочно, т.е. по-очереди для каждого работника вводим фамилию, таб. номар и з\п.

Ну а вообще я уже разобралась - если писать не
readLN(input,fio,tn,zp);
а по очереди
readLN(input,fio);
readLN(input,tn);
readLN(input,tn);


то все получается... не знаю правда почему так...
nasekomaya
Цитата(Oleg_Z @ 22.06.05 9:26)
nasekomaya, что вы этим хотели сказать?

writeLN('vvod');
with zap do
repeat
readLN(input,fio,tn,zp);
write(fout,zap);
until eof(input);

Когда будет завершен ввод?
я думаю первая программа не работает тоже.
input-стандартная файловая переменная, по умолчанию связанна с консолью, EOF к ней не применим...
продолжим...

repeat
  writeLN('imy faila');
  readLN(name);
  assign (fout,name);
  {$i-} reset(fout); {$i+}
  if ioresult=0 then  begin
  writeLN('fail uge est');
  close(fout);
  fl:=false
  end else begin
  rewrite(fout);
  fl:=true
  end
until fl;

Зачем здесь цикл?
Тем более раз вы ве равно файл переписываете в любом случае, достаочносразу его создать по новой,
rewrite(fout);
без всяких циклов..
.........................

про коф инпут: ввод завершается как только я нажимаю контрл+зэт.
про цикл: с помошью этого цикла достигается НЕ записывание чего-либо в уже существующий файл.
Вообще я уже разобралась с этим. (См. ответ выше).
Altair
Цитата
про коф инпут: ввод завершается как только я нажимаю контрл+зэт.

как я уже сказал сработает не везде!
Цитата
про цикл: с помошью этого цикла достигается НЕ записывание чего-либо в уже существующий файл.

да действительно я этот кусок кода не читал особо..
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.