Помощь - Поиск - Пользователи - Календарь
Полная версия: Занесение из файла в структуру
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
-ZoLToN-
Задание: Из файла занести в структуру данные о работниках и вывести данные о работниках с максимальной зарплатой.
Вот что я сделал:
Код

uses crt;
const
MaxSize=10;
Type
TDATA=record
name:string[80];
salary:real;
end;
var
  DATA:Array[1..maxsize] of TDATA;
  n,i,readresult:integer;
  maxsalary:real;
  f:text;
Function ReadData(var Rec:TDATA):integer;
Var
  s:string[80];
  p,q:integer;
  salaryS:string[10];
  errorcode:integer;
begin
readln(f,s);
if s='' then begin readdata:=-1; q:=-1; end;
p:=pos('',S);
if p=0 then begin Readdata:=1; q:=1; end
else begin
q:=0;
rec.Name:=copy(S,1,p-1);
salaryS:=copy(s,p+1,length(s)-p+1);
val(salaryS,Rec.Salary,Errorcode);
if errorcode<>0 then readdata:=1 else readdata:=0;
end;
end;



begin


clrscr;
assign(f,'LABA2.txt');
reset(f);
readln(f,n);
for i:=2 to n do begin
readresult:=ReadData(data[i]);
end;
maxsalary:=data[1].salary;
for i:=1 to n do begin
if data[i].salary>maxsalary then maxsalary:=data[i].salary;
end;
writeln('Max salary:',maxsalary,' rur.');
for i:=1 to n do begin
if data[i].salary=maxsalary then
writeln(i,') Familiya: ',data[i].name,'Oklad: ',data[i].salary);
end;
close(f);
readkey;
end.

Файл LABA2.txt вида:
8
Фамилия1 10000
Фамилия2 15000
Фамилия3 9000
Фамилия4 7000
Фамилия5 15000
Фамилия6 10000
Фамилия7 5000
Фамилия8 13000

Проблема в том что программа не может получить данные из файла. Используя режим просмотра стека я выяснил, что файл нормально открывается для чтения, но данные из этого файла не передаются в структуру.
Заранее благодарен за любую помощь или советы! unsure.gif
volvo
У тебя в программе не хватает ОДНОГО пробела !!! smile.gif
Function ReadData(var Rec:TDATA):integer;
...
begin
  readln(f,s);
  if s='' then begin readdata:=-1; q:=-1; end;
  p:=pos(' ',S); { <--- Здесь ошибка !!! }
...
end;


Добавь его, и все будет работать... yes2.gif
Гость
Спасибо огромное за помощь =)
Можно я задам еще несколько вопросов чтобы не плодить топики?:
- Как сделать чтобы выводились например первые 5 знаков? (Например чтобы было не 15000...000Е+04, а 15000).
- На сколько мне известно аски коды заглавных и строчных русских сумволов с а по п различаются на 32(?), а с р по я на 87(?). Какими функциями переводить из аски кодов туда и обратно? Какой промежуток аски кодов русских букв и идут ли они подряд?
- Работают ли в Паскале относительные пути? Мне необходимо следующее:
1. Вводить имя файла без расширения.
2. Формировать путь к файлу.
Т.к. заранее сказано что файл текстовый, то сделать первое понятно как. А вот со вторым возникают некоторые сложности. Можно каким-нибудь способом получить имя текущей папки? Я хочу используя относительные пути( /../ и /./ ) через цикл получать имена папок до того как я наткнусь на корень. И дописывать их с конца в строчную переменную.
volvo
Цитата(Гость @ 8.03.2006 17:42)
- Как сделать чтобы выводились например первые 5 знаков? (Например чтобы было не 15000...000Е+04, а 15000).
Ну, например, так:
writeln(i,') Familiya: ', data[i].name, ' Oklad: ', data[i].salary:0:0);


Цитата(Гость @ 8.03.2006 17:42)
Какими функциями переводить из аски кодов туда и обратно?

FAQ: Модуль для работы со строками
смотри реализацию
Function StrLower(s: String): String;
Function StrUpper(s: String): String;


Цитата(Гость @ 8.03.2006 17:42)
Какой промежуток аски кодов русских букв и идут ли они подряд?
Нет. Между 'п' и 'р' есть разрыв...

Цитата(Гость @ 8.03.2006 17:42)
Можно каким-нибудь способом получить имя текущей папки?
Легко:
Uses Dos;
var
  _Dir: dirstr;
  _Name: namestr;
  _Ext: extstr;
begin
  fsplit(paramstr(0), _Dir, _Name, _Ext);
  writeln(_dir);
end.


Цитата(Гость @ 8.03.2006 17:42)
Я хочу используя относительные пути( /../ и /./ ) через цикл получать имена папок до того как я наткнусь на корень. И дописывать их с конца в строчную переменную.
Ты расскажи, ДЛЯ ЧЕГО это тебе понадобилось? Вообще-то есть и ChDir тоже, в принципе должно работать, но может быть есть более красивый способ, для этого надо знать цель...
Гость
Спасибо за помощь. Для меня это имеет прямую практическую ценность. Меня из инста отчислят если я не сделаю все лабы yes2.gif Это будет не прикладная программа.
Программа должна выполнять следующие функции:
1. Вводить имя файла без расширения.
2. Формировать путь к файлу.
3. Проверять правильность открытия файла
4. Читать данные из текстового файла.
5. Проверять прочитанные данные и исправлять ошибки в них.
6. Записывать исправленные данные в новый файл.
7. Выводить на экран информацию:
• о разработчике программы;
• задание на лабораторную работу;
• запрос на ввод имени файла;
• исправленные данные.
Программа нужна для обучения основам работы со списками и файлами. =))
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.