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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2010, 23:20   #1
xakkkkker
Форумчанин
 
Аватар для xakkkkker
 
Регистрация: 15.12.2007
Сообщений: 226
По умолчанию База даных

Такая задача была.
Есть файл А1.txt содержащий телефонную базу.
Каждая запись имеет поля фамилия, год установки телефона, номер телефона.
Написать программу выдающую следующую информацию.
1. По ведимой фамилии выдаеться номер абонента.
2. По году выводятся абоненты зарегестрировавшие позднее веденного года.
Код:
Program ZADANIE3;
 type 
  TBAZA = record
    SurName:String[30];
    GOD:integer;
    Tel:integer;
  end;
 var
  knopka:char;

 
  Procedure POISK_SurName;
  var
   F:TEXT;
   SurName:String;
   BAZA:TBAZA;
  begin
   Assign(F,'A1.txt');
   Reset(F);
   Writeln('Vedite SurName');
   Readln(SurName);
    While not eof(f) do
	 begin
	  Read(F,BAZA.SurName); Read(F,BAZA.GOD); Read(F,BAZA.Tel); 
	   If  BAZA.SurName=SurName then
	    Writeln(BAZA.SurName,'  ',BAZA.GOD,'  ',BAZA.Tel);
	 end;
	 Close(F);
   end;
   
   Procedure POISK_GOD;
  var
   F:TEXT;
   GOD:integer;
   BAZA:TBAZA;
  begin
   Assign(F,'A1.txt');
   Reset(F);
   Writeln('Vedite GOD');
   Readln(GOD);
    While not eof(f) do
	 begin
	  Read(F,BAZA.SurName); Read(F,BAZA.GOD); Read(F,BAZA.Tel);
	   If BAZA.GOD>GOD then	   
	    Writeln(BAZA.SurName,'  ',BAZA.GOD,'  ',BAZA.Tel);
	 end;
	 Close(F);
   end;
  begin
   Writeln('Dlya poiska po SurName najmite "F"');
   Writeln ('Dlya poiska GODA najmite "G"');
   Readln(knopka);
   Case knopka of
    'F','f': POISK_SurName;
	'G','g': POISK_GOD;
   end;
   
 end.
Вот написал программу. Но она выдает ошибку при чтении из файла.
xakkkkker вне форума Ответить с цитированием
Старый 16.04.2010, 00:05   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

xakkkkker, сразу замечание.
в исходном задании дан текстовый файл (A1.txt) или — типизированный?!

2) номер телефона в виде integer - это не совсем корректно... в 99% больше подойдёт текстовое поле, состоящее из цифр.

3) по сути вопроса (ошибка при чтении).
файл текстовый должен СТРОГО соответствовать тому, что Вы пытаетесь из него прочитать!
первые 30 символов в строке - фамилия, потом два числа.
если не так, либо получите мусор, либо ошибку чтения,
плюс надо добавить переход на новую строку.
так:
Код:
  while not eof(f) do
  begin
    Read(F, BAZA.SurName);
    Read(F, BAZA.GOD);
    Read(F, BAZA.Tel);
    Readln(F);
    if BAZA.GOD > GOD then
      Writeln(BAZA.SurName, '  ', BAZA.GOD, '  ', BAZA.Tel);
  end;
  Close(F);
ну и прилагаю пример "правильного" (c точки зрения Вашей программы) txt файла....
Вложения
Тип файла: rar A1_txt.rar (119 байт, 12 просмотров)
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Небольшая база в Open Office База данных. sashaman Фриланс 3 11.04.2010 20:13
Делфи база данЫх Turpppp Помощь студентам 1 29.11.2009 11:10
База даных Access xakkkkker БД в Delphi 6 31.03.2008 16:47
Не работает база даных Snake_ua БД в Delphi 9 08.12.2007 07:42
Праблеми с дабавление даных. marcho10 БД в Delphi 2 10.07.2007 13:10