Durch Leerzeichen getrennte Wörter Filtern
Hallo,
ich hoffe mir kann jemand weiterhelfen. Ich habe mit den Infos aus dem Forum schon mal etwas rumprobiert aber noch zu keiner guten Lösung gekommen.
Ich habe eine Datei mit folgendem Aufbau
wobei das M tatsächlich auch da ist.
Nun würde ich die Informationen gerne in eine neue Datei schreiben, die dann in etwa so aussehen soll.
Weiß jemand Rat?
Danke und Gruß,
Mario
ich hoffe mir kann jemand weiterhelfen. Ich habe mit den Infos aus dem Forum schon mal etwas rumprobiert aber noch zu keiner guten Lösung gekommen.
Ich habe eine Datei mit folgendem Aufbau
848 820 harry Src\Forms\obj\Release\res_1.resources
848 820 harry Src\Forms\obj\Release\res_2.resources
M 848 822 stefan Src\Forms\obj\Release\res_3.cache
848 820 harry Src\Forms\obj\Release\res_4.resources
848 820 harry Src\Forms\obj\Release\res_5.resources
wobei das M tatsächlich auch da ist.
Nun würde ich die Informationen gerne in eine neue Datei schreiben, die dann in etwa so aussehen soll.
Repository revision: 820 Src\Forms\obj\Release\res_1.resources
Repository revision: 820 Src\Forms\obj\Release\res_2.resources
Repository revision: 822 Src\Forms\obj\Release\res_3.cache
Repository revision: 820 Src\Forms\obj\Release\res_4.resources
Repository revision: 820 Src\Forms\obj\Release\res_5.resources
Weiß jemand Rat?
Danke und Gruß,
Mario
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 143737
Url: https://administrator.de/contentid/143737
Ausgedruckt am: 19.11.2024 um 20:11 Uhr
5 Kommentare
Neuester Kommentar
Hallo Mario,
gesetz dem Fall, dein Dateiaufbau ist immer so und es gibt nur so ein vereinsamtes "M", dann
könnte dir dieses Schnipsel in VBS eventuell weiterhelfen:
Gruss
Tsuki
[Edit]
Bitte bei dem Schnipsel noch den Pfad und Dateinamen anpassen
[/Edit]
gesetz dem Fall, dein Dateiaufbau ist immer so und es gibt nur so ein vereinsamtes "M", dann
könnte dir dieses Schnipsel in VBS eventuell weiterhelfen:
Set FSO = CreateObject("Scripting.FileSystemObject")
Set MeineDatei = FSO.OpenTextFile("D:\3\Test.txt", 1)
MeineDateiNeu = MeineDatei.ReadAll
MeineDateiNeu = Replace (MeineDateiNeu, "M 848" , " Repository revision:")
MeineDateiNeu = Replace (MeineDateiNeu, "848" , "Repository revision:")
MeineDatei.Close
Set MeineDatei = FSO.CreateTextFile("D:\3\Test1.txt", True)
With MeineDatei
.Write (MeineDateiNeu)
.Close
End With
Gruss
Tsuki
[Edit]
Bitte bei dem Schnipsel noch den Pfad und Dateinamen anpassen
[/Edit]
Hallo Mario,
die genauen Offset,Länge Werte und Anzahl Leerzeichen musst du dir selber raussuchen.
Aber du kannst ja zählen/ablesen
Gruß
LotPings
die genauen Offset,Länge Werte und Anzahl Leerzeichen musst du dir selber raussuchen.
@Echo off&Setlocal
Set InFile=D:\Test\test1.txt
Set OutFile=D:\test\Test2.txt
For /F "delims=" %%A in (%InFile%) do Set "Line=%%A" & Call :ProcLine
Goto :Eof
:ProcLine
>> %OutFile% Echo. Reposi... %Line:~25,3% %Line:~41%
Aber du kannst ja zählen/ablesen
1 2 3 4 5 6 7 8
12345678901234567890123456789012345678901234567890123456789012345678901234567890
848 820 harry Src\Forms\obj\Release\res_1.resources
848 820 harry Src\Forms\obj\Release\res_2.resources
M 848 822 stefan Src\Forms\obj\Release\res_3.cache
848 820 harry Src\Forms\obj\Release\res_4.resources
848 820 harry Src\Forms\obj\Release\res_5.resources
1 2 3 4 5 6 7 8
12345678901234567890123456789012345678901234567890123456789012345678901234567890
Repository revision: 820 Src\Forms\obj\Release\res_1.resources
Repository revision: 820 Src\Forms\obj\Release\res_2.resources
Repository revision: 822 Src\Forms\obj\Release\res_3.cache
Repository revision: 820 Src\Forms\obj\Release\res_4.resources
Repository revision: 820 Src\Forms\obj\Release\res_5.resources
Gruß
LotPings
Zitat von @Mario.Steinberg:
Was genau macht Goto :Eof ? Musste ich das Label tatsächlich noch ergenzen?
Nein :Eof ist ein Standardmäßig gesetzter Label für End of File.Was genau macht Goto :Eof ? Musste ich das Label tatsächlich noch ergenzen?
Ein goto :Eof (!wichtig! mit Doppelpunkt) bewirkt einen Rücksprung aus einer Sub oder das Ende des Hauptteils.
Es verhindert hier das der Haupteil in die Sub durchläuft.
Ich habe folgendes geschrieben:
> For /F "delims=" %%A in (%VDD_TEMP%) do Set "Line=%%A" & Call :ProcLine
> Goto :Eof
> :ProcLine
> >> %VDD_FILE% Echo. Repository revision: %Line:~25,3% %Line:~41%
> :Eof
>
> rm %VDD_TEMP%
>
Es scheint als ob das rm jetzt in der Schleife aufgerufen wird!??
(Es wird mit :: auch häufig als Kommentar "missbraucht" )
Gibt es eine Möglichkeit den Ausdruck ohne die Funktion :ProcLine zu schreiben z.B.
Ja, hast du ja schon herausgefunden. Du brauchst dafür Setlocal EnableldelayedExpansion
und bekommst ggfs. mit Ausrufezeichen im Text Probleme.Würde auch
funktionieren?
JA, aber nur innerhalb der Schleife oder innerhalb einer von dort aufgerufenen Sub, da sich der Wert ja mit jeder Zeile der gelesenen Datei ändert.> echo Repository revision: %Line:~25,3% %Line:~41% >> %VDD_FILE%
>
Was macht der . hinter Echo?
Das ist nur ein alternativer Befehlstrenner (statt Leerzeichen gehen auch .,;;\/
und soll das Zählen der Leerzeichen erleichtern, da der Trenner ja nicht mitgezählt wird.Gruß
LotPings