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: 15.04.2025 um 17:04 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