Hallo, ich möchte ein Programm in C++ (Borland C++ 6) schreiben, dass aus einer Datei eine Bezeichnung und dann einzelne Zeichenfolgen (Datensätze aus z.B. jeweils 3 Zeichenfolgen) in Strings einliest (in ein Array?), die ich in einem Stringgrid anzeigen und ändern kann. Danach sollte der bearbeitete Teil wieder an die ursprünglichen Position in die Datei zurückgeschrieben werden. Da die Datei von einem anderen Programm benutzt wird, darf ich am Aufbau der Datei nichts ändern. Die Datei besteht komplett eigentlich nur aus 0-Bytes. Am Anfang steht die Bezeichnung (Byte 0 bis 39), an weiteren bestimmten Positionen befinden sich dann für die einzelnen Datensätze die Zeichenfolgen "Daten" (3x) bestimmter Länge: Bezeichnung 00 00 00 00 00 00 00 Daten0,0 00 00 00 00 Daten0,1 00 00 00 00 Daten0,2 00 00 00 00 00 Daten1,0 00 00 00 00 Daten1,1 00 00 00 00 Daten1,2 00 00 00 00 Mein Problem ist derzeit: wie lese ich die Zeichenfolgen ein, teile sie ein, und wie schreibe ich sie wieder aus dem Stringgrid in ihre ursprüngliche Position zurück? Welche Funktionen wären mir dazu nützlich? Das Stringgrid selbst ist bereits fertiggestellt. Vielleicht kann mir ein C++-Profi den Weg weisen, hierfür schon einmal vielen Dank!
Es gibt natürlich viele Wege; welche sinnvoll sind kann man so pauschal nicht sagen. "z.B. jeweils 3 Zeichenfolgen" ist eine eher schwammige Beschreibung. Eine Möglichkeit wäre, die Datei (Stichwort "Binärdatei" auf jeden Fall) byteweise vom Anfang weg zu lesen und sich die Info zusammen zu sammeln. Wahrscheinlich sinnvoller wäre es (wenn du die Positionen kennst) jeweils den Dateizeiger zu positionieren und dann dort die Werte zu lesen. Dann musst du dir für jedes Datum merken, wo es herkommt und wie lang es ist (falls du es nicht anderweitig implizit weisst), z.B. in einer kleinen class mit Position, Länge, Wert. Zum Schluß halt alle abklappern und zurückschreiben. Soweit ich die Aufgabenstellung verstanden habe, hört es sich jetzt eher nach Fleißarbeit an, aber vielleicht sind mir die echten Probleme entgangen. Viele Leute finden das Bearbeiten von Binärdateien mit den Funktionen aus <cstdio> (fread, fwrite, fputc, fgetc) einfacher und einleuchtender als mit den Streams aus C++ (<iostream>).
Martin C. schrieb: > Vielleicht kann mir ein C++-Profi den Weg weisen, hierfür schon einmal > vielen Dank! In deinem Fall dürfte es tatsächlich der einfachste Weg sein, zunächst zu vergessen, dass es sich um Strings handelt. Du hast ein File mit dem Aufbau Array von 40 Bytes Datensätze, jeweils bestehnd aus Array von x Bytes für Daten 1 Array von x Bytes für Daten 2 Array von x Bytes für Daten 3 und genau so würde ich die auch erst mal einlesen. mittels fopen das File aufmachen und dann die jeweilige Anzahl Bytes mittels fread einlesen. Wie es dann weitergeht, hängt davon ab, wie genau das Stringgrid aussieht. Eventuell den 'Umweg' gehen und aus den Arrays String-Objekte machen (bzw. entsprechende String Objekte befüllen), die dann ins String Grid Objekt zur Bearbeitung übergeben werden. Anstelle von fopen bzw. fread/fwrite könnte man natürlich auch die C++ File-Stream Objekte benutzen. Als alter Hardcore-C Programmierer sind mir allerdings die fopen/fread/fwrite/fseek Calls lieber als die Stream Objekte, aber das muss IMHO jeder für sich entscheiden.
Hallo nochmal, erst einmal vielen Dank für eure schnelle Hilfe. Dann werde ich mich heute abend mal genauer mit fread & Co. befassen. Die Positionen der einzelnen Daten innerhalb der Datei kann ich ja selbst per Hex-Editor auszählen. "Learning by doing" - ich werde mich da jetzt mal stückchenweise durchhangeln. Einen schönen Abend noch Martin
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.