Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2014, 16:54   #1
ggod
Пользователь
 
Регистрация: 26.12.2010
Сообщений: 39
Вопрос Файлы в паскале Проблема

Задача ввести в файл(бд) записи о работниках найти (отбор по критерию) кто родился в введенном городе
Проблема: данные сохраняются в файл 1 запись (ок) но после ввода новой записи файл очищается и остается последняя запись в итоге в файле всегда 1 запись
Прошу помочь разобраться как исправить? (нужна реализовать возможность пополнения старой базы данных(файла))
Код:
Program lab2;
Uses crt;
label 10;
type spisok=record
     nomer: string[10];
     fio: string[10];
     dolz: string[10];
     datro: string[10];
     gorro: string[10];
          end;
FT=file of spisok;
Var a:ft;
    z:integer;
    s:real;
     mas: array of spisok;
Procedure Sozd (var a: ft);
Var 
    zk:spisok;
begin

Reset(a);{открываем файл для записи}

          begin
          write ('vvod nomera: ');
          readln (zk.nomer);
          write ('fio: ');
          readln (zk.fio);
          write ('dolznost: ');
          Readln (zk.dolz);
          write ('data rozdenia: ');
          readln (zk.datro);
          writeln ('gorod rozdenia: ');
          readln (zk.gorro);
          write (a,zk);
          writeln ('Запись добавленна ');
          close (a);
          readkey;
          clrscr;
         end;
 
end;
Procedure vyvod (var a: ft);
Var i:integer;
    zk:spisok;
begin
reset (a);
 writeln ('========================================================================');
 writeln ('|Nomer|       Фио      | dоlznost  |  datarozdenia   | gorod rozdenia  |');
 writeln ('========================================================================');
  while not eof(a) do
   begin
     read (a,zk);
    write ('|',zk.nomer:9,'|');
    write ('|',zk.fio:9,'|');
    write ('|',zk.dolz:9,'|');
    write ('|',zk.datro:9,'|');
    writeln ('|',zk.gorro:9,'|');
       end;
close (a);
end;
Procedure poisk (var a:ft);
var i:integer;
    zk:spisok;
    name:string;
begin
reset (a);
 writeln ('Vvedite gorod dlja poiska ');
 readln (name);
 writeln ('spisok s zadannym gorrodom ');
 writeln ('========================================================================');
 writeln ('|Nomer|       Фио      | dоlznost  |  datarozdenia   | gorod rozdenia  |');
 writeln ('========================================================================');
 while not eof(a) do
 begin
  read (a,zk);
  if zk.gorro=name then
  begin
      write ('|',zk.nomer:6,'|');
    write ('|',zk.fio:9,'|');
    write ('|',zk.dolz:6,'|');
    write ('|',zk.datro:9,'|');
    write ('|',zk.gorro:6,'|');
    writeln;
    writeln ('-----------------------------------------------------------------------');
  end;
 end;
close(a);
end;
begin
clrscr;
10:
assign (a,'fffile');
writeln ('       MEHIO      ');
writeln ('1: Sozdanie ');
writeln ('2: Vivod ');
writeln ('3: Poisk ');
writeln ('4: Vixod ');
readln (z);
 case z of
  1: sozd(a);
  2: vyvod (a);
  3: poisk (a);
  4: exit;
  end;
  goto 10;
readln
end.

Последний раз редактировалось Stilet; 19.05.2014 в 17:46.
ggod вне форума Ответить с цитированием
Старый 19.05.2014, 17:00   #2
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
Reset(a);{открываем файл для записи}
Вы открываете для чтения..
Нужно ReWrite..
И да.. Помнится, в паскале есть Append.. но он употребим лишь для Text'овых файлов..
Poma][a вне форума Ответить с цитированием
Старый 19.05.2014, 17:22   #3
ggod
Пользователь
 
Регистрация: 26.12.2010
Сообщений: 39
По умолчанию

Цитата:
Сообщение от Poma][a Посмотреть сообщение
Вы открываете для чтения..
Нужно ReWrite..
И да.. Помнится, в паскале есть Append.. но он употребим лишь для Text'овых файлов..
не все так просто
ReWrite если файл с таким именем уже существует, то он удаляется и на его месте создается новый пустой файл.
Apped для работы с файлами TXT формата
ggod вне форума Ответить с цитированием
Старый 19.05.2014, 19:09   #4
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Передвиньте указатель на конец файла перед записью:
Seek(filesize(f));
Такая программа уже проскакивала. С goto как организация бесконечного цикла.
Человеку исправили и меню и добавление, удаление записей.
Поищите
http://programmersforum.ru/showthread.php?t=260091

У вас этот код по всему институту ходит?
и везде c goto

Последний раз редактировалось ZX Spectrum-128; 19.05.2014 в 20:06.
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 20.05.2014, 13:54   #5
ggod
Пользователь
 
Регистрация: 26.12.2010
Сообщений: 39
По умолчанию

Цитата:
Сообщение от ZX Spectrum-128 Посмотреть сообщение
Передвиньте указатель на конец файла перед записью:
Seek(filesize(f));
Такая программа уже проскакивала. С goto как организация бесконечного цикла.
Человеку исправили и меню и добавление, удаление записей.
Поищите
http://programmersforum.ru/showthread.php?t=260091

У вас этот код по всему институту ходит?
и везде c goto
нашел на форуме прогу и переделал но там для него норм было что не сохраняется добавил только Seek(f,filesize(f));
и теперь вывод не работает чтение после конца потока не возможно ссылаясь на 52 строку read (a,zk);
Код:
Program lab2;
Uses crt;
label 10;
type spisok=record
     nomer: string;
     fio: string;
     dolz: string;
     datro: string;
     gorro: string;
          end;
FT=file;
Var a:ft;
    i,z:integer;
    s:real;
Procedure Sozd (var a: ft);
Var 
    zk:spisok;
begin

reset(a);
          begin
          write ('vvod nomera: ');
          readln (zk.nomer);
          write ('fio: ');
          readln (zk.fio);
          write ('dolznost: ');
          Readln (zk.dolz);
          write ('data rozdenia: ');
          readln (zk.datro);
          write ('gorod rozdenia: ');
          readln (zk.gorro);
          seek(a,filesize(a));
          write (a,zk);
          writeln ('Запись добавленна ');
          readkey;
          clrscr;
         end;
 close (a);
end;
Procedure vyvod (var a: ft);
Var i:integer;
    zk:spisok;
begin
reset (a);

 writeln ('========================================================================');
 writeln ('|Nomer|       Фио      | dоlznost  |  datarozdenia   | gorod rozdenia  |');
 writeln ('========================================================================');
 seek(a,0);
  while not eof(a) do
   begin
    read (a,zk);
    write ('|',zk.nomer:9,'|');
    write ('|',zk.fio:9,'|');
    write ('|',zk.dolz:9,'|');
    write ('|',zk.datro:9,'|');
    writeln ('|',zk.gorro:9,'|');
     end;
   close (a);
   end;
Procedure poisk (var a:ft);
var i:integer;
    zk:spisok;
    name:string;
begin
reset (a);
 writeln ('Vvedite gorod dlja poiska ');
 readln (name);
 writeln ('spisok s zadannym gorrodom ');
 writeln ('========================================================================');
 writeln ('|Nomer|       Фио      | dоlznost  |  datarozdenia   | gorod rozdenia  |');
 writeln ('========================================================================');
 while not eof(a) do
 begin
  read (a,zk);
  if zk.gorro=name then
  begin
      write ('|',zk.nomer:6,'|');
    write ('|',zk.fio:9,'|');
    write ('|',zk.dolz:6,'|');
    write ('|',zk.datro:9,'|');
    write ('|',zk.gorro:6,'|');
    writeln;
    writeln ('-----------------------------------------------------------------------');
  end;
 end;
close(a);
end;
begin
clrscr;
10:
assign (a,'fffile');
writeln ('       MEHIO      ');
writeln ('1: Sozdanie ');
writeln ('2: Vivod ');
writeln ('3: Poisk ');
writeln ('4: Vixod ');
readln (z);
 case z of
  1: sozd(a);
  2: vyvod (a);
  3: poisk (a);
  4: exit;
  end;
  goto 10;
readln
end.


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 20.05.2014 в 14:24.
ggod вне форума Ответить с цитированием
Старый 20.05.2014, 15:48   #6
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Исправлено, работает, проверяйте.
Код:

Program lab2;
Uses crt;
label 10;
type spisok=record
     nomer: string;
     fio: string;
     dolz: string;
     datro: string;
     gorro: string;
          end;
FT=file of spisok;
Var a:ft;
    i,z:integer;
    s:real;
Procedure Sozd (var a: ft);
Var
    zk:spisok;
begin

reset(a);
seek(a,filesize(a)); 
          begin
          write ('vvod nomera: ');
          readln (zk.nomer);
          write ('fio: ');
          readln (zk.fio);
          write ('dolznost: ');
          Readln (zk.dolz);
          write ('data rozdenia: ');
          readln (zk.datro);
          write ('gorod rozdenia: ');
          readln (zk.gorro);
          seek(a,filesize(a));
          write (a,zk);
          writeln ('Запись добавленна ');
          readkey;
          clrscr;
         end;
 close (a);
end;
Procedure vyvod (var a: ft);
Var i:integer;
    zk:spisok;
begin
reset (a);

 writeln ('========================================================================');
 writeln ('|Nomer|       Фио      | dоlznost  |  datarozdenia   | gorod rozdenia  |');
 writeln ('========================================================================');
 seek(a,0);
  while not eof(a) do
   begin
    read (a,zk);
    write ('|',zk.nomer:9,'|');
    write ('|',zk.fio:9,'|');
    write ('|',zk.dolz:9,'|');
    write ('|',zk.datro:9,'|');
    writeln ('|',zk.gorro:9,'|');
     end;
   close (a);
   end;
Procedure poisk (var a:ft);
var i:integer;
    zk:spisok;
    name:string;
begin
reset (a);
 writeln ('Vvedite gorod dlja poiska ');
 readln (name);
 writeln ('spisok s zadannym gorrodom ');
 writeln ('========================================================================');
 writeln ('|Nomer|       Фио      | dоlznost  |  datarozdenia   | gorod rozdenia  |');
 writeln ('========================================================================');
 while not eof(a) do
 begin
  read (a,zk);
  if zk.gorro=name then
  begin
      write ('|',zk.nomer:6,'|');
    write ('|',zk.fio:9,'|');
    write ('|',zk.dolz:6,'|');
    write ('|',zk.datro:9,'|');
    write ('|',zk.gorro:6,'|');
    writeln;
    writeln ('-----------------------------------------------------------------------');
  end;
 end;
close(a);
end;
begin
clrscr;
10:
assign (a,'fffile');
writeln ('       MEHIO      ');
writeln ('1: Sozdanie ');
writeln ('2: Vivod ');
writeln ('3: Poisk ');
writeln ('4: Vixod ');
readln (z);
 case z of
  1: sozd(a);
  2: vyvod (a);
  3: poisk (a);
  4: exit;
  end;
  goto 10;
readln
end.
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 20.05.2014, 16:13   #7
ggod
Пользователь
 
Регистрация: 26.12.2010
Сообщений: 39
По умолчанию

слепой не могу найти исправление
ggod вне форума Ответить с цитированием
Старый 20.05.2014, 16:21   #8
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Ft было file
Исправил на
Ft:file of spisok;
И добавил
Seek(a, filesize(a));
Все вроде
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 20.05.2014, 17:41   #9
ggod
Пользователь
 
Регистрация: 26.12.2010
Сообщений: 39
По умолчанию

Цитата:
Сообщение от ZX Spectrum-128 Посмотреть сообщение
Ft было file
Исправил на
Ft:file of spisok;
И добавил
Seek(a, filesize(a));
Все вроде
c Ft:file он тоже работает))странно
спасибо
ggod вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
файлы в паскале... Екатерина18 Паскаль, Turbo Pascal, PascalABC.NET 5 05.04.2011 23:31
Файлы в Паскале Hichcog Помощь студентам 0 27.11.2010 17:51
Файлы в паскале Ericnex Помощь студентам 0 01.06.2010 18:43
Файлы в Паскале britva666 Помощь студентам 2 21.06.2009 20:28
Файлы в Паскале COLD Помощь студентам 1 07.06.2009 13:49