Dieser Beitrag ist schon älter. Bitte vergewissern Sie sich, dass die Rahmenbedingungen oder der enthaltene Lösungsvorschlag noch dem aktuellen Stand der Technik entspricht.

letzen vorkommenden Suchtext in einer Datei finden und in andere Datei einfügen bzw. ersetzen

Mitglied: CrazyCat-1
Gleich mal vorweg: Ich weiß es gibt schon ähnliche Themen in der Datenbank, aber die haben mir nicht wirklich weitergeholfen.

Ich suche einen Weg Daten zu aktualisieren.


Ich habe z.B. eine Datei namens 1234.dfx in der eine Reihe von Messwerten steht. Über den Key K0005 wird die Zeitangabe signalisiert.
Dieser Key und die Zeitangabe kommen in der dfx - Datei mehrfach vor.

Die letzte Zeitangabe nach dem dem K0005 soll gelesen werden und den Wert des Keys K1205 in der Datei 1234.dfd überschreiben.



Es kann vorkommen das mehrere dfd und dfx - Daten gleichzeitig im Verzeichnis sind. (z.B. 1234.dfd, 1234.dfx, 1235.dfd, 1235.dfx,....)
In diesem Fall soll die Zeitangabe der 1234.dfx in die 1234.dfd, die Zeitangabe der 1235.dfx in die 1235.dfd usw. übernommen werden.

Die Zeitangabe erfolgt im Format dd:mm:yy/hh:mm:ss

Ist so etwas über ein VB - SKript oder eine Batch - Datei realisierbar?

Ich lese mittlerweile schon stundenlang Optionslisten von DOS - Befehlen und komme einfach nicht weiter.

Content-Key: 33505

Url: https://administrator.de/contentid/33505

Ausgedruckt am: 27.11.2021 um 06:11 Uhr

Mitglied: Biber
Biber 02.06.2006 um 11:22:23 Uhr
Goto Top
Rückfrage:
Ist die Datei in der Form
K0005=dd:mm:yy/hh:mm:ss
....
K005=dd:mm:yy/hh:mm:ss
...

aufgebaut?

Dann zieht der FIND-Befehl alle K0005-Zeilen aus der Datei.

find "K0005" 1234.dfx

...und davon den letzten:

For /f "delims=" %i in ('find "K0005" 1234.dfx') do Set "lastK0005=%i"

Gruß
Biber
Mitglied: CrazyCat-1
CrazyCat-1 02.06.2006 um 11:33:55 Uhr
Goto Top
Das Format ist genaugesagt dieses K0005 02.06.06/12:12:12

Mit dem find Befehl finde ich die letzte Zeile in der der Key vorkommt, das weiß ich bereits.

Nur wie kann ich die Zeile kopieren und in eine andere Datei einfügen, das ganze nach Möglichkeit auch noch mit variablen Dateinamen, bei denen nur die Endung übereinstimmt?
Mitglied: Biber
Biber 02.06.2006 um 11:58:41 Uhr
Goto Top
Skizze:

Gruß
Biber
Mitglied: CrazyCat-1
CrazyCat-1 02.06.2006 um 12:23:28 Uhr
Goto Top
OK. Vorerst habe ich noch 2 Probleme.

1. Die Batch läuft nicht, Set last"K0005=K0005/0 0""0]=[]" ist syntaktisch an dieser Stelle nicht verarbeitbar.

2. Wie kann ich den Wert nach dem Änfügen in die DFD - Datei in eine bestimmte Zeile verschieben und den Eintrag in der Zeile überschreiben.
Momentan würde afaik der Wert an der letzten Zeile angefügt.
Mitglied: CrazyCat-1
CrazyCat-1 02.06.2006 um 12:56:24 Uhr
Goto Top
Planänderung!

Ich denke es ist einfacher eine weitere Datei zu senden, welche die Zeitangaben enthält.

Somit entfällt das Suchen.

Die Frage die sich jetzt stellt ist:

Wie verschiebe ich diese Angabe aus der letzen Zeile an eine bestimmte Stelle und überschreibe den alten Eintrag?

Zu beachten ist, das beim ersten Aufruf der Routine noch kein Eintrag zum Überschreiben vorhanden ist.
Mitglied: Biber
Biber 02.06.2006 um 19:48:14 Uhr
Goto Top
Hm, CrazyCat,

wenn es der späteren Lese-Routine der *.dfd-Datei nicht schadet, würde ich den alten Eintrag "K0005 bla..." einfach löschen mit
type NameDer.Dfd|find /v "K0005" >NameDer.dfd

und danach die neue Zeile ans Ende anhängen.
echo %LastK0005%>>NameDer.dfd.

Wenn es aber ein Erstzen einer bestimmte Zeile sein muss (weil der Eintrag in einer bestimmten [Section] sein muss, dann würde ich das mirt einem Search/Replace-Tool machen. Da hatten wir schon ein paar Beispiele für brauchbare Freeware-Tools in Batch und Shell.

Gruß & Vrohe Vinxten
Biber
Mitglied: CrazyCat-1
CrazyCat-1 06.06.2006 um 10:20:04 Uhr
Goto Top
An welcher Stelle der Eintrag steht sollte eigentlich egal sein, allerdings habe ich noch ein kleines Problem:

Das Löschen des alten Eintrages funktioniert nicht.

Ich habe das ganze in eine Batch - Datei intregriert:

Zuerst werden die dfx - Daten auf eine Datei zusammengefasst:

(@for /f "delims=_. tokens=1-3" %%i in ('dir /b /s /o:d c:\test\*_*.dfx') do (@type %%~dpnxi_%%j.%%k >> %%~dpnxi.%%k ))

Das funktioniert soweit.

Danach sollten der Eintrag K1205/0 und der Rest der Zeile gelöscht werden, sofern vorhanden.
Dies sollte mit dem Befehl

(@for /f "delims=_. tokens=1-3" %%i in ('dir /b /s /o:d c:\test\*.dfd') do (@type %%~dpnxi.%%k|find /v "K1205/0" > %%~dpnxi.%%k ))

erfolgen.
Dieser Befehl liefert mir aber eine leere dfd - Datei.

Anschließend wird die Zeile eingefügt mit dem Befehl

(@for /f "delims=_. tokens=1-3" %%i in ('dir /b /s /o:d c:\test\*_*.dfd') do (@type %%~dpnxi_%%j.%%k >> %%~dpnxi.%%k ))

Das funktioniert wieder.

Kannst du mir sagen wo der Fehler beim 2. Befehl liegt?
Mitglied: CrazyCat-1
CrazyCat-1 06.06.2006 um 11:43:22 Uhr
Goto Top
OK. Einen Fehler hab' ich gefunden. Ich hatte eine DFD - Datei in der nur diese Zeile stand.

Mit der wurde dann die neue Datei überschrieben.


Dafür wird jetzt die letzte Zeile nicht gelöscht. Die Zeile mit K1205/0 bleibt immmer stehen und neue Zeilen werden einfach am Ende angereiht.

Wieso wird die letzte Zeile nicht gelöscht?
Mitglied: CrazyCat-1
CrazyCat-1 06.06.2006 um 12:34:21 Uhr
Goto Top
Auch wenn's jetzt bald ein Monoloag wird:

Beim find - Befehl geht die Dateiendung verloren.

Es wird also versucht die Zeile in der Datei 1234. zu suchen, anstelle in der der Datei 1234.dfd.

Wie bekomme ich die Dateiendung wieder?
Mitglied: CrazyCat-1
CrazyCat-1 06.06.2006 um 13:32:16 Uhr
Goto Top
Des Monologes Fortsetzung:

Wenn ich die Datei 1234_dat.dfd dazunehme funktioniert der Befehl prinzipiell, aber die Daten aus dieser Datei will ich nicht dabei haben.

Wenn ich statt überschreiben, anhängen wähle, so wird die Datei bald endlos lang und die davor stehenden Einträge werden wieder nicht gelöscht.

Kann mir jetzt jemand helfen?
Mitglied: CrazyCat-1
CrazyCat-1 06.06.2006 um 14:01:48 Uhr
Goto Top
letzter Akt:

Problem gelöst!
Heiß diskutierte Beiträge
question
Installationsproblem Office 2021 - alle Links öffnen Edge! gelöst SarekHLVor 1 TagFrageMicrosoft Office14 Kommentare

Hallo zusammen, ich habe gerade Office 2021 auf einem Notebook installiert und habe ein seltsames Phänomen! Die Verknüpfungen zu den Office-Programmen führen allesamt zu Edge! ...

question
Umzug von Hyper-V zu VMware und erneute Aktivierung von Windowspianoman82Vor 1 TagFrageWindows Server10 Kommentare

Hallo! Ich habe eine Frage im Hinblick auf Windows-Aktivierung da mir hier aktuell der Ansatz fehlt. Es geht um die Migration von diversen Windows Server ...

question
VPN Tunnel inkonsistent? gelöst NespressoVor 1 TagFrageNetzwerkprotokolle4 Kommentare

Hallo zusammen, das Thema VPN ist bei mir recht neu, doch habe ich es hinbekommen den Windows Server 2016 eigenen VPN dienst zu konfigurieren und ...

question
WSUS Problem mit Office + ExplorerfrenchfriesguyVor 1 TagFrageWindows Update7 Kommentare

Hallo zusammen ich/wir haben folgendes Problem mit einem Teil unseres Windows-Clients (W10E, 20H2) in Verbindung mit den Windows Updates. Die Updates werden über einen WSUS-Server ...

question
Eigener Server für Groupware und Nextcloudjonny-flashVor 1 TagFrageE-Mail5 Kommentare

Hallo zusammen, ich darf für ein kleines Startup temporär die Administration übernehmen, und habe bevor es los geht ein paar Fragen, die ich hier gern ...

question
VPN- 2 Sicherheitsfunktionen gelöst TekamolosVor 1 TagFrageVerschlüsselung & Zertifikate3 Kommentare

Hallo Jungs, beim Lernen habe ich diese Frage bekommen, da es im Internet sehr viel über VPN und viel Text und Protokolle gibt, war ich ...

question
Über das Notebook per Simkarte von unterwegs aus ins Internet?isarc01Vor 19 StundenFrage5G, 4G, LTE, UMTS, EDGE & GPRS8 Kommentare

Hallo, folgende Frage: Wenn ich über mein Notebook über eine angemeldete SIM Karte mit einer Datenflatrate ins Internet gehen möchte, benötige ich hier einen bestimmten ...

question
Mobilfunk-Internet ins Heimnetzwerk integrieren? gelöst AvarianVor 13 StundenFrageNetzwerkmanagement6 Kommentare

Hallo, Ich bin neu hier. Wir sind vorletztes Jahr umgezogen. Die Gelegenheit habe ich damals direkt genutzt, um künftig auf wackelige WLAN-Lösungen (Repeater, Mesh-Repeater, Powerlines ...