Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача по файлам 2.0
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Eskel
type Person = record Name : string [10]; age : 1..200 end; List = file of person; Процедура Youngest(var spisok : list) Вашей программы печатает Name для всех людей файла spisok , возраст которых равен минимальному. Перед списком печатается этот возраст.

=>Не подскажите, как создать и забить запись в файл. Создать то я понял как, а с файлом не очень...
=> И как потом считать эту запись с файла на проверку возраста?
Ozzя
Цитата
забить запись в файл.

var
q: Person;
...
write(list,q);
...
Lapp
Ozzя предельно немногословен.. smile.gif
type
tAge=1..200;
tPerson=record
Name: string[10];
Age: tAge;
end;

var
q: tPerson;
f: file of tPerson;
...
Assign(f,'spisok');
ReWrite(f);
...
write(f,q);
...
Close(f);
...
ReSet(f);
MinAge:=High(tAge);
while not EoF(f) do begin
Read(f,q);
if q.Age<MinAge then MinAge:=q.Age;
end
ReSet(f);
WriteLn(MinAge);
while not EoF(f) do begin
Read(f,q);
if q.Age=MinAge then WriteLn(q.Name);
end
...

[/quote]
Eskel
спасибо, разобрался smile.gif
Гость
А можно с текстового файла в котром имена и даті, взять человека которій имеет определённую дату? тоисть надо взять даті и с ними работать. тхт файл уже есть. интересуєт возожно ли такое.
Гость
вот типа написал, но что-то не то...


uses crt;
const n=10;
type stud=record
soname:string[15];
year,month:integer
end;
var F:text; St: string[35];
c:stud;
begin clrscr;
assign(F, 'example.txt');
reset(F);
while not eof(F) do begin
readln(F, c.soname);
writeln(c.soname);
end;
readln(F);

while not eof(f) do
with c do
begin
readln(f, c.month);
if c.month=3 then
writeln(c.soname:10, c.year:6);
end;

writeln;
writeln('vivod s faila okon4en. to exit pres - Enter.');
readln;
end.

Lapp
Цитата(Гость @ 3.01.2009 0:25) *
вот типа написал, но что-то не то...
Да, явно не то. Второй цикп даже не начнется, так как EoF уже достигнуто.

Можно, конечно. Но нужно знать, как устроен этот текстовый файл. Приведи пример.
Гость
в задании про файл больше ничего не сказано, но я его делал так

Цитата

Yurko 81 1
Pavlo 82 2
Sergey 83 3
Sashko 84 4
Гость
вобщем интересует часть віделенная жирнім. Пишет "Неверный числовой формат" не пойму почему... mega_chok.gif
Цитата

uses crt;
const n=10;
type stud=record
soname:string[15];
year,month:integer
end;
var F:text; St: string[35];
c:stud;
begin clrscr;
assign(F, 'example.txt');
reset(F);
while not eof(F) do begin
readln(F, c.soname);
writeln(c.soname);
end;
readln(F);
close(f);

assign(F, 'example.txt');
reset(F);
while not eof(f) do
begin
readln(f, c.month);
if c.month=3 then
writeln(c.soname:10, c.year:6);
end;


writeln;
writeln('vivod s faila okon4en. to exit pres - Enter.');
readln;
end.


Lapp
Цитата(Гость @ 3.01.2009 1:37) *
Пишет "Неверный числовой формат" не пойму почему...
Предельно ясно, почему smile.gif. Ты открываешь файл заново и считываешь фамилию как число.
Нужно все делать в одном цикле.
while not eof(F) do with c do begin
readln(F, soname, year, month);
writeln(soname);
end;

А когда ищешь:
while not eof(F) do with c do begin
readln(F, soname, year, month);
if month=3 then writeln('Found: ', soname:10, year:6);
end;


М
Для программ используй теги CODE, а не цитаты.



PS
фамилия - это surname
Гость
YAHOOO !!!!! Всё заработало!!! Спасиба что показали мне мои ошибки.
Гость
 
type stud=record
surname:string[15];
year,month,day:integer;
x:string
end;
var F:text;
c:stud;
begin clrscr;
assign(F, 'example.txt');
reset(F);
while not eof(F) do with c do begin
readln(F, surname, year, month, day, x);
writeln(surname, x);
end;
close(f);


Всё ж правильно, но последнюю переменную "х" не видит.
Или віьбивает ошибку 106 (не числовой формат), или просто не віьводит! Что не так? Подскажите пожалуйста...
Lapp
Цитата(Гость @ 7.01.2009 1:50) *
Всё ж правильно,
- увы, нет sad.gif.
Мой недогляд. Нельзя смешивать в одном списке оператора Read (ReadLn) строки и числа. Единственное исключение из этого правила - когда строковая переменная последняя. Если же строковая переменная стоит, скажем, первой, то в нее считывается вся строка из файла. И это естественно - пробел является разделителем чисел, но не строк. Строка должна заканчиваться концом строки (извини за тавтологию smile.gif).
Поэтому нужно:
1. переделать чтение - вместо одного чтения сделать два:
ReadLn(F, surname);
ReadLn(F, year, month, day, x);

2. переделать формат файла данных:
Иванов
1234 5 25 дворник
Петрова Дуня
2345 6 31 неплохо поет и танцует

Но на мой взгляд лучше все же переменную x тоже в отдельную строку вынести (добавив, соответственно, еще один ReadLn)

И это само по себе правильно и хорошо, так как исчезает проблема пробелов в строках - теперь можно в поле surname вводить несколько слов. Но если ты захочешь добавить, скажем, имя и отчество - снова развести их на разных строках и добавь ReadLn'ы.

Еще раз извиняюсь за дезу..
Гость
я в файле данніьх пробовал каждую переменную с новой строчки писать, и не получалось. Ладно, сейчас буду пробовать как тіь написал. Спасибо за подсказку. smile.gif



М
Лень загружаться или пароль забыл? Если не создает угрозу личной безопасности, то лучше все же заходить по-человечески. Уважай тех, кто с тобой говорит.
Lapp

Гость
Я всё понял. Всё получаеться теперь))) Ещё раз спасибо)
Юрко
Лень біьло регестрироваться. Вот, я здесь теперь. Совисть заиграла.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.