Toon posts:

[C++] String in een File (lastig)

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik werk dus met C++ builder.
Daarin heb je zoals jullie weten memo velden.
In mijn programma wordt op een bepaald moment een aantal strings in zo'n memo gezet. (de memo dient hier als een soort buffer)

b.v.: (3 ) testing
(7 ) zeven

(het komt vaak voor dat de nummers elkaar niet opvolgen)
Verder heb ik een file met meerder strings.
b.v.: (8 ) acht
(9 ) negen
(10 ) tien

Hoe kan ik ervoor zorgen dat op een simpele manier de strings in de memo
bovenaan in de file worden gezet.

Ik heb hier een manier voor bedacht dat is deze:
om de inhoud van de memo naar een tweede memo teschrijven en vervolgens de inhoud van de file naar hetzelfde memo2 te schrijven.
(Het is niet mogelijk om de inhoud van de file naar de eerste memo te schrijven omdat dat de inhoud verandert van de eerste memo (buffer), en dat is niet de bedoeling.)

De inhoud van memo 2 word dan zo:
(3 ) testing
(7 ) zeven
(8 ) acht
(9 ) negen
(10 ) tien
En deze inhoude vervolgens te overschrijven naar de file.

Nu is mijn vraag of dat het misshcien op een rechtstreekse manier kan!
Dus de
(3 ) testing
(7 ) zeven
rechtstreeks in de file, boven bij te schrijven??

Alvast bedankt
Flykiller

  • GAEvakYD
  • Registratie: Juni 2001
  • Laatst online: 21:10
Snap helemaal niets van je uitleg met die (3) en (7)

Verwijderd

Topicstarter
dat zijn voorbeelden voor een string
de strings zijn van ongeveer zo'n inhoud
De vraag is hoe je strings uit een memo bovenaan in een file kunt zetten

  • GAEvakYD
  • Registratie: Juni 2001
  • Laatst online: 21:10
Misschien bedoel je zoiets.

char ch;
int n=0;
ifstream ff("aa", ios::nocreate);
if(!ff)
{
cout << "Kan die file aa niet openen.\n";
return 1;
}

ofstream gg("bb");
if (!gg)
{
cout << "Kan de file bb niet openen.\n";
return 1;
}

while (gg && ff.get(ch){
gg.put(ch);
n++;
}
cout << n << " Karakters gekopieerd.\n";
return 0;

Verwijderd

Topicstarter
Dit werkt niet onder C++ Builder volgens mij.
ifstream wordt niet herkend
cout wordt niet herkend.

Mijn enige vraag is:
Is de methode die ik gebruik om dus Strings uit een MEMO toe te voegen aan een file, een goede (of de enige) of kan ik direct vanuit de MEMO in de file schrijven (zonder dat er wordt overschreven).

  • GAEvakYD
  • Registratie: Juni 2001
  • Laatst online: 21:10
Je hebt verschillende soorten modusen voor het schrijven naar een file. append, overwrite. Ik denk dat jij de optie prepend zoekt. Dus effe met die ios:: stoeien

  • GAEvakYD
  • Registratie: Juni 2001
  • Laatst online: 21:10
ifstream wordt niet herkend??????.

Include je wel de desbetreffende h files? #include <fstream.h>

  • whoami
  • Registratie: December 2000
  • Laatst online: 19:34
Als je die strings in die memo met de SaveToFile method wegschrijft, zal het afaik niet lukken SaveToFile append gewoon dacht ik.

Wat je misschien kunt doen is, die File eerst inlezen in een TStringList. Dan de strings in uw memo wegschrijven naar die file in overwrite mode, en dan de strings in die stringlist in append mode naar die file wegschrijven.
(Quick and dirty oplossing :P)

https://fgheysels.github.io/


  • GAEvakYD
  • Registratie: Juni 2001
  • Laatst online: 21:10
Ach er leiden 100 wegen naar Rome

Verwijderd

Topicstarter
nog 1 vraagje:

wat is dat ios::nocreate ??

hij zegt dat het een undefined symbol is maar wat is het ?

ga het op deze manier eens proberen!

tnx

Verwijderd

Ik snap jouw probleem niet zo goed. Wil je:

lege regel:
lege regel:
regel 3 : test string
lege regel:
lege regel:
lege regel:
lege regel:
regel 7 : zeven

Of is dit wat je nu hebt en wil je:

regel 1: teststring
regel 7: zeven

Dus dat de lege regels eruit gefilterd worden.

Wat ik in ieder geval doe om een memo te vullen is:
C++:
1
Memo1->Lines->Append("deze tekst");

En dan voeg ik "deze tekst" achteraan toe. Je kunt ook Add gebruiken om iets toe te voegen.

Verwijderd

Topicstarter
nee wat ik wil is een string uit een memo B.V. -> "(3 ) dit is een nummer"
en dan van "(" tot "r"
bovenaan toevoegen aan een file waar strings in staan met dezelfde opbouw.
dus.. als de oorspronkelijk file zo zou zijn:
(7 ) dit is ook een nummer
(8 ) weer een nummer

dat na het toevoegen de file er zo uit zou zien:
(3 ) dit is een nummer
(7 ) dit is ook een nummer
(8 ) weer een nummer

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Het is niet mogenlijk om in een bestand ergens enkele data in te voegen. Ook niet aan het begin.

Je kunt alleen in het midden (of begin) overschrijven en aan het eind toevoegen. Als je ergens dus iets moet invoegen zul je alles wat erna komt op moeten schuiven. Dit betekent inlezen en weer wegschrijven. Waarschijnlijk is er dus geen andere mogenlijkheid dan die via memo2. (Mischien wel snellere mogenlijkheden, maar het principe zal altijd op hetzelfde neerkomen)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

GAEvakYD schreef op 23 oktober 2002 @ 10:02:
ifstream wordt niet herkend??????.

Include je wel de desbetreffende h files? #include <fstream.h>
#include <ifstream> bedoel je ;)

Verwijderd

je kan niet zomaar regels in een bestand toevoegen (zoals eerder gezegd)
een bestand is gewoon een stukje data. dit kan een rijtje characters zijn. als er dan de characters '\r' en/of '\n' (cariage return en line feed) in voorkomen, krijg je regels tekst in je bestand.
je zou dus zelf moeten regelen dat dat wat je toevoegd, ook gewoon stukjes data die regels voorstellen is. ook komt er wat meer kijken bij data toevoegen in files, dit kan niet zomaar. maar om dit de regelen zijn gelukkig al functies voor die je zo te lezen al hebt gevonden :)

wat je denk ik het makkelijkst is, is dat je eerst je bestand naar een Memo omzet (je creëert een buffer), dan zet je de nieuwe regels ook in die Memo, dan schrijf je die Memo weer weg naar je bestand...
Pagina: 1