Weboldalunk cookie-kat használhat, hogy megjegyezze a belépési adatokat, egyedi beállításokat, továbbá statisztikai célokra és hogy a személyes érdeklődéshez igazítsa hirdetéseit. További információ
Főoldal Belépés/Regisztráció Egy véletlen kérdés Facebook






Kategória: Számítástechnika » Programozás

A kérdés

Hogy lehet C-ben egy fájlnak a sorát módosítani?

Pl. van egy szöveges fájl teszt.txt és van benne 5 sor

sor1

sor2

sor3

sor4

sor5

és a sor3-at átszeretném írni másra.

Ezt, hogy lehetne megvalósítani?

Eddig eljutottam:

char line[128]="";

FILE * fp = fopen("teszt.txt", "a+");

while(!feof(fp)){

fscanf(fp, "%s", line);

if(!strcmp(line, "sor3")){

//és lényegében itt nem tudom, hogy most fputs vagy fwriteot kellene használnom és, hogy hogyan használjam, hogy a sor elejéről induljon a szöveg ne a szöveg után

break;

}

}

fclose(fp);



Keress kérdéseket hasonló témákban: fájl, szöveg, szerkesztés, sor

  febr. 15. 00:01  Privát üzenet  

A válaszok
1 2

Beolvasás alatt álló file-ban turkálni elég macerás dolog, helyette a legegyszerűbb és legmegbízhatóbb megoldás, ha nyitsz egy második file-t, és soronként belemásolod a szöveget, változtatással vagy anélkül.


Beolvasásnál nem az feof-ot használjuk a ciklus feltételeként, hanem a beolvasás utasítást. Sort fgets-sel olvasunk, az fscanf "%s" leáll az első szóköznél.



A válasz 66%-ban hasznosnak tűnik. A válaszíró 58%-ban hasznos válaszokat ad.
# 1/15Időpont febr. 15. 00:38 Privát üzenet
Hasznos számodra ez a válasz?
Úgy mint ahogy egy szövegszerkesztő csinálja annak az elve szerint, nem azt mondom hogy ez az egyetlen megoldás, de gyakorlatilag ez a legelterjedtebb. Vagyis dinamikus memóriafoglalással beolvasod a fájlt sorokba 2 dimenziós dinamikus tömbbe, majd változtatsz bármelyik soron utána meg ennek a tartalmát írod abba a fájlba amit beolvastál.

A válasz 48%-ban hasznosnak tűnik. A válaszíró 87%-ban hasznos válaszokat ad.
# 2/15Időpont febr. 15. 01:51 Privát üzenet
Hasznos számodra ez a válasz?
Hát a szövegszerkesztők biztos nem 2 dimenziós tömbbe olvassák be a szövegeket.

A válaszíró 66%-ban hasznos válaszokat ad.
# 3/15Időpont febr. 15. 09:17 Privát üzenet
Hasznos számodra ez a válasz?

Így van, a szövegszerkesztők valóban nedm 2D tömbbe olvassák be az editálandó file-t, de a kérdezőnek úgy kell, feltéve ha konkrét célja a kérdésben megfogalmazott kivánság, mi szerint éppen a 3. sort és csak azt kivánná megváltoztatni.

A közzétett kód nem sokat ér.


A beolvasást segíti a sorvég jel ((Carriage Return) Line Feed).



A válasz 30%-ban hasznosnak tűnik. A válaszíró 42%-ban hasznos válaszokat ad.
# 4/15Időpont febr. 15. 10:22 Privát üzenet
Hasznos számodra ez a válasz?

@09:17

Ez nem igaz. Ezek szerint nem láttál még EditBox implementációt. Plain text szövegszerkesztőben biztos, hogy ez egy megszokott megoldás. A windows-os notepad-nak pl a memóriaképén látszik hogy egy dinamikus 2D-s tömbbe van a szöveg a "színfalak mögött". Egyébként is "ahogy egy szövegszerkesztő csinálja annak az elve szerint", ezt állítottam. Vagyis az elve szerint nem azt jelenti, hogy ténylegesen úgy csinálja, ha egy formázott szöveget szerkesztő szövegszerkesztőről van szó ahol sok mindent lehet, táblázatok képek stb. Ott bonyolultabb adatszerkezet van, de az alapelve akkor is ez.



A válasz 67%-ban hasznosnak tűnik. A válaszíró 87%-ban hasznos válaszokat ad.
# 5/15Időpont febr. 15. 10:32 Privát üzenet
Hasznos számodra ez a válasz?

10:32: Tévedsz. A szövegszerkesztők blokkosan olvassák be a file-t és úgy is szerkesztik. Csak a megjelenítés 2D.

Gondolj bele, ha egy file csak egyetlen sort tartalmaz, abból mégis, hogy lenne 2d tömb?

A plain text file-oknál, hogy később könnyebben feldolgozhatók legyenek, elvárás, hogy ne legyen a szövegben sorvég, mert így lehet, folyatni, formázni a szöveget.



A válasz 18%-ban hasznosnak tűnik. A válaszíró 42%-ban hasznos válaszokat ad.
# 6/15Időpont febr. 15. 10:48 Privát üzenet
Hasznos számodra ez a válasz?

Úgy látom elbeszélünk egymás mellett, arról szó se volt hogy blokkosan írja vagy olvassa e. Arról van szó, hogy beolvassa a memóriába majd csinál vele valamit és visszaírja a memóriából. A memóriába meg 2D-s tömbként tárolja és szerkeszti ez a plain text szövegszerkesztő. A komplexebb szövegszerkesztők esetében ahol már lehet formázni a szöveget meg képet lehet berakni stb. stb. hogy alapelvből kiindulva valami, hogy mit jelent az nem sikerült akkor gondold át még 1x.

A régi win xp-s notepad ami az alap volt mindenféle update nélkül az pl. úgy csinálja hogy 1024 elemű statikus tömbökből álló dinamikus tömbök tömbjeként tárolja a memóriában, igen nem tudott 1024 hosszúságánál hosszabb sort kezelni e miatt, a sorvégjelet a zéró bájt a reprezentálta a tömbben, mivel ez az alap string reprezentáció.


"Gondolj bele, ha egy file csak egyetlen sort tartalmaz, abból mégis, hogy lenne 2d tömb?"

Elárulok egy "titkot", ami egy alap dolog egyébként. Egy tömb nem attól lesz 2D-s, ha áll legalább két 2 egydimenziós tömbtől. Hanem a rajta értelmezett műveletek miatt, ha ez egy egy tömbből álló tömb akkor ez a 2D-s tömbnek egy speciális esete.



A válaszíró 87%-ban hasznos válaszokat ad.
# 7/15Időpont febr. 15. 12:16 Privát üzenet
Hasznos számodra ez a válasz?

1. A szövegszerkesztő lekérdezi a file méretét.

2. Ennek megfelelő méretű puffert allokál.

3. Beolvassa a pufferbe a file-t.

4. Szerkeszti (a user).

5. Kiírja a puffer tartalmát a file-ba.


Ha nem plain text editor, akkor (1.-3.) majd a formátumnak megfelelően objektumokra (szöveg, kép, stb.) bontja a file tartalmát.


Ennyi.

Szó nincs olyasmiről, amit te álítasz. Amit leírtál az egy soreditorra perfekt, de nem egy szövegszerkesztőre.


Én jelenleg XP előtt ülök, készítettem egy file tartalmat a notepad-ben amely ~ 2500 karaktert tartalmaz, de nincs benne egyetlen egy sorvég karakter sem.


Az persze igaz, hogy ha a file-t beolvasom, akkor a képernyőn a max. sorhossz 1024 karakter lesz, de azért, mert ennél hosszabb sorra a gyakorlatban nincs szükség. Ez azonban, ahogy írtam is, csak a megjelenítés, a memóriában (tényleges file tartalom) szó sincs 2D bufferről. Nem is csoda, hiszen nincs rá szükség.



A válasz 18%-ban hasznosnak tűnik. A válaszíró 42%-ban hasznos válaszokat ad.
# 8/15Időpont febr. 15. 13:08 Privát üzenet
Hasznos számodra ez a válasz?

Még annyit, hogy a C-ben a null terminálás nem a sor, hanem a string végét jelzi.

A sorvég (vagy új sor (new line)) karakter egy ASCII karakter (10) ami nyelvfüggetlen.


"\n" mint operátor.



A válasz 30%-ban hasznosnak tűnik. A válaszíró 42%-ban hasznos válaszokat ad.
# 9/15Időpont febr. 15. 13:28 Privát üzenet
Hasznos számodra ez a válasz?

@13:08

Először is az alap notepadról beszéltem, ami minden féle szervízcsomag meg update nélküli, a többit nem néztem milyen, mellesleg lehet a többire is igaz, de nem használok windowst már. Amúgy meg amit állítottál a pontokba szedve ez sem igaz a notepad-ra, ez már csak ott látszik hogy nagy fájl esetében sok reallokálást csinál, mellesleg nem is úgy ahogy optimális lenne ez, meg eleve a memória képen láttam amikor nézegettem ezt különböző memóriakép nézegetőkkel, még annó hogy tárolja a memóriában, de trollokkal és/vagy gyenge elméjűekkel nem vitatkozok és nem veszem figyelembe a többi megjegyzésedet. Ez nem is a kérdéshez tartozik. Bölcsebb, ha csendbe vagy típusú mondásnak teszek elevet, de részemről egy pszeudó némításnak vagy pszeudo bannak is tekinthető. Szóval nem azért nem fogok reagálni mert nem tudok mit írni rá, hanem mert nem segítünk ezzel a kérdezőnek és nem erre való az oldal továbbá egyáltalán nem vagy rá méltó, ez a százalékodon is látszik hogy ontod a hülyeséget. Tudom a magad fajta az olyan hogy mindig az övé az utolsó szó, 100-ból 1-2 ha mégsem.



A válaszíró 87%-ban hasznos válaszokat ad.
# 10/15Időpont febr. 15. 13:35 Privát üzenet
Hasznos számodra ez a válasz?
1 2

Értesítsünk róla, ha új válasz érkezik? Válasz küldése



Kapcsolódó kérdések
Valahogy meg lehet azt oldani, hogy úgy titkosítom a programot, amit készítettem Visual Studioban, hogy azt semmilyen programmal (pl. : DnSpy) ne lehessen módosítani?
Visual Studio 15-ben ha módosítani akarok egy kódot, akkor csak lecserélni engedi a karaktereket, átírni nem, csak ha kitörlöm az utána lévő összes kódot. Mit csináljak, hogy ne...
Hogyan tudnám a Diablo 2-t módosítani?
Hogyan tudok egy struktúrát felülírni vagy módosítani C#-ban?
MP4 videó fájlnak az FPS számát mivel tudom módosítani újrakonvertálás nélkül, ami a kiterjesztést is békén hagyja?
Milyen programmal tudnám módosítani 1-1 fájlnak, képnek a létrehozási, utolsó módosítási dátumát? XPre és 7en is érdekelne

Kérdések a Számítástechnika rovatbólKérdések a Programozás rovatból








Minden jog fenntartva © 2018, www.gyakorikerdesek.hu | GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Sitemap | WebMinute Kft. | 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!