Kezdőoldal » Számítástechnika » Programozás » Free pascalban, hogyan lehet...

Free pascalban, hogyan lehet úgy beolvasni egy file-t, hogy minden új szót külön lehessen kezelni?

Figyelt kérdés

Értem én itt azt, hogy van egy doksim, amiben van egy azonosító, mellette a hozzátartozó információ egy szóban, és így egymás alatt.

Mert próbáltam úgy, hogy létre hozok egy Type-ot és akkor utánna egy Array tömbbe olvasom,hogy pl.:

Program valami;

Uses crt;

Type kell=record;

azonosito:string;

eredmeny:string;

End;


Var teszt:Array[1..500] of kell;

f:text;


Begin

Assign(f,'teszt.txt');

Reset(f);

i:=1

While not eof(f) do

Begin

Read(f,teszt[i].azonosito);

Readln(f.teszt[i].eredmeny);

i:=i+1

End;

close(f);

End.


így csak az azonositoba olvassa be egy sor tartalmát.



2020. máj. 15. 16:32
1 2 3
 11/27 anonim ***** válasza:
73%

#3, #9: Bár félve kezdek vitát olyasvalakivel, aki még helyesen írni sem tud, de azért megpróbálkozok vele. ;)

Kezdeném azzal, hogy tanulni nem feltétlenül ugyanabban a legjobb, amiben majd dolgozni is fogsz. Láttam nem kevés tehetséget elveszni, amiért egyből túl nagyot akart, mondván: ő nem pazarolja az idejét, minek tanuljon mást, mint amivel majd dolgozni fog? Olvasni sem Dosztojevszkijből tanul az ember, pedig a felnőtt piacon elég kicsi a kereslete az olvasókönyveknek. ;) Ha tanul az ember, akkor olyan eszközt kell választani, ami a tanuláshoz ideális. Majd később, amikor már tud algoritmizálni, érti a programozás logikáját, akkor lehet specializálódni. Másfél évtizedet töltöttem el a szakoktatásban, és nem tapasztalom, hogy jobbak lennének a nem-Pascallal kezdők eredményei.

Másrészt: [link]

[link]

Van rá kereslet. Ja, hogy kevesebb, mint JavaScript-droidra? Erre hadd mondjam azt, hogy betanított munkásra is mennyiségét tekintve nagyobb a kereslet, mint agysebészre, mégse gondolnám, hogy utóbbi egy felesleges tévút lenne.

Harmadrészt: ha mondjuk egyéni vállalkozó az ember, akkor meg nagyrészt abban fejleszt, amiben szeretne. És gondolom, a Total Commander fejlesztője is nyomorog, amiért Pascalban írja a senki által nem használt termékét. ;)

2020. máj. 16. 09:49
Hasznos számodra ez a válasz?
 12/27 A kérdező kommentje:

#10: Tudna nekem egy kódot írni a problémámra?

Mert amit a #8-as küldött a file-ba írás, és nem értem, hogy egy f változóba, hoogyan lehetne beolvasni x mennyiségű adatot. Azt nem csak Array-be lehet beolvasni?

A feladat amúgy a 2017. májusi emelt érettségi feladata.

[link]

Válaszát előre is köszönöm. :)

2020. máj. 16. 10:32
 13/27 tabaki ***** válasza:

@12:

"amit a #8-as küldött a file-ba írás"

Igen. Azt mutatja be, hogy hogyan tudsz egy rekordot kiírni. A beolvasást már te magad megírtad, nem emlékszel? Ott van a kérdésben... Azt a sete-suta kétsoros Read-kísérletedet a ciklusmagban, azt kéne egyetlen rekord-beolvasásra egyszerűsítened, ha jól sejtem, így:

Read(f, teszt[i]);


"nem értem, hogy egy f változóba, hogyan lehetne beolvasni x mennyiségű adatot. Azt nem csak Array-be lehet beolvasni?"

Ezt a kérdést azért gondold át jobban. Az f ugyebár nem egyszerűen egy változó, hanem egy fájl azonosítója, amibe miért ne írhatnál egymás után akármennyi adatot? Beolvasáskor a tulajdon programod is ugyanilyet használ, aztán mégsem bámulsz rá meghökkenve, hogy hogyan fér el benne több adat.


Jóllehet, itt láthatólag praktikusabb a rekord-mentés, de annak sincs akadálya, hogy a soronként beolvasott szövegfájlból, a sorok szétszedésével töltsd fel a tömbödet. Este esetleg bemutatom, mire gondolok, most nem érek rá.

2020. máj. 16. 11:27
Hasznos számodra ez a válasz?
 14/27 anonim ***** válasza:
2020. máj. 16. 11:55
Hasznos számodra ez a válasz?
 15/27 anonim ***** válasza:

(Kész csoda hogy most már lehet használni a pastebin-t, eddig se értettem mi volt a bajuk vele. Az újítással eltörölték ezt az értelmetlenséget is.)


Nagyon régen évek óta nem pascaloztam.

Egyszerűen kezelhető split függvényt ami a szóköz mentén kettévág nem találtam, ha valaki tudja akkor írhat erre valami okosságot.


Ami neked kell kérdező text módba és nem bináris módba fájlt kezelni.

Összedobtam egy példa kódot rá ami helyesen kezelve végigmegy a szöveges fájlon.


Magyarázat a kódhoz:

f text típusú fájlleíró, mert nem bináris mód kell (az lenne a file tipusú változó).

{$I-} {$I+} meg IOResult hibakezelés miatt, de ez igazából nem is kell értettségi feladat szempontjából mert nem is kéri a feladat hogy kezeljük le ha nem elérhető a fájl.

readln(f,s); s-be olvas f fájlleíró általi fájlból egy sort.

writeln-el csak visszaírtam hogy látszódjon hogy helyesen kezeli

kettevag eljárás ez kellett hogy megcsinálja a kettévágást szóköz mentén.

Példa kód : [link]

2020. máj. 16. 13:15
Hasznos számodra ez a válasz?
 16/27 anonim ***** válasza:

Itt egy szó-elválasztó függvény, ha a kérdező esetleg a szimpla soronkénti kiírással-beolvasással jobban tisztában lenne:


[link]


A második (kikommentelt) string sorban ','-vel vannak a szavak szeparálva (space helyett), ezért a katana() függvény meghívásakor a szeparátor karaktert ki kell cserélni #32-ről #44-re (vagy ','-re). A forrás stringben a szeparátor amúgy lehet bármilyen karakter, pl. '#' vagy ':' is.

2020. máj. 16. 15:19
Hasznos számodra ez a válasz?
 17/27 anonim ***** válasza:

Próba:


program ktn;

var

sIn: string = 'egy ketto harom negy ot hat het';

sArr: array [0..0] of string[12]; j: byte;


function Katana(s: string; separ: char): Byte;

var

i : byte; sTmp: string ='';

begin

 katana := 0;

  for i:= 1 to length(s) do

   if s[i] <> separ then sTmp:= sTmp+s[i] else

   begin

   s Arr[katana] := sTmp;

    sTmp:= '';

    inc(Katana);

   end;

  sArr[katana] := sTmp;

end;


begin // main

  for j:= 0 to katana(sIn,#32) do writeln(sArr[j]);

  readln();

end.

2020. máj. 16. 16:08
Hasznos számodra ez a válasz?
 18/27 anonim ***** válasza:

@15:19:

..."ha valaki tudja akkor írhat erre valami okosságot." Nem ezt értettem ez alatt.

A következők miatt:

1. : Beépített daraboló megvalósításra gondoltam ami alapból benne van a nyelvbe. Mint Python-ba vagy JavaScript-be egyaránt a beépített split metódus vagy mint PHP-be a beépített explode függvény.

2. : Globális változó használata indokolatlan eleve függvényen belül, ha egy általános célú darabolót akartál bemutatni ... minden hibára, rossz gyakorlat demonstrálására amit ez a kód bemutat nem is térek ki, lényeg hogy úgy rossz az egész ahogy van. Nem példa értékű. Egy dolgot azért még kiemelek hogy miért nem jó :

sArr tömböt túlindexeled. A pascal meg alapvetően nem memóriabiztos nyelv (viszont benne van nyelvi szinten ennek támogatása). Ahogy az adott gépen az adott rendszeren az adott pascal compiler-el lefordított kódban van még annyi lefoglalt memóriája hogy nem jelentkezik a hiba.(Lehetnek esetek hogy egyik rendszeren jelentkezik a hiba, de másikon nem) Azonban nagyon "fincsi" anomáliákat tud okozni egy hosszabb összetettebb kódban ha pont úgy van túlindexelve (persze ez rendszerfüggő, nem mindegy melyik verizóval lett fordítva stb) hogy átlóg egyik tömb egy tök más unit-ban használt tömbbe.

Egyszerűen tetten érhető:

program ktn;

{$R+}

{$RANGECHECKS ON}


Igazából elég lenne csak az egyik mondjuk a {$R+} direktíva ami "rácsap a kezedre" ha túlindexelnéd a tömböt. Ezt adja meg a compiler-nek, hogy tartomány határellenőrzés legyen futási időben. Viszont ilyen okosságok be is állíthatóak hogy default-ba így fordítsa le, de direktbe meg is adható a kódba hogy beállítástól függetlenül így legyen.

2020. máj. 16. 16:55
Hasznos számodra ez a válasz?
 19/27 anonim ***** válasza:
49%

"Kedves" frusztrált privátozó, inkább a saját életedet egyengesd, és ne itt próbáld meg a frusztrációidat levezetni!

Látom, a szövegértés sem megy, ugyanis már jó ideje nem az oktatásban dolgozom. Ahhoz képest pedig, hogy szerinted nem tudok fejleszteni, ez az ügyfelek légedettségi indexén nem igazán látszik. Tudod, mi kettőnk között a különbség? (Túl azon, hogy én képes vagyok ékezetes karaktereket is leírni - ironikus, hogy neked ez sem megy, és te okoskodsz -, és veled ellentétben nem szorulok rá, hogy anonim fórumokon vezessen le a sikertelenség okozta feszültséget.) Az, hogy én pofázás helyett fejlesztek. Én nem elvekre, hanem minőségre törekedek. Ha te a preferált nyelveden annyira sikeres lennél, akkor nem privát üzenetben arcoskodnál.

2020. máj. 16. 21:05
Hasznos számodra ez a válasz?
 20/27 anonim ***** válasza:
Kettőnk közül neked nem megy a szövegértés. Az pedig külön nevetséges, hogy próbálod saját magadat felpontozni.
2020. máj. 16. 21:09
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!