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

Textdatei .txt mit .vbs auf doppelte Werte prüfen und ggf. zerlegen

Frage Entwicklung VB for Applications

Mitglied: alfabravo

alfabravo (Level 1) - Jetzt verbinden

04.09.2013 um 15:34 Uhr, 1773 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
gelöst Werte aus CSV in TXT - Powershell (20)

Frage von Komoran12 zum Thema Batch & Shell ...

Batch & Shell
gelöst VBS Script in eine Textdatei ausgeben (VBS mit Batch zusammenführen) (5)

Frage von Luuke257 zum Thema Batch & Shell ...

Batch & Shell
gelöst Mittels Batch jede Zeile einer Textdatei prüfen (4)

Frage von Peter32 zum Thema Batch & Shell ...

Batch & Shell
Wert in einer TXT Datei suchen (11)

Frage von nolle99 zum Thema Batch & Shell ...

Neue Wissensbeiträge
Windows Server

Umstellung SHA 1 auf SHA 2 - Migration der CA von CSP auf KSP

Tipp von Badger zum Thema Windows Server ...

Windows 10

Quato DTP94 unter Windows 10 x64 installieren und verwenden

Anleitung von anteNope zum Thema Windows 10 ...

Windows 10

Win10 1703 und Nutzerkennwörter bei Ersteinrichtung - erstaunliche Erkenntnis

(15)

Erfahrungsbericht von DerWoWusste zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Windows 7
Bluesreens unternehmensweit (18)

Frage von SYS64738 zum Thema Windows 7 ...

Festplatten, SSD, Raid
gelöst Raid-Controller (Areca) Datenverlust trotz R5 (16)

Frage von sebastian2608 zum Thema Festplatten, SSD, Raid ...

Windows Netzwerk
DNS ins mehreren Subnetzen (13)

Frage von joerg zum Thema Windows Netzwerk ...

Windows 10
Programm Installation bei Win 10 Fehlerhaft (12)

Frage von Keineahnungvonnix zum Thema Windows 10 ...