Pascal: szövegfelbontásra (string, szóközök mentén) van valami egyszerűbb-praktikusabb mód? (bővebben lent)
Olyan megoldás van, ami az általam írtnál praktikusabban működik, figyel arra is, ha pl. adott sor szóközzel kezdődik, üres sorokat nem tesz be?
Az általam írt esetén utolsó szó kimarad, pedig a hátultesztelős ciklus miatt le kellene hogy fussson.
Fájlból szeretnék szöveget beolvasni és a szóközök mentén kinyerni a szavaka, amiket string tömbbe szeretnék tenni.
A tömbbe helyezést meg tudom csinálni, nem azért maradt ki mintha nem tudnám, nekem a legnagyobb kihívás inkább csak a "hibamentes felbontás".
program felbontas;
var
f : text;
s, s2 : string;
poz : byte;
begin
assign(f,'probalkozas');
reset(f);
while not eof (f) do
begin
ReadLn(f, s);
if length (s) > 0 then
begin
repeat
poz:=pos(' ',s);
s2 := copy(s, 1, poz);
delete(s, 1, poz);
WriteLn(s2);
until poz = 0;
end;
end;
close(f);
end.
Egyébként vannak erre beépített függvények is:
bár gyanítom a kérdező kezdő, és gyakorlófeladatokat végez...
Na, pontosan erről beszélek. :D :D :D
Mutatom C#-ban:
var splitted = str.Split(' ');
:D :D :D
Egy kísérlet SysUtils unit nélkül (hogy mér' jó, azt nem tudom, esetleg érdekesség...):
program felbontas;
var
f : text;
sor, szo : string;
i : byte;
begin
assign(f,'probalkozas');
reset(f);
while not eof (f) do
begin
ReadLn(f, sor);
szo := '';
for i := 1 to Length(sor) do
if sor[i] <> ' ' then
szo := szo + sor[i]
else
begin
if (i > 1) and (sor[i-1] <> ' ') then WriteLn(szo);
szo := '';
end;
if szo > '' then WriteLn(szo);
end;
close(f);
end.
Az egyszerűség kedvéért csak a szóközökkel foglalkozik, egyéb fehérkarakterekkel nem. Egyébként meg nincs istenigazából tesztelve, lehet, hogy SimkoL rögtön kiszúr benne valami disznóságot.
'if (i > 1) and (sor[i-1] <> ' ') then WriteLn(szo);' ???? 'Számlálós ciklust' indítunk tehát csak akkor inditjuk el ha tudjuk, hogy legalább egyszer lefut.
if Length(sor) > 0 then
szo := '';
for i := 1 to Length(sor) do
...
A 'szo' kiíratásnál elég megvizsgálni, hogy hosszabb-e 0-nál: if Length(szo) > 0 then WriteLn(szo);
if Length(sor) > 0 then
szo := '';
for i := 1 to Length(sor) do
if not (sor[i] in [#0..#32]) then szo := szo + sor[i]
else
begin
if Length(szo) > 0 then WriteLn(szo);
szo := '';
end;
if szo > '' then WriteLn(szo);
Én valahogy így gondoltam volna el.
Off: és disznóság, hogy az Assign, Reset, Eof, Close kisbetűvel van kezdve :)
Nem beszéltünk még ez éven, remélem jól kezdődött 2017. Boldog(abb) Új Évet kívánok neked.
"Off: és disznóság, hogy az Assign, Reset, Eof, Close kisbetűvel van kezdve"
Free Pascal Coding Style Guide (ami ugyebár csak ajánlás, nem köbe vésett szabvány - hasonlóan a Python PEP8-hoz - [link] ) szerint nem ír elő nagy kezdőbetűs írásmódot:
"Write all keywords in lower case. There is no need to make them unreadble by writing them in upper case. Modern IDEs support syntax highlighting, so keywords will be easily recognizable."
Forrás: [link]
A szabvány sem ír elő ilyesmit:
"The spelling of an identifier shall be composed from all its constituent characters taken in textual order, without regard for the case of letters ."
Forrás: ISO 7185:1990 ( [link] )
A Delphi-t kiadó Embarcadero például a kulcsszavaknál kisbetűket javasol, más esetekben - pár kivételtől eltekintve - javasolja az "InfixCaps" (pontosabban CamelCase) írásmódot
"én meg addig pénzt keresek egy valódi nyelvvel. "
Csak nem?
Kinek a hátsóját nyalod pénzért?
"Na, pontosan erről beszélek."
Éppen ez az, hogy azt sem tudod miről beszélsz.
Sheggfej.
"#15: Nem érted te ezt "
A szabványt és az idevágó elnevezési konvenciókat én említettem - és én nem érteném? Szép kis argumentum ad hominek érvelési hibába futottál. ;(
"Nekem a gyengém, a 'hülyeségem' a szép kódolás"
A tabaki által belinkelt kóddal nincs nagyobb gond. Indentált, egy parancs egy sorban van, az operátorok körül szóközök vannak, a vesszők után szóköz - teljesen olvasható.
A modern fejlesztőkörnyezetek (és kódmegosztó oldalak - mint a pastebin - amelyeket pont ezért érdemes használni) egyébként is tartalmaznak kódszínezést.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!