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

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

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

 
 Ответить  Открыть новую тему 
> Процедура поиска, Для задачи на файлы...Помогите=))
сообщение
Сообщение #1





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

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


Слепил прогу.В ней вводятся фамилия,имя,отчество студента,его порядковый номер и всё сохраняется в текстовый файл.Вот только не могу написать процедурку,с помощью которой осуществляется поиск студента по его порядковому номеру...т.е.вводишь номер студента и прога выдаёт те его фам.имя.отч.Помогите плиз.=))Вот сама программа:

uses
SysUtils;

type mas=array[1..100] of string;

var
f,f1:textfile;
txt,way,filename,fullname,fn1,fullname2,filename2:string;
act1:char;
kol:integer;

procedure zapis(fname:string);
var f1:textfile;
surname,name,ochestvo,nomer:string;
begin
assign(f1,fname);
append(f1);
writeln('Enter surname');
readln(surname);
writeln('Enter name');
readln(name);
writeln('Enter ochestvo');
readln(ochestvo);
writeln('Enter nomer');
readln(nomer);
write(f1,surname+' ');
write(f1,name+' ');
write(f1,ochestvo+' ');
writeln(f1,nomer+' ');
close(f1);
end;

procedure sortirovka(fname:string;n:integer);
var f1:textfile;
i,a,j:integer;
t,str:string;
k,f:mas;
begin
i:=1;
assign(f1,fname);
reset(f1);
repeat
readln(f1,str);
k[i]:=str;
f[i]:=str[1];
i:=i+1;
until eof(f1);
close(f1);
for a:=1 to n do
begin
for j:=1 to n-a do
begin
if (f[j]>f[j+1]) then
begin
t:=k[j];
k[j]:=k[j+1];
k[j+1]:=t;
end;
end;
end;
assign(f1,fname);
rewrite(f1);
for i:=1 to n do
writeln(f1,k[i]);
close(f1);
end;

procedure vivod(fname:string);
var f1:textfile;
str:string;
begin
assign(f1,fname);
reset(f1);
repeat
readln(f1,str);
writeln(str);
until eof(f1);
close(f1);
end;

procedure vivod2(fname1,fname2:string);
var f1,f2:textfile;
str,prob:string;
i,o,j,k:integer;
r:mas;
begin
prob:=' ';
o:=1;
k:=1;
assign(f1,fname1);
reset(f1);
repeat
readln(f1,str);
for i:=1 to length(str) do
if str[i]<>' 'then
r[o]:=r[o]+str[i]
else
if str[i+1]<>' ' then
o:=o+1;
until eof(f1);
assign(f2,fname2);
rewrite(f2);
close(f2);
append(f2);
for j:=1 to (o div 4) do
begin
k:=4*j;
write(f2,r[k]);
write(f2,prob);
write(f2,r[K-1]);
write(f2,prob);
write(f2,r[k-2]);
write(f2,prob);
write(f2,r[k-3]);
writeln(f2,prob);
end;
close(f2);
vivod(fname2);
end;
begin
kol:=0;
txt:='.txt';
way:='E:\For files\';
writeln('Vvedite imya faila kuda vi xotite soxranitb vash spisok');
readln(filename);
fullname:=way+filename+txt;
assign(f,fullname);
rewrite(f);
close(f);
repeat
writeln(' "1"-vvod novogo elementa');
writeln;
writeln(' "2"-pokazatb spisok');
writeln;
writeln(' "3"-pokazatb spisok v novom formate');
writeln;
writeln(' "q"-vihod ');
writeln;
write('Viberite deistvie: ');
writeln;
readln(act1);
case act1 of
'1':begin
zapis(fullname);
kol:=kol+1;
end;
'2':begin
sortirovka(fullname,kol);
writeln('Familiya',' ','Imya',' ','Otchestvo',' ','Nomer');
vivod(fullname);
end;
'3':begin
writeln('Enter the name of the file where you want to save your new spisok');
readln(filename2);
fullname2:=way+filename2+txt;
{assign(f1,) }
writeln('Nomer',' ','Familiya',' ','Imya',' ','Otchestvo');
vivod2(fullname,fullname2)
end;
'q':exit;
end;
until false;
end.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

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


Я бы так сделал:
writeln('Введите номер записи');
readln(n_zapisi);
while not eof(f1) do
begin
readLn(f1,surname);
readLn(f1,name);
readLn(f1,ochestvo);
readln(f1,nomer);
if nomer=n_zapisi then
begin
write(surname+' ');
write(,name+' ');
write(ochestvo);
WriteLn;
end;
end;


Единственное, в программе поменять ввод данных. Чтобы избежать парсинга вводимиых данных.
  
writeLn(f1,surname+' ');
writeLn(f1,name+' ');
writeLn(f1,ochestvo+' ');

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 1.12.2020 20:10
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name