Kezdőoldal » Számítástechnika » Programozás » Pascal, szövegfájl kezelés...

Pascal, szövegfájl kezelés (sorok egyesítése) hogyan lehetséges?

Figyelt kérdés

Olyan programot szeretnék írni, amely szövegfájlból olvas be sorokat, két vagy több sort egyesít, meg van adva a sorhossz ami legyen például 75.

Ha a két sor hossza rövidebb mint 75 akkor átviszi és a következő sorral vagy sorokkal egyesíti amíg 75 nem lesz, tehát a fennmaradó maradékra is figyel.

Mivel legegyszerűbb ezt megcsinálni?

TStringlist-et kevésbé ismerem.

A nyelvtani szabályok most itt kevésbé foglalkoztatnak, meg a szóköz figyelembevétele is, az foglalkoztat leginkább, hogy logikailag egy ilyen hogy nézne ki.


program szovegfajl;


const

hossz = 75;


var

inf, outf : text;

s : string;

begin

assign(inf, paramstr(1));

reset(inf);

assign(outf, paramstr(2));

rewrite(outf);

while not eof (inf) do

begin

readln(inf,s);

writeln(outf,s);

end;

close(inf);

close(outf);

end.



2016. okt. 28. 09:13
1 2
 1/12 A kérdező kommentje:

Különösen az alábbi probléma érdekelne:

lenne 3 db 35 karakter hosszúságú sor, ezeket miként lehet összeadni úgy hogy "a maradékot a következő sorokhoz adjuk"?

Első kettőt simán egy sorba lehet írni, a harmadikból pedig fennmarad 5 karakter, a maradék és az utána következő sor figyelembevételével hogy lehet összeadni?

Logikailag ez a probléma érdekelne hogy bármilyen sorhosszra is működjön.

2016. okt. 28. 09:28
 2/12 anonim ***** válasza:

1. tipp:

Beolvasod az egész szöveges állományt egy string-tömbbe (feltételezhetően, nem nagy szöveges állományokról van szó), és aztán a tömb elemeit módosítod a leírtaknak megfelelően, majd végül kiírod a kimeneti állományba a módosított tömböt.


2. tipp:

a szöveges állományt nem szövegges állományként nyitod meg, hanem bináris állományként és elkezded byte-onként beolvasni (feltételezhetően a szöveg egyszerű ASCII és nem unicode-os) és kiírni a kimeneti állományba, amikor elérsz 75-ig (persze kihagyva a soremeléseket), akkor kiírsz egy soremelés(10) (+kocsivissza(13)) karaktert.


3. tipp:

beolvasol mindig 2 sort a szöveges állományból, megnézed, hogy a kettő sor hossza együttesen rövidebb-e mint 75, ha igen, akkor még beolvasod a 3-dik sort is és abból kipótolod a szöveg-eljárásokkal (Pl. Copy)...

2016. okt. 28. 09:34
Hasznos számodra ez a válasz?
 3/12 anonim ***** válasza:

#1-nek:


A problémát egy kicsit egyszerűsítsve nézzük meg.


Sorhossz: 12


1.string(A):"abcde"

2.string(B): "fghij"

3.string(C): "klmno"


Ekkor:

A=A+B

if length(A)<sorhossz then begin

A=A+Copy(C, 1, sorhossz-length(A));

Delete(C, 1, sorhossz-length(A));

end;

2016. okt. 28. 09:42
Hasznos számodra ez a válasz?
 4/12 anonim ***** válasza:

Egy kis javítás, bocs...


if length(A)<sorhossz then begin

D=sorhossz-length(A);

A=A+Copy(C, 1, D);

Delete(C, 1, D);

end;

2016. okt. 28. 09:44
Hasznos számodra ez a válasz?
 5/12 A kérdező kommentje:

Engem ez a string-es megoldás érdekelne, amit előzőekben ismertettél, a szövegfájl binárisként kezelése nem.

Logikusnak tűnik ez a string-es megoldás.

2016. okt. 28. 10:43
 6/12 A kérdező kommentje:

Itt beolvasom egy tömbbe, csak utána nem tudom a repeat-until ciklussal miként oldjam meg mert ha például a két szomszédos sor összege meg haladja a sorhossz értékét akkor "nem tudok mit tenni"...


program szovegfajl;


const

hossz = 75;


var

inf, outf : text;

s : string;

t : array[1..9999] of string;

i, j : word;

begin

assign(inf, paramstr(1));

reset(inf);

assign(outf, paramstr(2));

rewrite(outf);

i:=0;

while not eof (inf) do

begin

readln(inf,s);

inc(i);

t[i]:=s;

end;

j := 1;

close(inf);

close(outf);

end.

2016. okt. 28. 11:10
 7/12 anonim ***** válasza:

Eddig az összes hazugmondó féle "megoldás" rossz.

Megoldás:

while(not end of file)

__string data;

__do

____data += readline();

__while(data.Length < 75 and not end of file);

2016. okt. 28. 11:17
Hasznos számodra ez a válasz?
 8/12 anonim ***** válasza:
A readln funkciót felejtsd el. Tömbösen olvasd be az adatokat és úgy dolgozd fel.
2016. okt. 28. 17:47
Hasznos számodra ez a válasz?
 9/12 A kérdező kommentje:
Tömbbe is lehet readln-vel olvasni.
2016. okt. 28. 18:07
 10/12 anonim ***** válasza:
Azt én tudom, de ha nincs szükség readln-re akkor tök mindegy, hogy lehet-e vagy sem.
2016. okt. 28. 18:12
Hasznos számodra ez a válasz?
1 2

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!