Hallo zusammen,
ich stehe vor einem Problem bei der Verarbeitung einer Log-Datei und hoffe auf eure Unterstützung.
Ich lese eine Log-Datei ein und ersetze darin bestimmte Zeilen durch vordefinierte Strings. Grundsätzlich funktioniert das Ersetzen wie gewünscht, allerdings stellt sich folgendes Problem: Zunächst werden alle Zeilen ohne Änderungen eingelesen, erst danach erfolgt die Ersetzung der gewünschten Zeilen. Dies führt dazu, dass die Datei am Ende doppelt so groß ist wie ursprünglich. Ich vermute, dass die Datei zweimal geschrieben wird, ohne die ursprünglichen Inhalte zu überschreiben, aber ich kann den Fehler in meinem Code nicht finden.
Könnt ihr mir eventuell helfen, den Grund für dieses Verhalten zu identifizieren?
Vielen Dank im Voraus!
Beste Grüße
PS: Das VI ist eine alte Version.
Hier ist die aktuelle Version
Hallo Mechatroniker,
Zitat:Zunächst werden alle Zeilen ohne Änderungen eingelesen, erst danach erfolgt die Ersetzung der gewünschten Zeilen. Dies führt dazu, dass die Datei am Ende doppelt so groß ist wie ursprünglich. Ich vermute, dass die Datei zweimal geschrieben wird, ohne die ursprünglichen Inhalte zu überschreiben, aber ich kann den Fehler in meinem Code nicht finden.
Ich kann es leider in deinem Code auch nicht sehen, da ich LV2019 bevorzuge…
(Wenn du jetzt mit LV2020 arbeitest, könntest du bitte dein Profil anpassen!)
Zu deiner Frage:
Schließt du die Datei nach dem EInlesen?
Öffnest du die Datei zum Schreiben erneut - und setzt dann auch explizit den Modus "Create or Replace"?
Oder manipulierst du explizit die Datei, sodass die Filegröße auf 0 Byte gesetzt wird und du den FilePosition-Pointer auf "0 Byte vom Anfang" setzt?
(22.09.2024 18:15 )Mechatroniker28 schrieb: [ -> ]Könnt ihr mir eventuell helfen, den Grund für dieses Verhalten zu identifizieren?
Guten Morgen,
hast du mal vorher und nachher verglichen? Oder das gleiche mit einer kleinen Datei (2 Zeilen) durchlaufen lassen?
Das 2te war zumindest mein Versuch und damit hab ich festgestellt, dass 'Write to text file' den Text hinten anhängt.
Vorschlag: Die geänderte Datei unter einem neuen Namen speichern ( 'Open File' mit 'Create' ).
Alternativ die Datei originaldatei verscheiben und eine neue mit dem gleichen Namen erstellen:
[
attachment=62830]
Vielen Dank GerdW & TpunktN, für die Hilfe!
Hat mir sehr geholfen, so sieht es aktuell aus:
[
attachment=62831]
Da sind aber noch 2 Fehler in der Ausgabe Datei, an 2 Stellen hat er die Änderung nicht übernommen.
Ich weiß aber nicht warum?
Sonst war die Änderungen überall richtig.
Vielen Dank im Voraus!
BG
Hallo Mechatroniker,
Zitat:Da sind aber noch 2 Fehler in der Ausgabe Datei, an 2 Stellen hat er die Änderung nicht übernommen.
Welche Änderung fehlt dir
konkret?
Wie sollte das Ergebnis aussehen?
(23.09.2024 08:51 )Mechatroniker28 schrieb: [ -> ]Da sind aber noch 2 Fehler in der Ausgabe Datei, an 2 Stellen hat er die Änderung nicht übernommen.
Sieht so aus als ob du mit nem Leerzeichen am Ende suchst, das findet er natürlich nicht, weil es das in der Textdatei nicht gibt.
[
attachment=62834]
Grüße Timo
Edith meint: Beim Write to file noch nen replace als konstante einfügen hilft zur Übersicht.
Vielen Dank!
Der bearbeitet immer eine Log-Datei, wie kann ich es so machen das alle Log-Dateien im Ordner bearbeitet werden sollen?
Vielen Dank!
Guten Morgen.
Du kannst nen Pfad als eingang nehmen und mit 'Recursive File List.vi' in 'Datei I/O' - 'Adv File funtions' dir eine liste aller Dateien in dem Ordner ausspucken, man kann auch ein 'pattern' angeben, zB nur alle *.log Dateien.
Grüße Timo