CFile Datei ändern

flo_hr

Mitglied
Guten morgen,
habe folgendes Problem:

Ich speichere verschiedene Kontodaten in eine Datei ab mit diesem Muster:

KtoNr|Geheimzahl|KtoArt|KtoStand|
3368045|1234|1|150|

die datei besteht dann aus mehreren zeilen, für jedes Konto eine Zeile.

jetzt möchte ich aber wenn ich eine buchung durchführe den Kontostand ändern.
ich springe mit der seek() funktion an die stelle wo die ktoStand geändert werden soll, und überschreibe ihn dann. das problem an der sache ist wenn der neue KtoStand größer als der alte ist schreibt er den rest in die nächste zeile. also wird dann ein teil der KtoNr von dem Konto in der nächsten zeile überschrieben.

hat vielleicht einer ne idee, das er nicht in die nächste zeile springt.

Danke schonmal im vorraus FLO
 
Reserviere einfach in der Datei einen genügend großen Bereich für den Kontostand, der für die zu erwartenden größten Beträge ausreicht. Bei kleineren Beträgen füllst du den überschüssigen Platz mit Leerzeichen oder führenden Nullen auf.

Der bessere (aber aufwendigere) Weg ist das Einlesen der gesamten Datei in eine Datenstruktur. Dort kannst du dann die gewünschten Änderungen vornehmen und mit der geänderten Datenstuktur die vorhandene Datei überschreiben.

Gruß
MCoder
 
ja den ersten Vorschlag hatte ich auch schon in Erwägung gezogen, nur ich finde das nicht so elegant gelöst.

und bei dem zweiten vorschlag sehe ich das problem, wenn zum beispiel irgendwann mal über tausende von datensätzen vorhanden sind bei jeder buchung die komplette datei einzulesen und wieder zu schreiben. das wäre doch auch speicher aufwendig.

fällt dir net noch irgendwie was anderes ein
 
und bei dem zweiten vorschlag sehe ich das problem, wenn zum beispiel irgendwann mal über tausende von datensätzen vorhanden sind bei jeder buchung die komplette datei einzulesen und wieder zu schreiben. das wäre doch auch speicher aufwendig.
Richtig, aber dann wäre es vielleicht angebracht, die Daten in einer kleinen Datenbank zu speichern.

fällt dir net noch irgendwie was anderes ein.
Ok, noch eine Idee: Du könnstest den Betrag als double-Wert bzw. die einzelnen Bytes dieses double speichern. Damit hast du eine feste Größe (8 Byte) und kannst auch sehr große Beträge speichern. Da sich binäre Daten in einer Textdatei nicht so gut machen, könntest du die einzelnen Bytes als String speichern. Das macht dann 16 Zeichen für alle Beträge.

Gruß
MCoder
 
Zurück