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 Textdatei .txt mit .vbs auf doppelte Werte prüfen und ggf. zerlegen

Mitglied: alfabravo

alfabravo (Level 1) - Jetzt verbinden

04.09.2013 um 15:34 Uhr, 1877 Aufrufe, 6 Kommentare, 2 Danke

Hallo Admins,

ich möchte möglichst mit vbs eine Datei namens 'Quelle.txt' zerlegen:

Sobald eine Kundennummer (8stellig, hier an Stelle 18-25) ein weiteres mal in einer Zeile vorkommt, soll die betreffende Zeile in eine neue Datei geschrieben werden und aus der Quelle.txt gelöscht werden.

Beispiel:

Vorher:

Quelle.txt:

Dies ist Zeile 1 44001234 Dies ist Zeile 1
Dies ist Zeile 2 45209999 Dies ist Zeile 2
Dies ist Zeile 3 44001234 Dies ist Zeile 3


Nach der Verarbeitung:

Ziel1.txt:

Dies ist Zeile 1 44001234 Dies ist Zeile 1
Dies ist Zeile 2 45209999 Dies ist Zeile 2


Ziel2.txt:

Dies ist Zeile 3 44001234 Dies ist Zeile 3


Da auch Sonderzeichen vorkommen können (z.B.: &) sollte es über ein *.vbs Skript laufen (und nicht über Batch).

Hat jemand eine Lösung dafür?

Vielen Dank!
Mitglied: colinardo
04.09.2013, aktualisiert um 17:16 Uhr
Halo alfabravo,
das könntest du hiermit machen:
(In den Zeilen 1-3 noch die Pfade anpassen)
strQuellPfad ~ Quelle.txt
strZielClean ~ Ziel1.txt
strZielDupes ~ Ziel2.txt
01.
Const strQuellPfad = "E:\Scripte\quelle.txt"
02.
Const strZielClean = "E:\Scripte\ziel1.txt"
03.
Const strZielDupes = "E:\Scripte\ziel2.txt"
04.

05.
Set fso = WScript.CreateObject("Scripting.Filesystemobject")
06.
Set objQuelleRead = fso.OpenTextFile(strQuellPfad,1)
07.
arrContent = Split(objQuelleRead.ReadAll(),vbNewLine)
08.
objQuelleRead.Close
09.

10.
Set regex = New RegExp
11.
Set objDupes = fso.OpenTextFile(strZielDupes,2,True)
12.
For i = 0 To UBound(arrContent)
13.
	regex.Pattern = "\s\d{8}\s"
14.
	Set matches = regex.Execute(arrContent(i))
15.
	If matches.Count > 0 Then
16.
		strKDNR = matches(0)
17.
		regex.Pattern = strKDNR
18.
		For x = (i+1) To UBound(arrContent)
19.
			If regex.Test(arrContent(x)) Then
20.
				objDupes.WriteLine(arrContent(x))
21.
				arrContent(x) = ""
22.
			End If
23.
		Next
24.
	End If
25.
Next
26.
objDupes.Close
27.

28.
Set objZiel = fso.OpenTextFile(strZielClean,2,True)
29.
For z = 0 To UBound(arrContent)
30.
	If arrContent(z) <> "" Then
31.
		objZiel.WriteLine(arrContent(z))
32.
	End If
33.
Next
34.
objZiel.Close
35.
Set fso = Nothing
36.
MsgBox "Fertig!"
Wenn du keine zusätzliche Datei (ziel1.txt) mit den bereinigten Zeilen möchtest sondern das ganze in die Quelle zurückschreiben möchtest ist das auch kein Problem. Einfach in die Variable strZielClean den selben Pfad eintragen wie bei strQuellPfad.

Grüße Uwe
Bitte warten ..
Mitglied: alfabravo
04.09.2013 um 17:43 Uhr
Hallo Uwe,

ich danke Dir vielmals, das klappt schon ganz hervorragend. Wenn ich das richtig sehe, sind die Leerzeichen vor und nach der Kundennummer von Bedeutung, um die Kundennummer zu 'extrahieren'. Ginge das Ganze auch, wenn vor und nach der Kundennummer keine Leerzeichen, sondern beliebige andere Zeichen stehen? Also wenn die Quelle z. B. so aussieht:

DiesistZeile1abcd44001234abcdDiesistZeile1
DiesistZeile2abc 44209999abcdDiesistZeile2
DiesistZeile3abcd44001234 bcdDiesistZeile3


Zwei Dinge sind jedenfalls in jeder Zeile immer gleich:
1.) die Kundennummer ist 8stellig
2.) und steht an Position 18 bis 25

Gruß, alfabravo
Bitte warten ..
Mitglied: colinardo
04.09.2013 um 18:39 Uhr
kein Problem. Ändere Zeile 13 so ab:
01.
regex.Pattern = "\d{8}" 
Bitte warten ..
Mitglied: Biber
04.09.2013, aktualisiert um 20:13 Uhr
Moin colinardo,

das kann klappen, muss aber nicht.

Wenn durch Zufall oder Zwang in diesem FixedLen-Flatfile
  • unmittelbar vor oder nach der Kundennummer Ziffern stehen
  • an anderer Stelle in der Zeile auch mal 8 oder mehr Ziffern stehen könnten

-> dann wird es wacklig.
Beispiel:
DiesistZeile1abcd44001234abcdDiesistZeile1
DiesistZeile2abc 44209999abcdDiesistZeile2
DiesistZeile3abcd44001234 bcdDiesistZeile3
DiesistZeile5abc7550012341bcdDiesistZeile5
DiesistZeile4abcx55001234 bcdDiesistZeile4
Mit dieser Test-Datei kommen je nach Reihenfolge der Zeile unterschiedliche Ergebnisse.
Wenn "Zeile4" vor "Zeile5" steht-> korrektes Ergebnis im Sinne der TO.
Wenn "Zeile5" vor "Zeile4" steht-> Duplikat im Sinne TO wird nicht erkannt.

Ich denke, du musst wohl oder übel mit Substring/festen Offsets arbeiten (=Mid(arrContent[i], 18, 8) ).

Grüße
Biber
Bitte warten ..
Mitglied: colinardo
04.09.2013, aktualisiert um 21:17 Uhr
@Biber
schon kloar, mach ich ungern aber wenn's denn sein muss 8-)

01.
Const strQuellPfad = "E:\Scripte\quelle.txt"
02.
Const strZielClean = "E:\Scripte\ziel1.txt"
03.
Const strZielDupes = "E:\Scripte\ziel2.txt"
04.

05.
Set fso = WScript.CreateObject("Scripting.Filesystemobject")
06.
Set objQuelleRead = fso.OpenTextFile(strQuellPfad,1)
07.
arrContent = Split(objQuelleRead.ReadAll(),vbNewLine)
08.
objQuelleRead.Close
09.

10.
Set regex = New RegExp
11.
Set objDupes = fso.OpenTextFile(strZielDupes,2,True)
12.
For i = 0 To UBound(arrContent)
13.
	regex.Pattern = "^\d{8}"
14.
	Set matches = regex.Execute(Mid(arrContent(i),18))
15.
	If matches.Count > 0 Then
16.
		strKDNR = matches(0)
17.
		regex.Pattern = strKDNR
18.
		For x = (i+1) To UBound(arrContent)
19.
			If regex.Test(Mid(arrContent(x),18)) Then
20.
				objDupes.WriteLine(arrContent(x))
21.
				arrContent(x) = ""
22.
			End If
23.
		Next
24.
	End If
25.
Next
26.
objDupes.Close
27.

28.
Set objZiel = fso.OpenTextFile(strZielClean,2,True)
29.
For z = 0 To UBound(arrContent)
30.
	If arrContent(z) <> "" Then
31.
		objZiel.WriteLine(arrContent(z))
32.
	End If
33.
Next
34.
objZiel.Close
35.
Set fso = Nothing
36.
MsgBox "Fertig!"
Bitte warten ..
Mitglied: alfabravo
04.09.2013 um 20:20 Uhr
@colinardo (Uwe)
Klasse Skript. Funktioniert jetzt perfekt. Vielen Dank!

@Biber
Danke für Deine Anmerkung. Das war das i-Tüpfelchen.

Gruß, alfabravo
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Wert aus Registry in Textdatei speichern - Batch oder VBS

gelöst Frage von ResolvBatch & Shell2 Kommentare

Hallo in die Runde, ich habe es leider nicht so mit Batch und Co. Ich würde gerne die letzen ...

Batch & Shell

Wert in einer TXT Datei suchen

Frage von nolle99Batch & Shell11 Kommentare

Hallo Leute Ich habe ein Problem Ich habe mir von meiner Seite alle URLs in einer TXT gespeichert (30.000 ...

Batch & Shell

VBS Script in eine Textdatei ausgeben (VBS mit Batch zusammenführen)

gelöst Frage von Luuke257Batch & Shell5 Kommentare

Hallo zusammen! Vorweg, ich bin absoluter neuling im Scripten, ich habe mir das alles nur so zusammengebastelt und versuche ...

VB for Applications

Mit VBS mehrere Links aus Textdatei öffnen

gelöst Frage von Privex007VB for Applications4 Kommentare

Hallo zusammen, ich würde gerne wissen, wie ich es anstelle das ich per VBS eine separate Textdatei öffnen kann ...

Neue Wissensbeiträge
Datenschutz

SiSyPHuS Win10: Analyse der Telemetriekomponenten in Windows 10

Tipp von freesolo vor 3 TagenDatenschutz1 Kommentar

Alle die sich detailliert für die Datensammlung interessieren die unter Windows 10 stattfindet, sollten sich folgende Analyse des BSI ...

Sicherheit
Adminrechte dank Intel-Grafikkarte
Information von DerWoWusste vor 3 TagenSicherheit2 Kommentare

ist das Advisory, welches beschreibt, welche Intel HD Graphics Modelle Sicherheitslücken haben, mit denen sich schwache Nutzer zu Admins ...

Internet

EU Urheberrechtsreform: Eingriff in die Internetkultur

Information von Frank vor 4 TagenInternet1 Kommentar

Liebe Besucherin, lieber Besucher, warum erscheint das obere Banner in allen Beiträgen? Aus Protest gegen Teile der geplanten EU-Urheberrechtsreform ...

Windows Server
Windows Backup - FilterManager Event 3
Tipp von NixVerstehen vor 5 TagenWindows Server

Hallo zusammen, ich bin kein gelernter ITler und auch beruflich nicht in dem Feld tätig. Wir setzen in unserem ...

Heiß diskutierte Inhalte
DNS
50 EUR für Telekom-, Unitymedia- und Vodafone-Kunden
Frage von Zorro1199DNS14 Kommentare

Hallo zusammen, wie evaluieren gerade das korrekte Einhalten von DNS-TTLs durch verschiedene Provider. Aktuell suchen wir noch Kunden der ...

Windows Server
Sonntagsfrage: Welchen Sinn seht Ihr noch im Server 2019 Essentials
Frage von ashnodWindows Server13 Kommentare

Guten Morgen, ich habe gestern den Windows Server 2019 Essentials als Trial in einer VM installiert um mir das ...

Windows Server
Windows 2012 R2 - Skript um Druckerkonfiguration auszulesen und zu setzen
gelöst Frage von Der-PhilWindows Server11 Kommentare

Hallo! Kennt ihr eine Möglichkeit, per Skript die Konfiguration eines Druckers auszulesen und auf einen anderen anzuwenden? Hintergrund: Ich ...

Grafik
Viele Fotos organisieren - Windows Dateisystem zu lahm bzw. überfordert
Frage von augustaparkGrafik11 Kommentare

Hallo und Guten Morgen, hat einer eine Idee, wie man viele Fotos sinnvoll und effizient organisieren kann? Wir haben ...