Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

String ersetzen mittels Replace

Frage Entwicklung VB for Applications

Mitglied: 82312

82312 (Level 1)

31.08.2009, aktualisiert 18.10.2012, 5365 Aufrufe, 19 Kommentare

Hi Leute,

ich soll Textzeilen aus einer .txt Datei umwandeln und in eine .cmd Datei abspeichern.(VBScript)

Quelldatei: Quelle.txt
Inhalt: z.B. \\denetz2is21fps1\u$\users\mustermannm

muss umgewandelt werden in:

Zieldatei: Zieldatei.cmd
Inhalt: Rsync -vrPtz winreplicator@denetz2is21fps1::u-data/users/mustermannm /cygdrive/u/users

wobei das /u$/ variabel ist, also es kann auch /e$/ heißen...zudem ist der servername auch variabel....
Mein Ausbilder hatte mir gesagt ich soll das mit InString Len Pos machen damit komme ich aber garnicht klar...
RegExp kann ich leider auch nicht...
Ich wäre euch sehr verbunden, wenn ihr mir ein paar Tips geben könntet

Vielen Dank,
Max
Mitglied: TsukiSan
31.08.2009 um 09:45 Uhr
Hallo baeks1986,

Mein Tipp:
1) Fachlektüre zulegen, bzw. durcharbeiten
2) gelerntes Wissen umsetzen -> dazu selber Beispiele ausprobieren und verstehen
3) Bei bestehenden und nicht funktionierenden Scripten wieder anfragen.

Deine Hausaufgaben werden wir nicht für dich abarbeiten!

Gruß
Tsuki
Bitte warten ..
Mitglied: bastla
31.08.2009 um 10:04 Uhr
... und
1b) auch andere Quellen benutzen (mir war fast so, als hätte ich ähnliche Fragestellungen sogar schon in diesem Forum hier gesehen )
1c) es (zusätzlich zu den Vorgaben wie "InStr" etc) mit der Übersetzung des Begriffes "ersetzen" versuchen

und schließlich (später)
4) hinterfragen, ob es nötig/sinnvoll ist, per VBS einen Batch zu erstellen, wenn sich die Aufgabe ev auch ohne diesen Umweg unmittelbar in Batch realisieren ließe ...

Grüße
bastla
Bitte warten ..
Mitglied: 82312
31.08.2009 um 10:06 Uhr
Hallo TsukiSan,

was meinst du was ich hier grade mache? Ich habe nur garkeine Idee wie ich das mit Len oder Pos hinbekommen kann, außerdem habe ich nicht nach DER Lösung gefragt sondern nach ein paar Tipps, die ihr mir vllt geben könnt. Vllt hat ja auch jmd nen anderen Lösungsansatz....

Mein Tipp:
1) Den Post richtig durchlesen
2) Nicht so unfreundlich sein, wir haben alle Montag!

zu 1b) ich habe soetwas nicht gefunden,
zu 1c) die replace funktion bringt hier nichts, da die zu ersetzenden zeichen wörter usw. variabel sind...
und zu 4) ja es ist nötig eine batch zu erstellen, weil die zieldatei in einem cmd prog ausgeführt wird.

Danke für eure freundliche Unterstützung!
Bitte warten ..
Mitglied: 82312
31.08.2009 um 10:16 Uhr
Hier ist übrigens mein Lösungsansatz, nur leider mit der Replace funktion, welche natürlich nicht die variablen abdecken würde...nur damit ihr nicht meint ich würde hier sitzen und warten das mir jmd das script schreibt!

01.
DIM strSearch, strChangeWith, strNewContent, strContent 
02.
 
03.
 
04.
'Variablen bestimmen 
05.
strSearch = "\\" 
06.
strChangeWith = "Rsync -vrPtz winreplicator@" 
07.
 
08.
'Datei auslesen  
09.
Set oFSO = CreateObject("Scripting.FileSystemObject")  
10.
Set File = oFSO.OpenTextFile("nettetal.txt", 1, True)  
11.
strContent = File.ReadAll  
12.
File.Close  
13.
 
14.
'String finden und ersetzen  
15.
strNewContent = Replace(strContent, strSearch , strChangeWith) 
16.
 
17.
'In Datei schreiben 
18.
Set File = oFSO.OpenTextFile("nettetal_FINAL.txt", 2)  
19.
File.Write strNewContent 
20.
File.Close 
21.
 
22.
'_________________________________________________________________________________________ 
23.
'_________________________________________________________________________________________ 
24.
 
25.
 
26.
'Variablen bestimmen 
27.
strSearch = "\u$\" 
28.
strChangeWith = "::u-data/" 
29.
 
30.
'String finden und ersetzen  
31.
strNewContent = Replace(strNewContent, strSearch , strChangeWith) 
32.
 
33.
'In Datei schreiben 
34.
Set File = oFSO.OpenTextFile("nettetal_FINAL.txt", 2)  
35.
File.Write strNewContent 
36.
File.Close 
37.
 
38.
'_________________________________________________________________________________________ 
39.
'_________________________________________________________________________________________ 
40.
 
41.
 
42.
'Variablen bestimmen 
43.
strSearch = "\" 
44.
strChangeWith = "/" 
45.
 
46.
'String finden und ersetzen  
47.
strNewContent = Replace(strNewContent, strSearch , strChangeWith) 
48.
 
49.
'In Datei schreiben 
50.
Set File = oFSO.OpenTextFile("nettetal_FINAL.txt", 2)  
51.
File.Write strNewContent 
52.
File.Close 
53.
 
54.
'_________________________________________________________________________________________ 
55.
'_________________________________________________________________________________________ 
56.
 
57.
 
58.
'Variablen bestimmen 
59.
strSearch = "zschenderleinh" 
60.
strChangeWith = "zschenderleinh /cygdrive/u/users" 
61.
 
62.
'String finden und ersetzen  
63.
strNewContent = Replace(strNewContent, strSearch , strChangeWith) 
64.
 
65.
'In Datei schreiben 
66.
Set File = oFSO.OpenTextFile("nettetal_FINAL.txt", 2)  
67.
File.Write strNewContent 
68.
File.Close


[Edit Biber] Code-Tags nachgezogen [/Edit]
Bitte warten ..
Mitglied: Woolfsmann
31.08.2009 um 10:38 Uhr
Hi,

da da so viel Variables drin ist, würde ich auf Regual Expressions ausweichen.

Ich kenn VB Scripte nciht und weiß nicht wie fähig die damit umgehen können aber mit nem Perl Script und nen bisschen RegEx ist das nicht so schwer.
Mit z.B. dem Toturial http://www.xlab.net/jochen/perl/perl-3.html oder jedem anderen über RegEx kommst du weiter.

gruß
Woolfsmann


Edit ... Ich konnts nicht lassen ;)


01.
#/usr/bin/perl 
02.
use strict; 
03.
open (IN,"Quelle.txt"); 
04.
open (OUT,">Zieldatei.cmd"); 
05.
 
06.
foreach (<IN>) 
07.
08.
	if ($_ =~ /\\\\(.*)\\.*\\users\\(.*)/) 
09.
10.
		print OUT "Rsync -vrPtz winreplicator\@$1::u-data/users/$2 /cygdrive/ u/ /users\n"; 
11.
12.
}
Bitte warten ..
Mitglied: bastla
31.08.2009, aktualisiert 18.10.2012
Hallo baeks1986!
zu 1b) ich habe soetwas nicht gefunden,
War offensichtlich auch gar nicht nötig - dieser Beitrag hätte ohnehin fast genau den gleichen Ansatz geboten, den Du schon hattest ...

... uns aber aus unerfindlichen Gründen nicht zeigen wolltest ...
Vorweg eine Anmerkung zu Deinem Schnipsel: Das Schreiben in die Datei ist natürlich nur einmal erforderlich - wenn alle Ersetzungen vorgenommen sind.
Wenn es variable Bestandteile in den Pfaden gibt, müssen diese ja an einem Kriterium zu erkennen sein (etwa am "$" oder der Position innerhalb des Pfades), ansonsten lässt sich der Vorgang ohnehin nicht automatisieren.

Es wird sich in diesem Fall anbieten, die Datei zeilenweise zu verarbeiten, die jeweilige Zeile (= den Pfad) per Split() in die einzelnen Bestandteile zu zerlegen und diese zu untersuchen, umzuwandeln und dann neu zu kombinieren.

Grüße
bastla

P.S.:
und zu 4) ja es ist nötig eine batch zu erstellen, weil die zieldatei in einem cmd prog ausgeführt wird.
Infrage gestellt habe ich ja nur die Notwendigkeit des VBScripts, nicht des Batches (der, wie oben für das Script dargestellt, die Ausgangsdatei ebenfalls zeilenweise auslesen, in ihre Bestandteile zerlegen und umformen sowie schließlich das "Rsync" auch gleich ausführen könnte) ...
Bitte warten ..
Mitglied: bastla
31.08.2009 um 10:43 Uhr
@Woolfsmann

ACK, obwohl es mit der Variablität ja nicht so dramatisch sein dürfte (vermutlich nur Server- und Share-Anteil).

Grüße
bastla
Bitte warten ..
Mitglied: 82312
31.08.2009 um 11:01 Uhr
Vielen Dank für die Tipps, ich werde mich da nochmal dran setzen und werde euch mein Ergebniss dann posten.

Bis später....
Bitte warten ..
Mitglied: 82312
31.08.2009 um 11:22 Uhr
So sieht mein Ergebniss bis jetzt aus, klappt irgendwie auch wenn es nicht wirklich elegant ist

01.
DIM strSearch, strChangeWith, strNewContent, strContent 
02.
 
03.
 
04.
'Variablen bestimmen 
05.
strSearch = "\\" 
06.
strChangeWith = "Rsync -vrPtz winreplicator@" 
07.
 
08.
'Datei auslesen  
09.
Set oFSO = CreateObject("Scripting.FileSystemObject")  
10.
Set File = oFSO.OpenTextFile("them.txt", 1, True)  
11.
strContent = File.ReadAll  
12.
File.Close  
13.
 
14.
'String finden und ersetzen  
15.
strNewContent = Replace(strContent, strSearch , strChangeWith) 
16.
'_________________________________________________________________________________________ 
17.
'_________________________________________________________________________________________ 
18.
 
19.
'Variablen bestimmen 
20.
strSearch = "\u$\" 
21.
strChangeWith = "::u-data/" 
22.
 
23.
'String finden und ersetzen  
24.
strNewContent = Replace(strNewContent, strSearch , strChangeWith) 
25.
'_________________________________________________________________________________________ 
26.
'_________________________________________________________________________________________ 
27.
 
28.
'Variablen bestimmen 
29.
strSearch = "\D$\" 
30.
strChangeWith = "::D-data/" 
31.
 
32.
'String finden und ersetzen  
33.
strNewContent = Replace(strNewContent, strSearch , strChangeWith) 
34.
'_________________________________________________________________________________________ 
35.
'_________________________________________________________________________________________ 
36.
 
37.
'Variablen bestimmen 
38.
strSearch = "\E$\" 
39.
strChangeWith = "::E-data/" 
40.
 
41.
'String finden und ersetzen  
42.
strNewContent = Replace(strNewContent, strSearch , strChangeWith) 
43.
'_________________________________________________________________________________________ 
44.
'_________________________________________________________________________________________ 
45.
 
46.
'Variablen bestimmen 
47.
strSearch = "\e$\" 
48.
strChangeWith = "::e-data/" 
49.
 
50.
'String finden und ersetzen  
51.
strNewContent = Replace(strNewContent, strSearch , strChangeWith) 
52.
'_________________________________________________________________________________________ 
53.
'_________________________________________________________________________________________ 
54.
 
55.
'Variablen bestimmen 
56.
strSearch = "\d$\" 
57.
strChangeWith = "::d-data/" 
58.
 
59.
'String finden und ersetzen  
60.
strNewContent = Replace(strNewContent, strSearch , strChangeWith) 
61.
'_________________________________________________________________________________________ 
62.
'_________________________________________________________________________________________ 
63.
'Variablen bestimmen 
64.
strSearch = "\" 
65.
strChangeWith = "/" 
66.
 
67.
'String finden und ersetzen  
68.
strNewContent = Replace(strNewContent, strSearch , strChangeWith) 
69.
 
70.
'In Datei schreiben 
71.
Set File = oFSO.OpenTextFile("them_FINAL.txt", 2)  
72.
File.Write strNewContent 
73.
File.Close 
74.
 
75.
'_________________________________________________________________________________________ 
76.
'_________________________________________________________________________________________
Jetzt habe ich noch ein Problem: und zwar muss "/cygdrive/u/users" das hier noch ans ende jeder zeile...aber wie bekomme ich das hin? vor allem, weil es nur ans ende jeder beschriebenen zeile muss...hab bei google nichts gefunden

Mit freundlichen Grüßen
Bitte warten ..
Mitglied: bastla
31.08.2009 um 11:30 Uhr
Hallo baeks1986!
Jetzt habe ich noch ein Problem
Offensichtlich auch noch ein zweites: Die vernünftige Formatierung (als "Code") Deines Scripts ...
[Edit] Problem 2 gelöst [/Edit]
Für das Verknüpfen von Text kannst Du & verwenden.

Woran ist eine "beschriebenen Zeile" zu erkennen?

Grüße
bastla
Bitte warten ..
Mitglied: 82312
31.08.2009 um 11:38 Uhr
Jetzt hab ichs geschafft ;)

eine beschriebene Zeile ist daran zu erkennen, das text drin steht...oder vllt kann ich einfach die Leerzeilen löschen? dann müsste es nurnoch ans ende jeder Zeile...

Kennt da einer ne nette lösung?
Bitte warten ..
Mitglied: bastla
31.08.2009 um 11:45 Uhr
Hallo baeks1986!

Um festzustellen, ob eine Stringvariable keinen Inhalt hat´(also in diesem Fall eine Leerzeile repräsentiert), brauchst Du nur ein einfaches If (setzt allerdings zeilenweise Bearbeitung voraus):
If strVariable = "" Then ...
Grüße
bastla
Bitte warten ..
Mitglied: 82312
31.08.2009 um 11:51 Uhr
Womit dieses Problem gelöst wäre.
Nur wie bekomme ich ans ende jeder Zeile einen String? Ich bekommen den gewünschen String irgendwie immer nur in die letzte Zeile
Bitte warten ..
Mitglied: bastla
31.08.2009 um 12:00 Uhr
Hallo baeks1986!

Na geht ja dahin ...

Wenn Du die Zerlegung in einzelne Zeilen geschafft hast, kannst Du ja auch diese einzelnen Zeilen samt Zusatz per WriteLine in die Zieldatei schreiben.
Zur oben noch gestellten Frage
oder vllt kann ich einfach die Leerzeilen löschen?
Das könntest Du zB so lösen:
01.
Do While InStr(strContent, vbCrLF & vbCrLF) > 0 
02.
    strContent = Replace(strContent, vbCrLF & vbCrLF, vbCrLF) 
03.
Loop
Dann würde sich auch das Anfügen des Zusatzes wieder per Replace() anbieten:
strContent = Replace(strContent, vbCrLF, strZusatz & vbCrLF)
Grüße
bastla
Bitte warten ..
Mitglied: 82312
31.08.2009 um 12:23 Uhr
Vielen Dank bastla, hat soweit alles geklappt....

Vielen Vielen Vielen Dank für eure Hilfe....
Bitte warten ..
Mitglied: 82312
31.08.2009 um 12:25 Uhr
So habe ichs jetzt gemacht...bevor ich hier jetzt backpfeifen bekomme, bin absoluter neuling und das ist mein 1. script nach hello world :D

01.
DIM strSearch, strChangeWith, strNewContent, strContent 
02.
 
03.
 
04.
'Variablen bestimmen 
05.
strSearch = "\\" 
06.
strChangeWith = "Rsync -vrPtz winreplicator@" 
07.
 
08.
'Datei auslesen  
09.
Set oFSO = CreateObject("Scripting.FileSystemObject")  
10.
Set File = oFSO.OpenTextFile("them.txt", 1, True)  
11.
strContent = File.ReadAll  
12.
File.Close  
13.
 
14.
'String finden und ersetzen  
15.
strNewContent = Replace(strContent, strSearch , strChangeWith) 
16.
'_________________________________________________________________________________________ 
17.
'_________________________________________________________________________________________ 
18.
 
19.
'Variablen bestimmen 
20.
strSearch = "\u$\" 
21.
strChangeWith = "::u-data/" 
22.
 
23.
'String finden und ersetzen  
24.
strNewContent = Replace(strNewContent, strSearch , strChangeWith) 
25.
'_________________________________________________________________________________________ 
26.
'_________________________________________________________________________________________ 
27.
 
28.
'Variablen bestimmen 
29.
strSearch = "\D$\" 
30.
strChangeWith = "::D-data/" 
31.
 
32.
'String finden und ersetzen  
33.
strNewContent = Replace(strNewContent, strSearch , strChangeWith) 
34.
'_________________________________________________________________________________________ 
35.
'_________________________________________________________________________________________ 
36.
 
37.
'Variablen bestimmen 
38.
strSearch = "\E$\" 
39.
strChangeWith = "::E-data/" 
40.
 
41.
'String finden und ersetzen  
42.
strNewContent = Replace(strNewContent, strSearch , strChangeWith) 
43.
'_________________________________________________________________________________________ 
44.
'_________________________________________________________________________________________ 
45.
 
46.
'Variablen bestimmen 
47.
strSearch = "\e$\" 
48.
strChangeWith = "::e-data/" 
49.
 
50.
'String finden und ersetzen  
51.
strNewContent = Replace(strNewContent, strSearch , strChangeWith) 
52.
'_________________________________________________________________________________________ 
53.
'_________________________________________________________________________________________ 
54.
 
55.
'Variablen bestimmen 
56.
strSearch = "\d$\" 
57.
strChangeWith = "::d-data/" 
58.
 
59.
'String finden und ersetzen  
60.
strNewContent = Replace(strNewContent, strSearch , strChangeWith) 
61.
'_________________________________________________________________________________________ 
62.
'_________________________________________________________________________________________ 
63.
 
64.
'Variablen bestimmen 
65.
strSearch = "\" 
66.
strChangeWith = "/" 
67.
 
68.
'String finden und ersetzen  
69.
strNewContent = Replace(strNewContent, strSearch , strChangeWith) 
70.
 
71.
'_________________________________________________________________________________________ 
72.
'_________________________________________________________________________________________ 
73.
 
74.
'Leerzeilen löschen 
75.
strNewContent = Replace(strNewContent, vbCrLF & vbCrLF, vbCrLF)  
76.
 
77.
'rest Anfügen 
78.
strNewContent = Replace(strNewContent, vbCrLF, "/cygdrive/u/users" & vbCrLF) 
79.
 
80.
'_________________________________________________________________________________________ 
81.
'_________________________________________________________________________________________ 
82.
 
83.
'In Datei schreiben 
84.
Set File = oFSO.OpenTextFile("them_FINAL.txt", 2)  
85.
File.Write strNewContent 
86.
File.Close 
87.
 
88.
'_________________________________________________________________________________________ 
89.
'_________________________________________________________________________________________
Bitte warten ..
Mitglied: bastla
31.08.2009 um 12:40 Uhr
Hallo baeks1986!

Das Löschen der Leerzeilen funktioniert in Deiner "Sparvariante" (ohne Schleife) allerdings nur für einzelne, nicht aber für mehrere aufeinander folgende Leerzeilen ...
Noch eine Anmerkung zur Variablendeklaration mit "Dim": Wenn Du diese verwendest, dann aber konsequent für alle im Script vorkommenden Variablen und mit einem "Option Explicit" als erster Zeile, damit Du auf nicht deklarierte (das sind vor allem auch falsch geschriebene) Variablen hingewiesen wirst.

Grüße
bastla
Bitte warten ..
Mitglied: 82312
31.08.2009 um 13:09 Uhr
ah ok vielen dank...

dann hatte ich ja glück, dass in den quelldateien keine 2 leerzeilen hintereinander sind...ich werde es trotzdem mal wieder in deine variante ändern, damit jede warscheinlichkeit abgedecktist...

Ich habe doch jede variable in dem script deklariert, warum dann dieses option explict?
Oder habe ich da eine vergessen?

Vielen dank schonmal bastla, wie du ja merkst bin ich wirklich absoluter neuling und freue mich über jeden tipp den ich bekommen kann

Gruss,
baeks
Bitte warten ..
Mitglied: bastla
31.08.2009 um 13:27 Uhr
Hallo baeks1986!

Sobald Du das "Option Explicit" eingefügt hast, wirst Du beim nächsten Scriptlauf bemerken, dass es auch noch nicht deklarierte Variablen gibt ...

Der (zusätzliche) Sinn der Variablenprüfung ist, dass falsch geschriebene Variablennamen (etwa ein "strNewContnet ") als "nicht deklariert" bemängelt werden und Du damit einen Hinweis auf diesen Fehler erhältst.

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(2)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Poweshell Script soll String ersetzen und die leere Zeile löschen (4)

Frage von Mars123 zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell String Suchen mit Wildcard und Ersetzen (6)

Frage von herrmanndominic zum Thema Batch & Shell ...

Batch & Shell
gelöst String mit Zeilenumbruch per Bash ersetzen (1)

Frage von StefanKittel zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell - In Textdatei suchen und ersetzen (5)

Frage von Raaja89 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...