drunkenape
Goto Top

Suchen und ersetzen von einer Zeile bzw. Text

Ich bin derzeit an meiner Projektarbeit tätig und wollte zur Auswertung meiner xxBasteln.txt Datei einige Werte änder lassen und dann wieder einlesen lassen.

Hallo zusammen,

ich habe folgendes Problem:

ich habe mir eine batch Datei geschrieben, welche folgenden Namen hat: xxBasteln.bat. Folgende Befehle zum suchen und ersetzen sind in dieser Datei:

@echo off & setlocal enabledelayedexpansion
set "Datei=xxBasteln.txt"
set "Von=vx=+00"
set "Nach=vx=+20"
set "t=%temp%\text.tmp"
if exist "%t%" del "%t%"
for /f "usebackq delims=" %%i in ("%Datei%") do set "Line=%%i" & set "Line=!Line:%Von%=%Nach%!" & echo !Line!>>"%t%"
move "%t%" "%Datei%"

Das suchen und ersetzen an sich verläuft auch optimal leider interpretiert er das = von vx=+00 schon als ausführparamerter für den ersetzen Befehl.

Die xxBasteln.txt sieht so aus: vx=+00

Nach dem suchen ersetzten sollte: vx=+20 da stehen.

Allerdings steht dann: +00=vx=+20=+00

Kann mir jemand helfen oder en tipp geben wie ich diese Problem lösen kann???

Grüße
DrunkenApe (Georg)

Content-Key: 130999

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

Printed on: April 19, 2024 at 17:04 o'clock

Member: bastla
bastla Dec 05, 2009 at 11:56:23 (UTC)
Goto Top
Hallo DrunkenApe und willkommen im Forum!

Wenn in CMD ein Zeichen mit besonderer Bedeutung (hier eben "=") als "gewöhnlicher" Text behandelt werden soll, muss dieses per "^" maskiert werden - daher:
set "Von=vx^=+00"  
set "Nach=vx^=+20"  
Grüße
bastla
Member: it-frosch
it-frosch Dec 05, 2009 at 12:24:36 (UTC)
Goto Top
Hallo Georg,

unter Linux würdest du das Problem so lösen können

sed 's/vx=+00/vx=+20/g' c:\xxBasteln.txt > c:\xxBasteln_neu.txt

Du könntest dein Windows PC mit einer Linux CD (Knoppix) starten und dann an der Befehlszeile den Befehl ausführen.

Grüße vom IT-Frosch
Member: bastla
bastla Dec 05, 2009 at 12:33:55 (UTC)
Goto Top
@it-frosch
Abgesehen davon, dass es "sed" auch für Windows gibt: Wenn DrunkenApe keine automatisierte Lösung bräuchte, würde auch ein Editor reichen ... face-wink

Grüße
bastla
Member: DrunkenApe
DrunkenApe Dec 05, 2009 at 13:31:55 (UTC)
Goto Top
Hallo zusammen,

danke für die schnellen Antworten. Das mit dem "^" habe ich ausprobiert geht aber leider nicht da er es als suchoption ansieht, in der *.txt wird also leider dann gar nix geändert.

Mit dem sed Befehl geht es allerdings musste ich ein Add-On installieren, was den Nachteil hat, dass es wenn ich das File meinem Prof gebe nicht mehr funktioniert, bzw. mein Prof es auch installieren muss.

Die Lösung mit dem editor geht leider nicht muss automatisiert sein, da ich das Programm aus MatLab heraus starte dieses öffnet Ansys führt über Ansys eine Berechnung aus, diese Berechnung werden dann verarbeitet und sollen dann wieder in MatLab zur Analyse eingelesen werden.

Gibt es also noch eine Lösung ohne dass ich etwas zusätzlich installieren muss?

Grüße
DrunkenApe (Georg)
Member: it-frosch
it-frosch Dec 05, 2009 at 15:32:58 (UTC)
Goto Top
Hallo Georg,

wenn dir meine Antwort auch nicht helfen konnte so habe ich jetzt eine Weile gesucht und nur das

http://www.wer-weiss-was.de/theme9/article799367.html

gefunden.

Schau mal ob es dir hilft.

Viel Erfolg noch.
Member: TsukiSan
TsukiSan Dec 05, 2009 at 15:48:34 (UTC)
Goto Top
Hallo DrunkenApe,

hilft dir das in VBS eventuell weiter?
Set FSO = CreateObject("Scripting.FileSystemObject")  
Set Basteln = FSO.OpenTextFile("C:\basteln.txt", 1)  
BastelnNeu = Basteln.ReadAll
Basteln.Close
BastelnNeu = Replace (BastelnNeu, "vx=+00" , "vx=+20")  
Set Basteln = FSO.CreateTextFile("C:\basteln.txt", True)  
Basteln.WriteLine (BastelnNeu)
Basteln.Close

Gruss
Tsuki
Member: TsukiSan
TsukiSan Dec 05, 2009 at 15:58:57 (UTC)
Goto Top
Welche der Lösungen, war denn nun die richtige?
Darf man das eventuell - im Zuge der Adventszeit - erfahren?
Member: DrunkenApe
DrunkenApe Dec 05, 2009 at 16:08:03 (UTC)
Goto Top
Hallo,

hab mich nun für die Lösung mit dem sed Befehl entschieden da es eine kleine zusatzdatei von 2mb nur benötigt und ich denk des kann ich meinem prof zumuten.

Ich danke allen nochmals für die zahlreiche und schnelle Hilfe!

Grüße
DrunkenApe (Georg)
Member: Biber
Biber Dec 05, 2009 at 16:39:28 (UTC)
Goto Top
Moin DrunkenApe,

jetzt hast du schon ein, zwei Lösungen in der Hinterhand.

Also könntest du doch jetzt, weil du eigentlich deinem Prof zeigen sollst, dass du eine eigene Lösung umsetzen kannst, folgendes versuchen:

  • und zwar nur mit Batch- und vorhandenen Befehlen (ohne SED und ohne VBS)
  • aufbauend auf deinem geposteten Ansatz ganz oben
  • das SUCHEN auf "vx=+00" durchzuführen
  • aber das ERSETZEN dann nur noch von "+00" auf "+20" einzuschränken.

Dann hast du das Ausnahme-Problem (Sonderfall Gleichheitszeichen im der benötigten Syntax enthalten) doch umgangen.

Grüße
Biber
Member: DrunkenApe
DrunkenApe Dec 05, 2009 at 17:20:24 (UTC)
Goto Top
Hallo Biber,

das Problem ist dabei nur, dass ich mehrer Werte noch in der *.txt stehen hab die mit +00 oder +20 definiert sind, diese würden dann alle umgeschrieben werden. Er sucht ja mit dem oben geposteten Ansatz nur nach vx weil er dass = ja schon als Umsetzungsparameter interpretiert.

Grüße
DrunkenApe
Member: bastla
bastla Dec 05, 2009 at 17:35:07 (UTC)
Goto Top
@tsuki
Kurzer Hinweis: Wenn Du in Zeile 7 "WriteLine" verwendest, enthält die Datei nach dem Umbenennen eine zusätzliche Zeilenschaltung am Ende ...

Grüße
bastla
Member: bastla
bastla Dec 05, 2009 at 18:09:16 (UTC)
Goto Top
Hallo DrunkenApe!

Soferne sich nicht in der selben Zeile wie jener mit dem String "vx=+00" ein anderes "+00" befindet, ist Bibers Vorschlag mit Batch umsetzbar ...

Grüße
bastla
Member: TsukiSan
TsukiSan Dec 06, 2009 at 03:39:11 (UTC)
Goto Top
@bastla,

danke, aber das war mir bewusst. Mir ging es nur um einen prinzipiellen, anderen Loesungsweg.

Aber der TO hat's ja schon als geloest markiert und sich fuer die "sed" Methode entschieden.
Wenn es jemand interessiert, wie man die letzte Zeile mit dem VBS-Dinges nicht bekommt, kann er ja fragen face-wink

Einen schoenen 2ten Advent uns allen!

Tsuki