Textdatei auslesen und verarbeiten
Hallo,
Ein Programm schreibt mir unregelmäsig eine Zeile in eine Textdatei. Dabei kommt es vor das diese Zeile aber schon vor einem Tag, bzw einer Stunde in die Textdatei geschrieben worden ist.
Ich würde gerne eine Bat schreiben die die neu geschrieben Zeile (immer die letzte) mit allen anderen Zeilen vergleicht wenn diese schon vorhanden ist soll nichts passieren, wenn diese noch nicht vorhanden ist soll sie in eine andere Textdatei geschrieben werden.
Ist das möglich?
Ist das auch echtzeit möglich? da manchmal mehrere zeilen inerhalb weniger sekunden in die datei geschrieben werden.
Dank schon mal für Ideeen, Vorschläge und Lösungen.
Ein Programm schreibt mir unregelmäsig eine Zeile in eine Textdatei. Dabei kommt es vor das diese Zeile aber schon vor einem Tag, bzw einer Stunde in die Textdatei geschrieben worden ist.
Ich würde gerne eine Bat schreiben die die neu geschrieben Zeile (immer die letzte) mit allen anderen Zeilen vergleicht wenn diese schon vorhanden ist soll nichts passieren, wenn diese noch nicht vorhanden ist soll sie in eine andere Textdatei geschrieben werden.
Ist das möglich?
Ist das auch echtzeit möglich? da manchmal mehrere zeilen inerhalb weniger sekunden in die datei geschrieben werden.
Dank schon mal für Ideeen, Vorschläge und Lösungen.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 134588
Url: https://administrator.de/forum/textdatei-auslesen-und-verarbeiten-134588.html
Ausgedruckt am: 17.07.2025 um 16:07 Uhr
16 Kommentare
Neuester Kommentar
Moin Erwin86,
wenn ich deine Anforderung mal von den erwarteten End-Ergebnissen aus betrachte, dann sieht es für mich so aus, als
Das hört sich für mich nicht danach an, dass diese zweite Anforderung nun unbedingt mit einer physischen 1:1-Kopie aller Datenzeilen (abzgl. Duplikate) gemacht werden müsste mit einem Text-Bearbeitungswerkzeug (Batch oder Skript).
Sondern eher nach einem Zugriff auf diese Textdatei mit irgendetwas, was SQL spricht.
Hast Du nicht auf dem Rechner, wo daa Ganze fliegen soll, irgendein Access/mySQL o.ä. am Laufen?
Denn eine Datensynchronität "in Echtzeit" geht naturgemäß am Einfachsten, wenn es nur EINE Datenquelle gibt statt eine unsortierte/unbereinigte Originaldatei und eine sortierte gefilterte Kopie.
Grüße
Biber
wenn ich deine Anforderung mal von den erwarteten End-Ergebnissen aus betrachte, dann sieht es für mich so aus, als
- würde heute und in Zukunft ohne dein Zutun/ohne Möglichkeit der Einflussnahme eine Textdatei von einem Programm geschrieben, die streng chronologisch neue Zeilen ans Ende einer Textdatei anfügt, wobei auch identische ("doppelte") Zeilen dabei geschrieben werden können
- parallel dazu möchtest du eine Datensicht, in der alle Datenzeilen "unique", einmalig vorhanden sind.
Das hört sich für mich nicht danach an, dass diese zweite Anforderung nun unbedingt mit einer physischen 1:1-Kopie aller Datenzeilen (abzgl. Duplikate) gemacht werden müsste mit einem Text-Bearbeitungswerkzeug (Batch oder Skript).
Sondern eher nach einem Zugriff auf diese Textdatei mit irgendetwas, was SQL spricht.
Hast Du nicht auf dem Rechner, wo daa Ganze fliegen soll, irgendein Access/mySQL o.ä. am Laufen?
Denn eine Datensynchronität "in Echtzeit" geht naturgemäß am Einfachsten, wenn es nur EINE Datenquelle gibt statt eine unsortierte/unbereinigte Originaldatei und eine sortierte gefilterte Kopie.
Grüße
Biber
Ist das auch echtzeit möglich? da manchmal mehrere zeilen inerhalb weniger sekunden in die datei geschrieben werden.
damit hast du zumindest deine letzte Frage selbst beantwortet!NEIN
Du kannst dir deine Textdatei auslesen bis zur letzten Zeile und eventuell ein findstr dann losjagen und abfragen, ob es diese Zeile schon gibt. Wenn nicht, dann abspeichern.
Gruss
Tsuki
Du kannst dir deine Textdatei auslesen bis zur letzten Zeile und eventuell ein findstr dann losjagen und abfragen, ob es diese Zeile schon gibt. Wenn nicht, dann abspeichern.
... also etwa so:@echo off & setlocal
set "Quelle=D:\Textdatei.txt"
set "Ziel=D:\Sammel.txt"
if not exist "%Ziel%" copy nul "%Ziel%">nul
set "Letzte="
for /f "usebackq delims=" %%i in ("%Quelle%") do set "Letzte=%%i"
if not defined Letzte echo "%Quelle%" ist leer! & goto :eof
set "Anz=0"
for /f %%i in ('findstr /x /c:"%Letzte%" "%Quelle%"') do set /a Anz+=1
if %Anz% gtr 1 findstr /x /c:"%Letzte%" "%Ziel%">nul || >>"%Ziel%" echo %Letzte%
if %Anz% gtr 1 >>"%Ziel%" echo %Letzte%
Abgesehen von der "Machbarkeit" sollte aber Bibers Überlegung hinsichlich "Sinnhaftigkeit" nicht untergehen ...
Grüße
bastla
[Edit] Korrekturen (überzähliges "delims" entfernt) bzw Ergänzungen nachgetragen ... [/Edit]
Moin TsukiSan und bastla,
jetzt kommt doch garantiert als Nachklappfrage :"Oh toll, und wie kann ich jetzt das Script rund um die Uhr 7*24*365 laufen lassen, damit ich die bereinigte Kopie in Echtzeit habe?"
und vielleicht etwas verschämt der Zusatz :" okay, ich werde wohl nicht 7*24*365 diese Kopie lesen wollen, sondern meist nur jeden Dienstag mittag vor dem Meeting, aber ich will es immer TOPAKTUELL."
Das ist doch mit Melonen auf Spätzle schießen oder wie das heißt.
Oder ich formuliere es mal anders:
Angenommen, die Brahmanen/Hindus haben Recht und wir werden -sollten wir es verdient haben- ständig wiedergeboren.
Davon statistisch gesehen allerdings nur jedes 10te Mal als intelligente Lebensform, meist allerdings als Hund, Darmbakterium, Koralle oder Babelfisch.
Unter Umständen auch mal als Batch.
Möchtet ihr dann den ganzen Tag so einen Unsinn machen?
Grüße
Biber
jetzt kommt doch garantiert als Nachklappfrage :"Oh toll, und wie kann ich jetzt das Script rund um die Uhr 7*24*365 laufen lassen, damit ich die bereinigte Kopie in Echtzeit habe?"
und vielleicht etwas verschämt der Zusatz :" okay, ich werde wohl nicht 7*24*365 diese Kopie lesen wollen, sondern meist nur jeden Dienstag mittag vor dem Meeting, aber ich will es immer TOPAKTUELL."
Das ist doch mit Melonen auf Spätzle schießen oder wie das heißt.
Oder ich formuliere es mal anders:
Angenommen, die Brahmanen/Hindus haben Recht und wir werden -sollten wir es verdient haben- ständig wiedergeboren.
Davon statistisch gesehen allerdings nur jedes 10te Mal als intelligente Lebensform, meist allerdings als Hund, Darmbakterium, Koralle oder Babelfisch.
Unter Umständen auch mal als Batch.
Möchtet ihr dann den ganzen Tag so einen Unsinn machen?
Grüße
Biber
@Biber
) ...
... aber ich verweise gerne nochmals auf
Grüße
bastla
Möchtet ihr dann den ganzen Tag so einen Unsinn machen?
Kommt auf die Alternativen an (und damit ist noch nicht einmal der Vergleich zum "Darmbakterien-Job" gemeint ... aber ich verweise gerne nochmals auf
Abgesehen von der "Machbarkeit" sollte aber Bibers Überlegung hinsichlich "Sinnhaftigkeit" nicht untergehen ...
Grüße
bastla
also ich würd ja besagte batch nur wärend das "Ein Programm" läuft höchstens alle zehn minuten prüfen lassen oder gar nur einmal am Ende und die geforderten Zeilen Loggen.
@ bastla würde es nicht ausreichen nach den letzten Schreibzugriff dieser Datei zu "fragen" und erst ab .... hach da fehlen ja wieder die sekunden.....
Gruß Phil
@ bastla würde es nicht ausreichen nach den letzten Schreibzugriff dieser Datei zu "fragen" und erst ab .... hach da fehlen ja wieder die sekunden.....
Gruß Phil
Hallo Erwin86!
Leider hatte ich offensichtlich nicht genau genug gelesen ...
Die letzte Batchzeile müsste eigentlich lauten:
Soferne (wie es nach dem geposteten Batchlauf zu vermuten ist) die letzte Zeile der "Textdatei" nicht mit einer Zeilenschaltung endet, wäre noch der Wert 1 auf 0 zu ändern, also:
Grüße
bastla
Leider hatte ich offensichtlich nicht genau genug gelesen ...
Die letzte Batchzeile müsste eigentlich lauten:
if %Anz%==1 findstr /x /c:"%Letzte%" "%Ziel%">nul || >>"%Ziel%" echo %Letzte%
if %Anz%==0 findstr /x /c:"%Letzte%" "%Ziel%">nul || >>"%Ziel%" echo %Letzte%
bastla
Hallo Erwin86,
Was, wenn die Ausgangsdatei zufällig in diesem Moment gelöscht wird?
Was, wenn gerade Stromausfall ist?
und, und, und......
Mach es dir doch einfach und wie oben schon einmal angemerkt:
vergiss in deinen Fall die "Echzeit"-geschichte. Das bringt dich nur auf krumme Ideen und zu viele "IFs"
Frage sie aller paar Minuten oder Stunden - oder besser noch! - einmal kurz vor Feierabend ab.
Dann hast du den letzten Stand an Daten und ein Batch muss nur einmal ausgeführt werden. Damit hat es (dein Batch) weiniger Chancen, Fehler zu machen und es wird weniger von menschlichen Fehlern beeinflußt.
Gruss
Tsuki
Was ist jetzt wenn 2 Zeilen datzukommen befor das skript nochmal die Textdatei.txt checked? dann nimmt er nur die letzte zeile und prüft diese und die vorletzte bearbeitet er nicht.
Was, wenn die Ausgangsdatei zufällig in diesem Moment gelöscht wird?
Was, wenn gerade Stromausfall ist?
und, und, und......
Mach es dir doch einfach und wie oben schon einmal angemerkt:
vergiss in deinen Fall die "Echzeit"-geschichte. Das bringt dich nur auf krumme Ideen und zu viele "IFs"
Frage sie aller paar Minuten oder Stunden - oder besser noch! - einmal kurz vor Feierabend ab.
Dann hast du den letzten Stand an Daten und ein Batch muss nur einmal ausgeführt werden. Damit hat es (dein Batch) weiniger Chancen, Fehler zu machen und es wird weniger von menschlichen Fehlern beeinflußt.
Gruss
Tsuki
Hallo Erwin86!
Abgesehen von Tsukis Anmerkungen: Ließe sich denn Dein Ziel - ursprünglich war das ja einmal
... aber umsetzen solltest Du das so können:
Grüße
bastla
Abgesehen von Tsukis Anmerkungen: Ließe sich denn Dein Ziel - ursprünglich war das ja einmal
Bat ... die die neu geschrieben Zeile (immer die letzte) mit allen anderen Zeilen vergleicht
- nicht umformulieren auf: Alle Zeilen der "Textdatei" sollen genau einmal in die "Sammel"-Datei übertragen werden? Dann würde es genügen, für alle Zeilen die "Sammel"-Datei zu durchsuchen. Wie zeitnah das sein soll, musst Du natürlich selbst wissen ...... aber umsetzen solltest Du das so können:
@echo off & setlocal
set "Quelle=D:\Textdatei.txt"
set "Ziel=D:\Sammel.txt"
if not exist "%Ziel%" copy nul "%Ziel%">nul
for /f "usebackq delims=" %%i in ("%Quelle%") do findstr /x /c:"%%i" "%Ziel%">nul || >>"%Ziel%" echo %%i
bastla
Moin Erwin86,
und noch abstrakter als Tsuki Sans und bastlas Aspekte die Fragen:
Ich würde jedenfalls ungern diesen Beitrag auf als "Gelöst" gesetzt sehen, weil ich irgendwie das Gefühl habe, wir haben zwar auf die wortwörtliche Frage geantwortet, aber es sieht doch nicht nach einer "Lösung" aus.
Bitte zerstreue meine Bedenken...
Grüße
Biber
und noch abstrakter als Tsuki Sans und bastlas Aspekte die Fragen:
- Was ist denn dein Ziel aus Prozesssicht jenseits der handwerklich-technischen Umsetzung?
- WofürTF brauchst du - und vor allem wie oft- eine Sicht auf die einmalig vorhandenen diskreten Einträge in der stupide weggeschriebenen Wucherdatei?
- Und was kannst du damit tatsächlich anfangen? (Beispiel: Wenn in der chronologisch geschriebenen Datei 2 Mio Zeilen sind und du durch Sortieren und Eindampfen auf "nur" 20000 unterschiedliche Zeilen kommst - ja hey! Auch dieser Zustand versetzt dich doch nicht in die Lage, zu irgendetwas scnnell aussagefähig zu sein. Folgen da Auswertungen oder Kategorisierungen oder was ist der Plan?
Ich würde jedenfalls ungern diesen Beitrag auf als "Gelöst" gesetzt sehen, weil ich irgendwie das Gefühl habe, wir haben zwar auf die wortwörtliche Frage geantwortet, aber es sieht doch nicht nach einer "Lösung" aus.
Bitte zerstreue meine Bedenken...
Grüße
Biber