isoldebaden
Goto Top

Inhalt einer Datei verändern und hinzufügen

am besten in Form einer Batch-Datei oder VBS

Hallo,

ich hab folgendes Anliegen.
Ich habe dateien, in denen der Inhalt angepasst werden muss. Am liebsten wäre mir eine Batch oder VBS-Lösung.

Folgendes soll die Batch-Datei können:

Inhalt der Datei soll mit Zeilen von mir ersetzt werden. Evtl. auch sollen auch Zeilen ersetzt werden, falls sie schon vorhanden sind.

Könnt ihr mir bitte eine Vorlage zeigen?

Danke
Isolde

Content-ID: 76419

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

Ausgedruckt am: 22.11.2024 um 15:11 Uhr

gemini
gemini 20.12.2007 um 16:18:31 Uhr
Goto Top
Hallo Isolde,

Inhalt der Datei soll mit Zeilen von mir ersetzt werden. Evtl. auch sollen auch Zeilen ersetzt werden, falls sie schon vorhanden sind.
Kannst du das etwas mehr spezifizieren?
Wie kann das Script die zu ersetzenden Zeilen erkennen? Ist es immer Zeile 18 oder beinhaltet sie einen best., immer gleichlautenden Text?

Könnt ihr mir bitte eine Vorlage zeigen?
Eine Vorlage (VBS), die EINE Datei öffnet und darin Zeilen mit einem bestimmten Zeilenanfang mit Daten aus einer anderen Datei editiert hätte ich parat. Die schreibt sogar noch ein Log. Müsstest dir halt für deine Bedürfnisse umbauen.

HTH,
gemini
IsoldeBaden
IsoldeBaden 20.12.2007 um 16:25:37 Uhr
Goto Top
Hallo Gemini,

danke für deine schnelle Antwort.

Der Inhalt der ersetzt werden soll, hat immer den gleichlautenden text.

Könntest du mir deine Vorlage (VBS) zur Verfügung stellen? Wäre sehr nett!

Danke
pacobay
pacobay 21.12.2007, aktualisiert am 18.10.2012 um 18:32:50 Uhr
Goto Top
Hallo Isolde,
du hast Glück weil gerade Opferfest und X-Mas ist face-smile
und weil ich gerade in einem anderen etwas umfangreicheren Thread
Code verfasst habe, der sich sehr leicht und schnell auf Deine Bedürfnisse anpassen ließ.
Naja, auf die Bedürfnisse wie ich Sie verstanden habe.
Kann ja auch sein, dass ich da falsch liege.

Im Prinzip ist der Code in Richtung "Mit Kanonen auf Spatzen"
Aber er war halt da und es war einfacher für mich das Bestehende anzupassen
als irgendwas Neues zu schreiben.

Alles Weitere im Code

merry x-mas & happy new year
pacobay


' VB Script Document  
'Erstellt als helptesk 4 Thread  
'[content:76419]  
'beruht auf:  
'[content:76158]  
'ergänzender Tread  
' [content:76371]  

' for          : WSH/wcript.exe  
' testet on    : XPP SP2 / WSH 5.7 für XP  
'  
' Name of File : textErsetzenV02.vbs  
' Last edit    : 21.12.2007 15:06:20  
' Last editor  : pacobay  
'  
'   TARGET:  
'	Umwandlung des Inhaltes einer Textdatei  
'   fester Suchstring festgelegter Ersatz  

' Beispiel:  
' Aus den Zeilen in dem InputFile :  
'      Franz jagt im Auto (einem komplett verwahrlosten Auto) quer durch Bayern.  
'      Franz jagt im AutO (einem komplett verwahrlosten AUto) quer durch Bayern.  
'      Franz jagt im AUTO (einem komplett verwahrlosten AUTo) quer durch Bayern.  
'      Franz jagt im AUTO (einem komplett verwahrlosten auto) quer durch Bayern.  
'  
' wird immer immer in dem OutputFile  
'      Franz jagt im Taxi (einem komplett verwahrlosten Taxi) quer durch Bayern.  
'      Franz jagt im Taxi (einem komplett verwahrlosten Taxi) quer durch Bayern.  
' etc  
'  
'   notwendige Laufumgebungsspezifische Anpassungen in zwei Abschnitten nötig  

' Die Abschnitte sind im Code einfach zu finden durch Suche nach XXXXXX  
'  
' Im Abschnitt 01 ist entsprechend anzupassen:  
' (Pfad&Dateiname) Input/Output Files  
'  
' Im Abschnitt 02 ist entsprechend anzupassen:  
' Suchmuster   und Ersatzmuster (im Beispiel "Auto" und "Taxi")  
'  
'  
' Ablauf  
'       Prüft ob Inputfile gefunden werden kann  
'       ifnot Abbruch  
'       ifyes weiter  
'  
' Prüft ob Outputfile schon vorhanden  
'       if yes Abfrage ob gelöscht werden kann  
'    i         if yes dann löschen und weiter  
'              if not Abbruch  
' if Not einfach weiter  
'   
' Zeilenweises auslesen der Inputdatei  
'              ersetzen gemäß Vorgaben (Suchmuster durch ErsatzMuster)  
'              wegschreiben der neuen Zeile (OutDS)in das OutputFile  
' wenn alle Zeilen gelesen dann ich habe fertig  
'  
'*********************************************************************  
'  
Option Explicit
'  
'Deklaration der Objekte  
Dim WshShell
Set WshShell = Wscript.CreateObject("Wscript.Shell")  
'---------------------------  
Dim FSO, FileIn, FileOut
Set FSO = CreateObject("Scripting.FileSystemObject")  
'---------------------------  
'  
'Ein paar Variablen für meine Art der Popup Messages  
'  
DIM strTITELs		   ' Meldungstitel im Script festgelegt    [InBox & PopUp]  
DIM strMSGs            ' Meldungstexte für Messages                    [PopUp]  
DIM numShowTimeS       ' im Script festgelegte Anzeigezeit in sec      [PopUp]  
DIM numBtnCodeR        ' ReturnCode Wert des geklickten Buttons        [PopUp]  

'numBtnCodeR=WshShell.popup(strMSGs,numShowTimeS,strTITELs,1+32+4096)  

'---------------------------  
' XXXXXX ANPASSUNG bitte hier  (Abschnitt01) XXXXXX  
' In diesen Abschnitt(Pfad&Dateiname)ensprechend anpassen  
Const Input        = "C:\just4Test\auto.txt"  
Const Output       = "C:\just4Test\taxi.txt"  
' XXXXXX Ende dieses Anpassungsabschnittes XXXXXX  

'---------------------------  
Dim AZDs                            'Anzahl der verarbeiteten Datensätze  
'---------------------------  
'  
Dim InDS							'InputDatensatz  
Dim OutDS							'OutputDatensatz  

'---------------------------  
'  
'*********************************************************************  
'Ende der Deklaration  
'*********************************************************************  

'Einige Hilfsprozeduren  
'  
' Deklaration für  Funktion Ersetze  
  DIM objRA     
  DIM SuchString, Suchmuster, ErsatzMuster

' XXXXXX ANPASSUNG bitte hier  (Abschnitt02) XXXXXX  
  Suchmuster   = "Auto"    ' Was suchst Du :  
  ErsatzMuster = "Taxi"    ' Wodurch soll es ersetzt werden  
' XXXXXX Ende dieses Anpassungsabschnittes XXXXXX  
'  
'  
Function Ersetze(SuchString,Suchmuster, ErsatzMuster)
'  
 SET objRA = new RegExp      ' in VBS hier keine explizite Objektzuweisung nötig  
 objRA.pattern = Suchmuster  ' Legt das Suchmuster fest.  
 objRA.Global = True         ' Legt globales Anwenden fest. (alle Autos)  
 objRA.IgnoreCase = True     ' Ignoriert die Schreibweise. (auto,AUto,Auto etc)  
'  
  ' Führe nun die Ersetzung durch und weise es als Funktionswert zu.  
'  
    Ersetze=objRA.Replace(SuchString,ErsatzMuster)
'  
 End Function

'-------------------------------------------------------------------  
'  
' Noch ein kleiner HilfsSUB um das Ende anzuzeigen  
'  
SUB Fertig
WScript.Echo "Ich habe fertig!" &Chr(13)&Chr(13)&+_  
"Anzahl der verarbeiteten Zeilen: "&AzDs  
END SUB 'Fertig  
'  
'-------------------------------------------------------------------  
'  
SUB CheckInFile
' Püfen ob Inputdatei gefunden werden kann  
' if yes then öffnen als Vorbereitung zur weiteren Verarbeitung  
' If not Info & Abbruch  
'  
If fso.FileExists(Input) then
   Set FileIn  = FSO.OpenTextFile( Input, 1, true)
else
'  
numShowTimeS   = 0
strTITELs	   ="Input-Fehler"  
strMSGs       =+_
"Folgende Datei konnte nicht gefunden werden!" &chr(13)&chr(13)&+_  
Input &chr(13)&chr(13)&+_
"Das Script wird abgebrochen"&chr(13)&chr(13)&chr(9)&"Pls check:"&chr(9)&chr(9)&"Inputfile-Konstante (in the script)"&chr(13)&chr(9)&"or:" &chr(9)&chr(9)&"The Input-File himself"  
'  
WshShell.popup strMSGs,numShowTimeS,strTITELs,16+4096
'  
Wscript.Quit
end if
'  
END SUB 'CheckInFile  
'  
'-------------------------------------------------------------------  
'  
SUB CheckOutFile
'  
' Prüfen ob Outputdatei bereits vorhanden ist  
' if not weiter mit öffnen der Datei als Vorbereitung zur weiteren Verarbeitung  
'  
' if there then: Abfrage ob diese gelöscht werden kann Optionen: Ok oder Abbruch  
	 'Option: OK  
	 	 ' dann halt löschen und weiter mit  
	 	 ' öffnen der Datei als Vorbereitung zur weiteren Verarbeitung  
'  
	 'Option: Abbrechen  
	 		 'Abbruch  
'  
'  
If fso.FileExists(Output) then
     numShowTimeS   = 0
     strTITELs	   ="Check 4 OutputFile"  
     strMSGs       =+_
     "Die vorgesehene Output Datei ist bereits vorhanden!" &chr(13)&chr(13)&+_  
     Output &chr(13)&chr(13)&+_
     "Kann die Datei gelöscht werden?"&chr(13)&chr(13)&chr(9)&"OK:"&chr(9)&+_  
	 chr(9)&"delete and go on"&chr(13)&chr(9)&"Abbrechen:" &chr(9)&"Scriptende"  
'  
numBtnCodeR=WshShell.popup(strMSGs,numShowTimeS,strTITELs,1+32+4096)
'  
'  
'Auswertung des Geklickten  
'  
         SELECT CASE numBtnCodeR
                CASE  1  ' OK  
		 	        fso.DeleteFile(Output)
			        Wscript.sleep 5000  'gibt dem Script etwas Zeit  
 	                Wscript.echo "file should be killed"  
'  
                CASE  2  ' Abbrechen  
         	        Wscript.echo "Abbruch durch Anwender"  
         	        Wscript.Quit
         END SELECT
'  
else
' Na dann gehts einfach weiter  
end if
'  
'---------------------------  
'  
' öffnen des Outputfile (FileOut) als Vorbereitung zur weiteren Verarbeitung  
' vgl Const Output  
'  
Set FileOut = fso.OpenTextFile( output,8,true)
'  
'---------------------------  
'  
END SUB 'CheckInFile  
'  
'-------------------------------------------------------------------  
'Der eigentliche ArbeitsSUB  
'-------------------------------------------------------------------  
'  
SUB DoTheWork
'Der InputFile (FileIn) wurde schon unter CheckInFile geöffnet  
'  
' bis InputFile zu Ende ist, immer weiter machen  
' nach loop kommt er hierher zurück:  
Do While Not (FileIn.atEndOfStream)

'eine Zeile lesen und als Datensatz DS verwenden  
   InDS = FileIn.Readline
'Ersetzen mit Hilfe der Funktion Ersetze & zuweisen in OutDS  
   OutDS= Ersetze(InDS,Suchmuster, ErsatzMuster)
''Und nun diesen string wegschreiben  
   FileOut.WriteLine(outDS)          'schreibt OutDs in Outputfile  
'_______________  
'' Noch die Anzahl der abgearbeiteten Zeilen um eins erhöhen  
' Rein zu Statistikzwecken (vgl.: SUB Fertig)  
   AzDs=AZDs+1
'_______________  
'  
   loop   'und das ganze für die nächste Input-Zeile von vorne (vgl.: Do while)  
'  
'  
END SUB                 'DoTheWork  
'  
'-------------------------------------------------------------------  
'-------------------------------------------------------------------  
'  
'Ein MainSUB um die einzelnen SUBs aufzurufen  
'  
SUB MAIN
    CheckInFile
    CheckOutFile 'Achtung File Out bereits hier geöffnet  
    DoTheWork
    Fertig
END SUB
'  
'*******************************************************************  
'  
               MAIN     'Der letztendliche Aufruf des ganzen Tralala  
'  
'*******************************************************************  
'  
'  
' EOF  
Biber
Biber 08.01.2008 um 10:19:41 Uhr
Goto Top
Moin IsoldeBaden,

wie ist denn der Status dieses Threads?
Konnte Dir einer der geposteten Lösungsansätze helfen oder wartest Du noch Alternativen ab?

Grüße
Biber