mabue88
Goto Top

Zeichen in .txt durch batch ersetzen

Hi,

ich habe ich in dem Forum schon etwas umgeschaut, aber ich bin nicht an mein Ziel gekommen.

Ich benötige eine batch-Datei, die mir in einer txt-Datei (z.B. test.txt) nach den Zeichen < > sucht und diese beide Zeichen durch ein Leerzeichen ersetzt.

Ich bin für jede Hilfe dankbar.
Vielen Dank schon mal

Matze

Content-Key: 115410

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

Printed on: April 25, 2024 at 07:04 o'clock

Mitglied: 78322
78322 May 06, 2009 at 10:01:24 (UTC)
Goto Top
Möchtest du eine .txt in eine .bat umwandeln oder möchtest du einen Text durchsuchen lassen ?
Member: mabue88
mabue88 May 06, 2009 at 10:02:47 (UTC)
Goto Top
Ich möchte eine bestehende txt-Datei durchsuchen lassen und diese ändern lassen. Die Batch soll dabei diese Aufgaben ausführen.
Member: Biber
Biber May 06, 2009 at 10:40:27 (UTC)
Goto Top
Moin mabue88,

dazu wäre ein 5-Zeiler in VBSkript eleganter und angebrachter.

Hatten wir auch schon mehrfach - suche mal nach "ReadAll" in der Forumssuche

Grobe Skizze für eine schnipsel.vbs [absolut ungetestet]
strQuelle = "c:\test\original\DeinText.txt"  
' strZiel = "c:\test\kopie\Deintext.txt"  

Set fso = CreateObject("Scripting.FileSystemObject")  
strContent = Replace(Replace(fso.OpenTextFile(strQuelle, 1).ReadAll, "<",""), ">",""))  

WScript.echo strContent
....
' und dann strContent in eine neue (oder alte) Datei schreiben.  
...

Grüße
Biber
Member: Der-Phil
Der-Phil May 06, 2009 at 10:54:54 (UTC)
Goto Top
Hi!

Nicht schön, aber einfach:
Nutzer in der Batch-Datei "SED": http://gnuwin32.sourceforge.net/packages/sed.htm

Damit kannst Du richtig einfach Zeichen ersetzen.

Phil
Member: akrupp2
akrupp2 May 08, 2009 at 08:56:36 (UTC)
Goto Top
Hi,
damit ist doch die Frage von mabue88, wie man das mit einem Batch-Skript löst, nicht beantwortet, oder?
Ich hab nämlich ein ähnliches Problem:

Ich habe ein Skript geschrieben, welches aus einer Ersetzungsliste den "Suchstring" und den "Ersetzenstring" holt und in einer Datei die entsprechenden Strings sucht und durch einen anderen ersetzt.
Dies alles klappt auch wunderbar -jedenfalls in meiner angelegten Testdatei -. Nun habe ich das Problem, dass in der Eigentlichen Textdatei auch das Zeichen ">" vorkommt, welches zum folgenden Problem führt.
Beispiel:

Ersetzungsliste:
String1|String2
String3|String4


Meine Testdatei sah vorher so aus:
text text etxt text text String1 Test text text bla bla bla
bla blubb blubber bla bla text String3 bla blubb text text
´


Nach ausführen des Skriptes sah die Testdatei so aus:
text text etxt text text String2 Test text text bla bla bla
bla blubb blubber bla bla text String4 bla blubb text text

Also zunächst alles schön und gut. Habe mich natürlich gefreut, dass das so gut klappt.
Jetzt ist es aber so, dass die eigentlich Originaldatei beispielsweise so aussieht:
text text etxt text text <String1> Test text text bla bla bla
bla blubb blubber bla bla text <String3> bla blubb text text

Und schon funktioniert das Skript nicht mehr. Stattdessen werden Dateien Namens: "Test" und "bla" angelegt, die als inhalt dn String bis tzu diesem Zeichen festhalten (z.B.: text text etxt text text <String1)
Dummerweise wird das Zeichen ">" beim suchen als falsch interpretiert. Anstatt dieses Zeichen als einfaches Textzeichen zu behandeln, wird es als Befehl, die vorhergehenden Zeichen in die Datei mit dem Namen, der nach dem ">" folgenden Zeichenkette, zu schreiben.

Hat da jemand ne Idee, wie ich es schaffe, dass das ">" als einfaches Textzeichen behandelt wird?
Member: Biber
Biber May 08, 2009 at 10:18:05 (UTC)
Goto Top
Moin akrupp2,

Hat da jemand ne Idee, wie ich es schaffe, dass das ">" als einfaches Textzeichen behandelt wird?
Ich würde dieses Zeichen maskieren.

Mit welchem Tool SED versuchst Du es denn gerade und wie werden dort Zeichen maskiert?
Doch vermutlich mit einem "\", oder was sagt die Hilfe?

Grüße
Biber
Member: akrupp2
akrupp2 May 08, 2009 at 11:54:02 (UTC)
Goto Top
Ich benutze gar kein Tool. Wird alles mit Batch-Skript Befehlen gelöst.
Ich hab aber jetzt ne Möglichkeit gefunden, wie er das Zeichen nicht als Steuerzeichen verwendet, jedoch habe ich dann an der Stelle die "Anführungszeichen" zu viel.

Wenn ich beim zurückschreiben der geänderten Zeile:

t= temp.tmp
L= 'Die Zeile mit den Ersetzten Werten'

"%t%" ECHO "%L%" STATT: >>"%t%" ECHO %L% schreibe, dann geht es.

Das Ergebins ist dann jedoch nicht mehr <String2>, sondern "<String2>"

Soll eigentlich nicht so sein.
Member: akrupp2
akrupp2 May 08, 2009 at 14:17:55 (UTC)
Goto Top
Ich bin mittlerweile am überlegen, ob ich das nicht besser mit VB lösen sollte, aber da hab ich auch leider nicht wirklich einen Plan wie. Ich hab in VB auch nur Basics drauf. Prinzipiell wäre es für mich kein Problem so lange zu tüfteln und zu suchen bis ich mir es selbst beigebracht habe, wenn da nicht der Zeitdruck wäre.
Ich versuche mal mein Problem (möglichst verständlich) zu erklären:


HINTERGRUNDINFORMATION
Ich bin auf meiner Arbeit verantwortlich für die Administration sämtlicher Korrespondenzvorlagen. Diese Brief- und Vertragsvorlagen basieren aber nicht auf Word. Wir verwenden dafür ein Korrespondenz-tool namens Thunderhead, welches wie eine Art Content Management System funktioniert.

Die Vorlagen werden über das "Business Content Studio" erstellt. Diese Vorlagen bestehen jedoch nicht nur aus einfachem Text sondern auch aus Datenbankfeldern, sog. manuelle Felder (die bei der Brieferstellung über eine Eingabemaske befüllt werden) und diversen Regeln, die einzelne Textpassagen in Abhängigkeit von den Eingaben steuern.
Nun kam unsere IT auf die Idee Die Datenbanken nicht mehr getrennt für Deutschland und International zu verwalten, sondern nur noch eine globale Datenbank zu verwenden. Dies hat zur Folge, dass die Datenbankfelder nun andere Namen haben.
Für mein Team heißt das nun, dass wir in jedes Template hingehen und die alten Datenbankfelder(bzw. Platzhalter) gegen die nun neuen Felder austauschen müssen. Bei einem Scope von ca. 500 Vorlagen und durchschnittlich 20 Feldern pro Vorlage, wäre das einige Wochen arbeit.
Da die Templates aber auf dem Server in Form von XML-Dateien liegen, kam mir die Idee, dass wir nicht über das Tool arbeiten, sondern direkt in der Rohdatei (XML-Datei), über ein Suchen / Ersetzen Skript die entsprechenden Felder austauschen.

Die XML-Datei sieht in etwa so aus (Ausschnitt):

<?xml version="1.0" ?>
- <!-- generated by Thunderhead.Content, Version=3.0.12.0, Culture=neutral, PublicKeyToken=84c666f5e68a8973
-->
- <docdef version="3.0" bo-name="Human_Resources" bo-class="Th_180000251*_Human_Resources" styleset="190000626">
<script language="JavaScript" />
- <channel channel="2" template="190000624">
<sectionmap section="Letter Block" region="Letter Body" />
<sectionmap section="Page Number" region="Page Number" />
<sectionmap section="Letter Footer" region="Footer" />
<sectionmap section="DB Logo" region="Company Logo" />
<sectionmap section="Adressblock Customer" region="Address Customer" />
<sectionmap section="Adress DB" region="Address DB" />
- <setproperty name="display-width">
<string>210mm</string>
</setproperty>
</channel>
- <section id="2" name="Document" edit-groups="*">
- <section id="57" name="DB Logo">
- <fraglink id="73" resid="190000861">
- <argvalue name="Unternehmen">
<var name="Human_Resources.db_people_Datenfelder.Absenderinformationen.Unternehmen" type="string" />
</argvalue>
- <argvalue name="Region">
<var name="Human_Resources.db_people_Datenfelder.Absenderinformationen.Region" type="string" />
</argvalue>
</fraglink>
</section>


In diesem XML-Ausschnitt befinden sich zwei Datenbankobjekte:

"Human_Resources.db_people_Datenfelder.Absenderinformationen.Unternehmen"
"Human_Resources.db_people_Datenfelder.Absenderinformationen.Region"

Die Durch folgende Datenbankobjekte ausgetauscht werden müssen:

"Applications_type.db_people_gbl_data_fields.Sender_Data.Company_Description"
"Applications_type.db_people_gbl_data_fields.Sender_Data.Region"

Ich habe eine Liste in der die Information gespeichert ist, welches Feld durch welches ausgetauscht werden muss, die in etwa so aussieht:

Human_Resources.db_people_Datenfelder.Absenderinformationen.Unternehmen|Applications_type.db_people_gbl_data_fields.Sender_Data.Company_Description

Wie kann ich das am sinnvollsten lösen? Kann mir da jemand vielleicht helfen?