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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.07.2009, 00:22   #31
Doholyan
Форумчанин
 
Регистрация: 26.04.2009
Сообщений: 270
По умолчанию

То есть....число "0" это первая запись....вроде уяснил...спасибо попробую.
А...если, типизированный файл...будет масивом он как будет записываться?
Doholyan вне форума Ответить с цитированием
Старый 30.07.2009, 07:57   #32
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

1. У Вас уже есть переменная stroka:MenR;, пооэтому переменная а не нужна.
2. Номера записей в файле начинаются с ноля, поэтому когда Вы вводите только одну запись, ее индекс=0. Вы запращиваете запись с индексом 1, такой записи нет, программа выдает ошибку.
Вот немного поправил Вашу программу.
Код:
program VVod;
uses crt;{подключите этот модуль с ним лучше работать}
type
      MenR=record
        Name:string;
        Numer:byte;
        tel:byte;
        Pol:Char;
        end;
      Men=file of MenR;

var
      stroka:menR;
      in_f:file of MenR;
      c:char;{переменная для окончания ввода}
      i:byte;{индекс запрашиваемой записи}
      begin
      clrscr;{очищаем экран}
      assign(in_f,'re');
      rewrite(in_f);
      writeln('Vvedite dannye, okonchanie-Esc');
      repeat{как правило мы не знаем сколько будет записей, 
поэтому используем цикл с постусловием, если знаем, то можно for..do}
      write('name ');
      readLn(stroka.name);
      write('Numer ');
      readLn(stroka.Numer);
      write('telefon ');
      readln(stroka.tel);
      write('pol ');
      readLn(stroka.Pol);
      write(in_f,stroka);
      c:=readkey;{после ввода одной записи ожидаем нажатия клавиши, 
если Esc-заканчиваем, иначе-продолжаем}
      until c=#27;
      reset(in_f);{закрывать здесь файл не обязательно}
      repeat{делаем запрос индекса записи с проверкой выхода за пределы файла}
      write('Nomer zapisi i=');
      readln(i);
      if i>filesize(in_f)then writeln('V faile net ',i,' zapisey! Povtorite zapros.');
      until (i<=filesize(in_f))and(i>0);
      reset(in_f);
      seek(In_f,i-1);
      read(in_f,stroka);
      writeln(stroka.name,' ',stroka.numer,' ',stroka.tel,' ',stroka.pol);
{выводим через пробел}
      close(in_f);{в конце обязательно закрыть файл}
readLn;
end.
Насчет массива. Если используется файл прямого доступа, например типизированный, то массивы обычно не используют, так как и так все записи пронумерованы и с файлом можно работать как с массивом. Но приведу пример ввода массива, хоть он тут и не нужен.

Код:
program VVod;
uses crt;
type
      MenR=record
        Name:string;
        Numer:byte;
        tel:byte;
        Pol:Char;
        end;
      Men=file of MenR;

var
      st:array[1..100] of menR;{масив записей}
      in_f:file of MenR;
      a:menR;{переменная для чтения запроса из файла}
      n,i,k:byte;
      begin
      clrscr;
      assign(in_f,'re');
      rewrite(in_f);
      write('Kolichestvo zapisey n=');readln(n);
      for i:=1 to n do
       begin
        writeln('Zapis ',i);
        write('name ');readLn(st[i].name);
        write('Numer ');readLn(st[i].Numer);
        write('telefon ');readln(st[i].tel);
        write('pol ');readLn(st[i].Pol);
        write(in_f,st[i]);
       end;
      reset(in_f);
      repeat
      write('Nomer zapisi k=');
      readln(k);
      if k>n then writeln('V faile net ',k,' zapisey! Povtorite zapros.');
      until k<=n;
      reset(in_f);
      seek(In_f,k-1);
      read(in_f,a);
      writeln(a.name,' ',a.numer,' ',a.tel,' ',a.pol);
      close(in_f);
readLn;
end.
puporev вне форума Ответить с цитированием
Старый 30.07.2009, 14:58   #33
Doholyan
Форумчанин
 
Регистрация: 26.04.2009
Сообщений: 270
По умолчанию

Спасибо!!
Спасибо!!
Doholyan вне форума Ответить с цитированием
Старый 30.07.2009, 14:59   #34
Doholyan
Форумчанин
 
Регистрация: 26.04.2009
Сообщений: 270
По умолчанию

нет....громадное спасибо!!!
Doholyan вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка данных из файла JIK Помощь студентам 4 19.05.2013 12:17
Cортировка типизированного файла по 3м признакам Dremgor Помощь студентам 3 05.06.2009 14:10
загрузка данных из тестового файла gribog БД в Delphi 16 19.07.2007 15:06