Работа с файлом на Паскале

Ответить
assis2007
Сообщения: 79
Зарегистрирован: 04 ноя 2007, 19:17

Смысл задачи прост имеется файл в котором в каждой строке находится фамилия имя отчество. Нужно из файла текстового перенести всех людей в массив записей.
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Считать строку. Разбить на слова (раздел "Алгоритмы"). Запихать результат в запись. Запихать запись в массив.
Повторять до конца файла.
Что непонятно? подобные вещи описаны в любом учебнике.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
assis2007
Сообщения: 79
Зарегистрирован: 04 ноя 2007, 19:17

меня не получается сделать переборам по строкам файла. Что я делаю не так:

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

 write('vvedite ima faila*: ');
 readln(ST);
 assign(F1,ST);
 {$I-}
 reset(F1);
 {$I+}
 if ioresult<>0 then
  begin
   halt;
   close(f1);
  end
 else
  begin
   k:=0;
   while not eof(F1) do
    begin
     readln(F1,str);
     while (k<=50) doa
       begin
        k:=k+1;
        stu[k].FIO1.FAM:=copy(str,1,20);
        stu[k].FIO1.IM:=copy(str,22,20);
        stu[k].FIO1.OT:=copy(str,44,20);
        stu[k].OC1:=(ord (str[66]) - ord('0'));
        stu[k].OC2:=(ord (str[68]) - ord('0'));
        stu[k].OC3:=(ord (str[70]) - ord('0'));
        stu[k].POL:=copy(str,72,1);
       end;
    end;
  end;
UPD:

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

type
 FIO=record
         FAM:string[20];
         IM: string[20];
         OT: string[20];
       end;
   Stud=record
         FIO1: FIO;
         OC1, OC2, OC3: integer;
         POL: string[5];
        end;
var
 stu:array[1..50] of stud;
это то что вверху у меня

UPD:

я не стал полностью приводить все описываемые переменные

UPD:

всё разобрался тему можно закрыть
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Все-таки, условие цикла надо писать:
while (k<50) do
а не:
while (k<=50) do

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

if ioresult<>0 then
  begin
   halt;
   close(f1);
  end
Оператор close(f1);, стоящий после halt; бессмысленен, так как никогда не будет выполняться. Хотя вызов close(f1); для неоткрытого файла (а файл не был открыт, так как ioresult<>0) является ошибкой.
Ответить