Помощь - Поиск - Пользователи - Календарь
Полная версия: Работа с БД
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Feagor
Сведения о ученике состоят из имени, фамилии, названии класса (год обучениия, буква). Дан файл f содержащий данные об учениках этой школы. Пусть в каждой строке через пробел даны сведения о каждом ученике. Выяснить в каких классах больше 35 человек.
то что сделано:
uses crt;
procedure WrRec(s:string; var f,i,k:string; var b:char);
var j,t,code:integer;
s1:string;
begin
for j:=1 to length(s) do
begin
if s[j]=' ' then begin t:=j+1; break; end
else f[j]:=s[j];
end;
for j:=t to length(s) do
begin
if s[j]=' ' then begin t:=j+1; break; end
else i[j-t+1]:=s[j];
end;
for j:=t to length(s) do
begin
if s[j]=' ' then begin t:=j+1; break; end
else k[j-t+1]:=s[j]
end;
b:=s[t];
end;
type pupil=record
fam:string;
ima:string;
klas:string;
bukva:char;
end;
var a:array[1..100] of pupil;
f:text;
i,j:integer;
s:string;
begin
clrscr;
i:=0;
assign(f,'d:\1234.dat');
reset(f);
while not eof(f) do
begin
writeln;
inc(i);
readln(f,s);
writeln(s);
WrRec(s,a[i].fam,a[i].ima,a[i].klas,a[i].bukva);

end;

close(f);
writeln(length(a[1].fam));
readkey;
end.


капитально не врубаюсь почему функция length неработает
writeln(length(a[1].fam));


Добавлено через 1 мин.
в принципе надо разобраться почему не раскладывает по массиву данные, дальше с подсчетом уж как-нить разберусь
klem4
для начала убедись что твоя процедура разбиения строки на отдельные куски работает верно, выглядит она странновато если честно smile.gif Можно сделать намного короче, буквально в несколько строк.
Feagor
2 klem4 ну как умею, я и подозреваю что с ней что-то не то можешь что-то другое предложить, буду рад!
volvo
Feagor, а все данные гарантированно разделены только одним пробелом? Тогда вот тут есть функция get_str, которая выделяет токен по его номеру, при условии, что ВСЕ токены в строке разделены одним символом: Заполнение полей записи из файла
klem4
или то-же, но рекурсивно:
function get_part(s: String; part: Byte): String;
var
p: Byte;
begin
p := pos(' ', s);
p := byte(p = 0) * 255 + p;

if part = 1 then
get_part := copy(s, 1, p - 1)
else
get_part := get_part(copy(s, p + 1, 255), part - 1);
end;

var
s: String = 'Ivanov Petr Petrovich 10 A';

var
i: Byte;

begin
for i := 1 to 5 do writeln(get_part(s, i));
end.
Feagor
спасибо volvo классный метод, не то, что мое извращение lol.gif +1

Добавлено через 1 мин.
обоим +1, спасибо, помогли))) щас доделаю, рабочий исходник выложу...

Добавлено через 3 мин.
извиняюсь, за оффтоп, туплю, но где тут +1 сделать smile.gif у нас просто уже 3 час ночи
klem4
smile.gif Чтобы самому плюсы/минусы ставить, надо иметь > 25 мессаджей на форуме smile.gif Ну или можешь попросить кого-нить из модераторов в ПМ smile.gif volvo от тебя сейчас плюсану smile.gif
volvo
Цитата
volvo от тебя сейчас плюсану
yes2.gif Взаимно...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.