Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Suchen und durch Variable ersetzen

Frage Entwicklung Batch & Shell

Mitglied: FlorianBl

FlorianBl (Level 1) - Jetzt verbinden

26.08.2010, aktualisiert 15:22 Uhr, 3625 Aufrufe, 2 Kommentare

Hallo zusammen,

ich habe ganz ähnliches vor, wie hier schon einmal gefragt wurde. Doch irgendwie bringen mich die hier gezeigten Lösungen nicht ans Ziel.
(http://www.administrator.de/index.php?content=128409)

Ich habe eine Textdatei, in der ich den Wert "000001", der ca. 700 mal vorkommt ersetzen möchte. (000001, 000002, usw.)

Der genaue Ausdruck in Text sieht so aus:


01.
<gp:cache id="000001" available="True" archived="False">

Die heir gezeiten Beispiele habe ich dann ein wenig umgebaut, um meinem Ziel näher zu kommen. So in etwa siehts aus:


01.
Const StartNum = 1 
02.
 
03.
Const eFile = "D:\Eingabe.Txt" 
04.
Const aFile = "D:\Ausgabe.Txt" 
05.
 
06.
Const Tag1 = "<gp:cache id=" 
07.
Const Tag2 = "available=" 
08.
 
09.
 
10.
Dim RE, Fso, File, Text, Tag, i 
11.
 
12.
Set RE = New RegExp:  i = StartNum  
13.
 
14.
Set Fso = CreateObject("Scripting.FileSystemObject") 
15.
 
16.
With RE 
17.
   .Global = True:  .IgnoreCase = True:  .Pattern = Tag1 & ".*" & Tag2 
18.
End With 
19.
 
20.
Set File = Fso.OpenTextFile(eFile):  Text = File.ReadAll:  File.Close 
21.
 
22.
For Each Tag In RE.Execute(Text) 
23.
    Text = Replace(Text, Tag, Tag1 & """" & i  &"""" & Tag2):   
24.
    i = i + 1 
25.
Next 
26.
     
27.
Set File = Fso.CreateTextFile(aFile):  File.Write Text:  File.Close


Grundsätzlich passiert auch schon was. In der Ausgabedatei wird der Wert dann immer durch "1" ersetzt. Leider wird die "1" aber nicht hochgezählt.

Woran kann es liegen? Wäre für einen Hinweis sehr dankbar!
Mitglied: bastla
26.08.2010 um 16:15 Uhr
Hallo FlorianBl!

Dein Ergebnis ist relativ einfach zu erklären - da Du "Replace()" nicht auf das jeweils erste Vorkommen des Suchstrings beschränkt hast, werden alle passenden Strings bereits beim ersten Schleifendurchlauf ersetzt (und da diese ja immer "000001" lauten, wäre RegEx gar nicht nötig) - und zwar mit dem dann gültigen Wert für i von 1; danach gibt es den ursprünglich gesuchten String nicht mehr, weshalb auch nix ersetzt werden kann ....

... daher entweder als Zeile 23
Text = Replace(Text, Tag, Tag1 & """" & i & """ " & Tag2)
oder, einfacher (wenn konstant "000001" zu ersetzen ist):
01.
Const eFile = "D:\Eingabe.Txt" 
02.
Const aFile = "D:\Ausgabe.Txt" 
03.
 
04.
Const Tag1 = "<gp:cache id=""" 
05.
Const Tag2 = """ available=" 
06.
Const OldNum =  "000001" 
07.
Const StartNum = 1 
08.
 
09.
Set fso = CreateObject("Scripting.FileSystemObject") 
10.
 
11.
Text = fso.OpenTextFile(eFile).ReadAll 
12.
i = StartNum 
13.
 
14.
Do While InStr(Text, Tag1 & OldNum & Tag2) > 0 
15.
    Text = Replace(Text, Tag1 &OldNum & Tag2, Tag1 & i & Tag2, 1, 1) 
16.
    i = i + 1 
17.
Loop 
18.
     
19.
fso.CreateTextFile(aFile).Write Text
oder die angepasste Version meines Scripts im verlinkten Beitrag:
01.
Const StartNum = 1 
02.
 
03.
Ein = "D:\Eingabe.Txt" 
04.
Aus = "D:\Ausgabe.Txt" 
05.
 
06.
Tag1 = "<gp:cache id=""" 
07.
Tag2 = """ available=" 
08.
 
09.
N = StartNum 
10.
 
11.
Set fso = CreateObject("Scripting.FileSystemObject") 
12.
T1 = fso.OpenTextFile(Ein).ReadAll 
13.
 
14.
Set rE = New RegExp 
15.
rE.Pattern = Tag1 & "(\d*)" & Tag2 
16.
rE.IgnoreCase = True 
17.
rE.Global = True 
18.
 
19.
SP = 1 'Startposition im String 
20.
For Each M In rE.Execute(T1) 
21.
    P = M.FirstIndex + M.Length + 1 'Endposition des die Fundstelle enthaltenden Teilstrings 
22.
     'im gefundenen Teilstring (des Originaltextes) die bisherige Nummer ersetzen und zum neuen Text hinzufügen 
23.
    T2 = T2 & Replace(Mid(T1, SP, P - SP), M.SubMatches(0), N, 1, 1) 
24.
    N = N + 1 
25.
    SP = P 'Startposition = vorige Endposition 
26.
Next 
27.
T2 = T2 & Mid(T1, SP) 'den Teil nach der letzten Fundstelle auch noch mitnehmen 
28.
fso.CreateTextFile(Aus).Write T2
Grüße
bastla
Bitte warten ..
Mitglied: FlorianBl
26.08.2010 um 16:59 Uhr
Hallo bastla,

habe deine erste Version probiert und es klappt bestens. Vielen Dan für die Hilfe!
Bitte warten ..
Ähnliche Inhalte
Linux Tools
Bash: suchen und ersetzen
Frage von SIPSIPLinux Tools14 Kommentare

Hallo zusammen Möchte aus einer riesigen HTML Datei folgenden Strings ersetzen: ^M\ Nun habe ich dieses kleine Script erstellt, ...

Windows Tools
Suche Programm zum dateien suchen und Ersetzen mit Wildcat Suche
gelöst Frage von sfera-haizaWindows Tools5 Kommentare

Grüßt euch, ich nutze zzT. das Programm InfoRapid Suchen & Ersetzen um HTML / PHP Dateien zu durchsuchen bzw. ...

Batch & Shell
CMD: Suchen, Ersetzen und Hochzählen
gelöst Frage von ralfkauskBatch & Shell3 Kommentare

Hallo zusammen Ich habe folgendes Problem In einer Datei muss ein Wert gefunden, auf Korrektheit geprüft und evtl. ersetzt/geändert ...

Batch & Shell
Regwert suchen und ersetzen?
Frage von busteronBatch & Shell7 Kommentare

Hallo alle zusammen, ich hab mal wieder ne Frage! Wie kann ich die komplette Registry über eine Batch nach ...

Neue Wissensbeiträge
Apple

IOS 11.2.1 stopft HomeKit-Remote-Lücke

Tipp von BassFishFox vor 8 StundenApple

Das Update für iPhone, iPad und Apple TV soll die Fernsteuerung von Smart-Home-Geräten wieder in vollem Umfang ermöglichen. Apple ...

Windows 10

Windows 10 v1709 EN murkst bei den Regionseinstellungen

Tipp von DerWoWusste vor 13 StundenWindows 10

Dieser kurze Tipp richtet sich an den kleinen Personenkreis, der Win10 v1709 EN-US frisch installiert und dabei die englische ...

Webbrowser

Kein Ton bei Firefox Quantum über RDP

Tipp von Moddry vor 13 StundenWebbrowser

Hallo Kollegen! Hatte das Problem, dass der neue Firefox bei mir auf der Kiste keinen Ton hat, wenn ich ...

Internet

EU-DSGVO: WHOIS soll weniger Informationen liefern

Information von sabines vor 1 TagInternet4 Kommentare

Wegen der europäische Datenschutzgrundverordnung stehen die Prozesse um die Registrierung von Domains auf dem Prüfstand. Sollte die Forderungen umgesetzt ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
Von rj11 auf rj45
Frage von jensgebkenLAN, WAN, Wireless19 Kommentare

Hallo Gemeinschaft, könnt ihr mir vielleicht bei der anfertigung eines Kabels helfen - habe ein rj 11 stecker und ...

Netzwerkmanagement
Firefox Profieles im Roaming
gelöst Frage von Hendrik2586Netzwerkmanagement17 Kommentare

Hallo liebe Leute. :) Ich hab da ein kleines Problem, welches anscheinend nicht unbekannt ist. Wir nutzen hier in ...

LAN, WAN, Wireless
Häufig Probleme beim Anmelden in WLAN
Frage von mabue88LAN, WAN, Wireless15 Kommentare

Hallo zusammen, in einem Netzwerk gibt es relativ häufig (1-2 mal pro Woche) Probleme mit der WLAN-Verbindung. Zunächst mal ...

Windows Server
Remotesteuerung der Sitzung (Kennung XX) fehlgeschlagen
gelöst Frage von Stefan91Windows Server14 Kommentare

Hallo Zusammen, seit kurzem bekomme ich oben genannte Fehlermeldung, wenn ich versuche eine Remotesitzung über den Taskmanager fernzusteuern (Rechtsklick ...