Kezdőoldal » Számítástechnika » Programozás » Pascal: szövegfelbontásra...

Pascal: szövegfelbontásra (string, szóközök mentén) van valami egyszerűbb-praktikusabb mód? (bővebben lent)

Figyelt kérdés

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.



2017. jan. 8. 19:54
1 2 3
 11/28 anonim ***** válasza:

Egyébként vannak erre beépített függvények is:

[link]


bár gyanítom a kérdező kezdő, és gyakorlófeladatokat végez...

2017. jan. 8. 23:04
Hasznos számodra ez a válasz?
 12/28 anonim ***** válasza:
0%

Na, pontosan erről beszélek. :D :D :D


Mutatom C#-ban:

var splitted = str.Split(' ');


:D :D :D

2017. jan. 8. 23:06
Hasznos számodra ez a válasz?
 13/28 tabaki ***** válasza:

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.

2017. jan. 8. 23:13
Hasznos számodra ez a válasz?
 14/28 SimkoL ***** válasza:

'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.

2017. jan. 9. 00:46
Hasznos számodra ez a válasz?
 15/28 anonim ***** válasza:

"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

[link]

2017. jan. 9. 01:04
Hasznos számodra ez a válasz?
 16/28 anonim ***** válasza:
65%

"én meg addig pénzt keresek egy valódi nyelvvel. "


Csak nem?

Kinek a hátsóját nyalod pénzért?

2017. jan. 9. 01:11
Hasznos számodra ez a válasz?
 17/28 anonim ***** válasza:

"Na, pontosan erről beszélek."


Éppen ez az, hogy azt sem tudod miről beszélsz.

Sheggfej.

2017. jan. 9. 01:14
Hasznos számodra ez a válasz?
 18/28 SimkoL ***** válasza:
52%
#15: Nem érted te ezt :) Nekem a gyengém, a 'hülyeségem' a szép kódolás. tabakinak meg szívom a vérét :)
2017. jan. 9. 01:27
Hasznos számodra ez a válasz?
 19/28 anonim ***** válasza:

"#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.

2017. jan. 9. 01:40
Hasznos számodra ez a válasz?
 20/28 SimkoL ***** válasza:
9%
Mondtam, hogy nem érted :)
2017. jan. 9. 01:48
Hasznos számodra ez a válasz?
1 2 3

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!