IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Работа с БД, прошу помощи
Feagor
сообщение 23.12.2007 20:31
Сообщение #1


ыыыыщщщщщщыыыы
**

Группа: Пользователи
Сообщений: 68
Пол: Мужской
Реальное имя: Иван

Репутация: -  0  +


Сведения о ученике состоят из имени, фамилии, названии класса (год обучениия, буква). Дан файл 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 мин.
в принципе надо разобраться почему не раскладывает по массиву данные, дальше с подсчетом уж как-нить разберусь


--------------------
Никогда не задавайте вопрос, если не уверены, что хотите получить ответ...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 23.12.2007 21:09
Сообщение #2


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


для начала убедись что твоя процедура разбиения строки на отдельные куски работает верно, выглядит она странновато если честно smile.gif Можно сделать намного короче, буквально в несколько строк.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Feagor
сообщение 23.12.2007 21:23
Сообщение #3


ыыыыщщщщщщыыыы
**

Группа: Пользователи
Сообщений: 68
Пол: Мужской
Реальное имя: Иван

Репутация: -  0  +


2 klem4 ну как умею, я и подозреваю что с ней что-то не то можешь что-то другое предложить, буду рад!


--------------------
Никогда не задавайте вопрос, если не уверены, что хотите получить ответ...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 23.12.2007 21:28
Сообщение #4


Гость






Feagor, а все данные гарантированно разделены только одним пробелом? Тогда вот тут есть функция get_str, которая выделяет токен по его номеру, при условии, что ВСЕ токены в строке разделены одним символом: Заполнение полей записи из файла
 К началу страницы 
+ Ответить 
klem4
сообщение 23.12.2007 21:41
Сообщение #5


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


или то-же, но рекурсивно:
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.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Feagor
сообщение 23.12.2007 21:50
Сообщение #6


ыыыыщщщщщщыыыы
**

Группа: Пользователи
Сообщений: 68
Пол: Мужской
Реальное имя: Иван

Репутация: -  0  +


спасибо volvo классный метод, не то, что мое извращение lol.gif +1

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

Добавлено через 3 мин.
извиняюсь, за оффтоп, туплю, но где тут +1 сделать smile.gif у нас просто уже 3 час ночи


--------------------
Никогда не задавайте вопрос, если не уверены, что хотите получить ответ...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 23.12.2007 21:57
Сообщение #7


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


smile.gif Чтобы самому плюсы/минусы ставить, надо иметь > 25 мессаджей на форуме smile.gif Ну или можешь попросить кого-нить из модераторов в ПМ smile.gif volvo от тебя сейчас плюсану smile.gif


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 23.12.2007 22:35
Сообщение #8


Гость






Цитата
volvo от тебя сейчас плюсану
yes2.gif Взаимно...
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 27.04.2024 7:28
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"