Zdravim,
mam txt-subor, kde mam v 1 riadku nasledujuce udaje: priezvisko, meno a sumu (t.j. cislo).
V programe to ma by tak, ze zadam priezvisko a ono v subore vyhlada mnou zadane priezvisko a k nemu zobrazi i prislusnu sumu. Ako mam riadok v subore rozdelit na tri casti prizvisko, meno a suma? Dakujem za pomoc.
Fórum › Pascal
Subor
kazdy radek je string a v tom musis:
-najit prijmeni, pokud tam neni jdes na dalsi
-najit delici znak mezi jmenem a cislem, zapamatovat si misto a od toho to ustrihnout/zkopirovat
-zkopirovane vypsat/ulozit/cokoli
staci ti na to tyto funkce a procedury, vice na http://www.templetons.com/brad/alice/language/language8.html
Length(str)
This function returns the length of the string argument in characters. For a string constant, this is the number of characters in the constant. For a string variable, it is the number of characters currently stored in the variable.
function Pos(Substr: String; S: String): Byte; najde jestli se v stringu nachazi jiny string a vrati misto, pokud tam neni tak vrati 0.
SubStr(str1,N,position,str2);
This procedure obtains a copy of part of str1. N is the length of the substring and position is the subscript where the substring starts. The substring that is obtained is copied into str2.
Copy(str, pos, num)
This function returns a substring of the string variable str of length num starting at position pos. It returns the null string (i.e. a string of length zero) if pos is greater than the length of the string.
substr je to same jako copy, jenom je to procedura a copy funkce, pouzij podle nalady.
Jeste doplnim, ze s retezcem (datovym typem String) se da pracovat jako s polem znaku (array[1..length(retezec)] of char), tj. prochazet pomoci cyklu, prohlizet si ho pismenko po pismenku a hledat mezery, carky atd.
A z textoveho souboru se da nacitat prikazem Readln.
Moje stránka.
To Krychlik :
Dakujem za navod. Avsak funkcia "pos" mi akosi nefunguje:
Zacal som robit len to odtrhnutie casti retazca:
procedure jeden;
var f:text;
riadok:string;
i:integer;
begin
assign(f,'h:\LZ\ziaci.txt');
reset(f);
read(f,riadok);
if riadok=' ' then i:=Pos(' ',riadok);
writeln(i);
end;
Vypise cislo -29948, co je hlupost, lebo v prvom riadku sa v txt subore medzera nachadza na 8. mieste
To Krychlik : Jen se zeptam, pascal uz pomalu zapominam, ale pokud budu predpokladat format souboru prijmeni jmeno cislo, kde prijmeni a jmeno jsou retezce bez mezer, tak by mozna bylo jednodussi nacist to proste najednou ne?
const FileName = '.\\zaci.txt';
type TOsoba = record
prijmeni:string;
jmeno:string;
suma:integer;
end;
var f:Text;
zak:TOsoba;
begin
assign(f,FileName);
reset(f);
Readln(f, zak.prijmeni, zak.jmeno, zak.suma); {neco takoveho by mohlo myslim fungovat ne?}
close(f);
end;
To anonym: Takhle ti asi neporadim, zkus si vypsat i promennou riadok, tipuju ze tam bude pouze prijmeni bez mezery....Pokud tomu tak bude, tak zkus pouzit ten kod co jsem napsal.... Takhle tezko rict....
To Anonymní uživatel : dej i jako byte protoze pos vrati byte.
a if riadok=' ' je blbost, ptas se jestli ten cely radek je mezera a on neni nikdy.
Musis se zaptat jestli misto kde obsahuje ' ' je ruzne od nuly a pak podle toho jednat.
To joudicek : nejspis to pujde, ale ted se ucim na maturitu a neni cas doma instalovat nejakej packal editor na overeni.
To joudicek : Určite to nepôjde lebo do stringu zak.prijmeni sa načíta 255 znakov čiže celý riadok aj s menom a sumou. Myslím že si predpokladal že sa to načíta len po medzeru ale nie je tomu tak. Musíš tam načítať celý riadok znakov a ten si potom rozdeliť podla toho ako potrebuješ.
Uz mi funguje ta funkcia Pos. Spravne mi vypisuje pri 1. riadku cislo 8.
Teraz vsak chcem pouzit toto: SubStr(str1,N,position,str2);
vypisuje Unknown indentifier. Dokonca som skusal aj Turbo Pascal
Mam to zatial takto:
procedure jeden;
var f:text;
riadok,meno:string;
i:integer;
begin
assign(f,'h:\LZ\ziaci.txt');
reset(f);
readln(f,riadok);
i:=Pos(' ',riadok);
Substr(riadok,0,i,meno);
writeln(meno);
close(f);
end;
Mam dojem, ze v Pascalu nic, co by se jmenovalo Substr, neexistuje. Podivej se, kde pri te chybe skoncil kurzor - jestli na Substr, tak mam pravdu a proste misto toho pouzij Copy.
To raddino : Ne, cisla se v apostrofech urcite nepisou. To by pak nebylo cislo, ale retezec obsahujici cislice.
Moje stránka.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Subor .htaccess — založil tomas
Subor na email — založil AnonImouS
Nový súbor scripty — založil Gajdošík Tomáš
Vlastny hlavickovy subor — založil Zajcev
Moderátoři diskuze