Daten an eine bestimmte Stelle in Datei schreiben



  • Ich grüße,

    Ich habe folgendes Problem:

    Ich habe zwei Dateien die ich miteinandervergleiche.
    Es handelt sich hierbei um exportiere Access Tabellen im *.txt Format.
    Diese sind so aufgebaut:

    "Feld1";"Feld2";"Feld3" usw.

    In den "" stehen immer die Daten drin.
    Ich vergleiche nun die einzelnen Felder. Dazu lese ich eine Zeile in der ersten Datei aus und vergleiche sie mit jeder anderen Zeile. Aber nur das erste Feld da dort ein Name drin steht. Falls die Zeilen nun gleich sind werden die anderen Felder verglichen. Fehlt etwas in der Quelldatei soll das ergänzt werden, sprich:

    Steht in der Quelldatei: "Hans";"Karlplatz 9";""
    Steht in der 2. Datei : "Hans";"Karlplatz 0";"Berlin"

    Das Berlin soll nun in der Quelldatei ergänzt werden. Da aber noch weitere Zeilen in der Datei stehen sollen diese ja NICHT überschrieben werden.
    Frage, wie geht das^^?.
    Eine Lösung wäre ja, den ganzen Rest der Datei in eine andere zu schreiben, dann zu ergänzen und den Rest wieder dranzusetzen. Ist aber sehr Rechenintensiv.

    MfG

    Nocadas



  • Man kann einen CStringArray erstellen.
    Erste File mit CStdioFile zeilenweise auslesen (ReadString) und in den CStringArray schreiben.
    Zweite Datei auslesen und vergleichen mit den Werten des Arrays.
    Jeweiligen Datensatz im Array mit dem der zweiten Datei ersetzen, wenn der Name gleich ist.
    Anschließend den CStringArray wieder in die Datei schreiben.

    Ich hoffe das hilft dir weiter. 😉



  • Moin moin,

    Dein Vorschlag ist mir auch schon in den Sinn gekommen, da gibts nur ein kleines Problem. Was passiert bei einer Datei von 100 MB. Wenn ich die in einen Array einlese, ka was da passieren würden.

    Ich habe was über CMemFile gelesen, weiß aber nichts direktes damit anzufangen.

    Fakt ist er überschreibt sämtliche Zeichen die Folgen in einer Datei. Er soll diese Zeichen aber nach hinten verschieben.

    MfG

    Nocadas



  • CMemFile ist im Prinzip CFile. Nur es wird nicht auf der Festplatte gespeichert / ausgelesen, sondern aus dem Arbeitsspeicher.



  • HAndelt es sich dabei um CSV-Dateien? Wenn ja hast du sowieso ein Problem da nicht sicher ist das die Werte in Hochkommas eingeschlossen sind.
    Ich hatte das Problem auch und musste mir eine komplexere Klasse dafür schreiben.



  • Aloha,

    Es handelt sich hierbei um exportiere Access Tabellen im *.txt Format.

    Da steht Textformat^^. Also ganz simpel. Ich habe mich dafür entschieden, eine ganz neue Datei zu createn, eine Zeile aus der alten auszulesen mit den Anderen zu vergleichen und das Bessere in die neue Datei zu schreiben. Hinterher lösch ich die alte Datei und ersetze sie durch die Neue. Ein Problem gibt es bei Dateien größer 200 MB oder noch größer. Man erstellt ja eine Kopie von der Datei und das kostet Festplattenspeicher. Gut wenn man eine 160 GB Festplatte hat ist das kein Problem. Ich würde gerne mal wissen wie Microsoft das macht. Die haben doch sicherlich eine Technik dazu.

    MfG

    Nocadas



  • Nocadas schrieb:

    Aloha,

    Es handelt sich hierbei um exportiere Access Tabellen im *.txt Format.

    Da steht Textformat^^. Also ganz simpel.

    Und was glaubst du was CSV-Dateien sind. Binärdateien?



  • Moin,

    Also CSV hab ich schonmal irgendwo gehört^^. Aber welches Programm das Format beherrscht und wo es vorkommt, weiß ich leider nicht. Klär mich mal bitte auf :).

    MfG

    Nocadas


Anmelden zum Antworten