Kontrola pismen v txt souboru – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Kontrola pismen v txt souboru – Pascal – Fórum – Programujte.comKontrola pismen v txt souboru – Pascal – Fórum – Programujte.com

 

Marlog
~ Anonymní uživatel
11 příspěvků
12. 11. 2008   #1
-
0
-

caute profici,
mam na vas takovy primitivni odtaz:
potrebuji udelat podprogram na kontrolu písmen v txt souboru. Potrebuji, aby neprosly znaky jine nez jsou #65 (A) az #90 (Z) a #32 (mezera), cili pokud se bude v txt souboru nachazet znak a -> true, ! ->true, mezera -> false, M -> false.
napsal jsem tohle, ale nejak to nejede korektne (hlavne mi to neveme, kdyz je 1. radek prazdny a potom pokud dojede na konec radku, tak ho neprepise na dalsi)

function VelkeMale(jms:string):boolean;

var radek,zns:string;
zn:char;
vm:boolean;
i:word;
begin
assign(jls,jms);
reset(jls);
VM:=false;
while not eof(jls) or not VM do begin
readln(jls,radek);
i:=1;
while not eoln(jls) or not VM do begin
znS:=copy(radek,i,1);
if ((ZnS>='A') and (ZnS<='Z')) or (ZnS=' ') then
i:=i+1
else
VM:=true
end
end;
velkemale:=VM;
close(jls)
end; {VelkeMale}

Nahlásit jako SPAM
IP: 212.111.4.–
KIIV
~ Moderátor
+43
God of flame
12. 11. 2008   #2
-
0
-

naprosto nechapu o co se sakra v tom programu snazis...
rozepis kazdej prikaz co ma delat

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Marlog
~ Anonymní uživatel
11 příspěvků
12. 11. 2008   #3
-
0
-

KIIV napsal:
naprosto nechapu o co se sakra v tom programu snazis...
rozepis kazdej prikaz co ma delat


:smile11:
vazne prikaz po prikazu?
.
.
.
pokud neni konec souboru nebo je VM false tak provadej
nacti radek
i prirad 1
pokud neni konec radku nebo je VM false tak provadej
znakS prirad znak z radku
jestlize je znakS >=A a soucasne znakS <=Z, nebo znakS= mezera tak
posun i o jeden
nebo
v radku se nachazi nepovoleny znak (VM:=true)
.
.
.

Nahlásit jako SPAM
IP: 212.111.4.–
KIIV
~ Moderátor
+43
God of flame
12. 11. 2008   #4
-
0
-

dobre zkusim ted jak to vidim ja:

while not eof(jls) or not VM do begin

readln(jls,radek); // nactes radek ze souboru

i:=1;

while not eoln(jls) or not VM do begin // z nejakeho duvodu testujes jestli neni konec radku v souboru ze ktereho uz nic nenacitas nebo VM

znS:=copy(radek,i,1); // kopirujes jeden znak z retezce radku ktery si nacetl mimo tento cyklus
// mimochodem staci radek[i] a mas to same
// delka retezce radek je v radek[0] neni tudiz treba pocitat delku ... natoz testovat konec radku v souboru ze ktereho
// tady vubec nic nenacitas

if ((ZnS>='A') and (ZnS<='Z')) or (ZnS=' ') then

i:=i+1

else

VM:=true

end

end;

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Marlog
~ Anonymní uživatel
11 příspěvků
12. 11. 2008   #5
-
0
-

KIIV napsal:
znS:=copy(radek,i,1); // kopirujes jeden znak z retezce radku ktery si nacetl mimo tento cyklus
// mimochodem staci radek[i] a mas to same


takze zns:=radek[i] ?

mel jsem jeste nekolik verzi
while (radek<>'') or not VM do begin
znS:=copy(radek,1,1);
delete(radek,1,1);
if ((ZnS>='A') and (ZnS<='Z')) or (ZnS=' ') then

ale taky mi to nejelo. jak by jsi to ted upravil? (nejak jednoduse pls)

Nahlásit jako SPAM
IP: 212.111.4.–
KIIV
~ Moderátor
+43
God of flame
12. 11. 2008   #6
-
0
-

while not(eof(jls)) and not(VM) do begin
readln(jls, radek);
for i:=1 to radek[0] do begin
if not ( ((radek[i]>='A') and (radek[i]<='Z')) or (radek[i]=' ') ) then begin
VM:=true;
i:=radek[0]+1; (* ukonceni cyklu... mel by jit i neco jako break nebo podobne *)
end;
end;
end;


jo mozna na to radek[0] bude potreba ord(radek[0]) ... pamatuju si ze sem to delal nekdy davno v assembleru ale pascal to muze brat jako znak a nenecha to jen tak

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Laaca0
Stálý člen
12. 11. 2008   #7
-
0
-

Funkce se dá dobře zjednodušit a zpřehlednit:

function VelkeMale(jms:string):boolean;

var radek:string;
jls:text;
i:word;
begin
assign(jls,jms);
reset(jls);
while not eof(jls) do
begin
readln(jls,radek);
for i:=1 to Length(radek) do
if not (radek[i] in ['A'..'Z',' ']) then
begin
VelkeMale:=true;
Close(jls);
Exit;
end;
end;
close(jls);
VelkeMale:=false;
end; {VelkeMale}

Nahlásit jako SPAM
IP: 81.0.253.–
DOS-u-akbar
Marlog
~ Anonymní uživatel
11 příspěvků
13. 11. 2008   #8
-
0
-

to KIIV: krasne napsane, ale mel bychpar dotazu ten radek[0] je to same jako length(radek)? protoze mi to nejak nechce vzit pise mi to type mismatch. kdyz t oale nahradim length(radek), tak to jede.
ale zaznamenal jsem problem a to sice, ze mi ten cyklsd for cykluje do nekonecna, pokud to najde v retezci male pismeno (nejak to nemuze vyskocit ven pomoci i:=length(radek)+1;).

to Laaca: tva verze je skvela dekuji !! :smile2:

Nahlásit jako SPAM
IP: 212.111.4.–
KIIV
~ Moderátor
+43
God of flame
13. 11. 2008   #9
-
0
-

no jeste sem tam psal poznamku o tom ze pascal neni tak benevolentni jako C a znak bere jako znak a ne jako cislo (ikdyz formalne to cislo je) no a samozrejme prevod znaku na cislo umi funkce ord()
takze bud length(radek) nebo ord(radek[0]) ale tezko rict co je rychlejsi

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Marlog
~ Anonymní uživatel
11 příspěvků
13. 11. 2008   #10
-
0
-

KIIV napsal:
no jeste sem tam psal poznamku o tom ze pascal neni tak benevolentni jako C a znak bere jako znak a ne jako cislo (ikdyz formalne to cislo je) no a samozrejme prevod znaku na cislo umi funkce ord()
takze bud length(radek) nebo ord(radek[0]) ale tezko rict co je rychlejsi


aha diky moc za pomoc obema !! uz to beha :smile2:

Nahlásit jako SPAM
IP: 212.111.4.–
evandar0
Newbie
24. 12. 2008   #11
-
0
-

To KIIV : Myslim ze prevod znaku ktory je vlastne cislo, na cislo, sa cez ord len tak lahko neda.. ord ti len vyhodi ordinalnu hodnotu z ASCII tabulky.. Ak chces string pripadne char ktory formalne obsahuje cislo skutocne pretvorit na nejaky numericky typ ktory ma obsahovat ciselnu hodnotu, pouziva sa funkcia VAL. Syntax by mala byt "val(a:string/char,n:integer)" a znamena to asi tolko ze "string alebo pismeno "a" pretvor na cislo a toto cislo vloz do premennej "n" ".

Nahlásit jako SPAM
IP: 87.197.180.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 16 hostů

Podobná vlákna

Export do txt souboru — založil matouch

Výpis souboru do txt — založil Odin

Přepsání txt souboru — založil Ramisha

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý