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 .txt datei auslesen, Text ausschneiden und in neue Datei speichern.

Mitglied: noob-x

noob-x (Level 1) - Jetzt verbinden

30.09.2013, aktualisiert 16:58 Uhr, 3327 Aufrufe, 6 Kommentare, 2 Danke

Hallo,

bitte um Eure Hilfe.

Ich möchte aus einer .txt Datei bestimmte Bereiche ausschneiden und in mehrere neue Dateien abspeichern.

Es handelt sich um einen Druckstrom aus einem Programm

.txt Datei ist folgendermaßen aufgebaut.

<-XxX

text
text
text
......

<-YyY <-XxX

text
text
text
Zwischensumme
......

<-YyY <-XxX

text
text
text
......

<-YyY <-XxX

nun sollte alles von <-XxX bis <-YyY ausgeschnitten und in einer neuen txt Datei abgespeichert werden,
ausser es steht Zwischensumme in dem Bereich, dann sollte <-YyY ignoriert werden und erst beim nächsten
oder übernächsten <-YyY ausgeschnitten werden.
Und das so oft bis die Quelldatei leer ist, welche dann auch gelöscht werden kann.

Am Anfang der Ziel Datei sollte jeweils AaA und am Ende ZzZ stehen.

Ist für mich ein großes ?, aber vermutlich für Euch Spezialisten kein Problem sowas zu machen, ich hab echt keine Ahnung wo ich anfangen oder suchen soll.
Batch oder VBS bin für alle Lösungsvorschläge offen.

Danke im Voraus

Andy
Mitglied: colinardo
30.09.2013, aktualisiert 01.10.2013
Hallo Andy,
versuchs mal mit folgendem VBS-Script und überprüfe damit ob ich dich richtig verstanden habe:
(Zeile 1 den Pfad zu deiner Textdatei eintragen, und in Zeile2 den Pfad wo die neuen Dateien erstellt werden sollen)
01.
FILEPATH = "C:\test.txt"
02.
FILEPATH_NEWFILES = "C:\Ausgabe"
03.
Set objFSO = CreateObject("Scripting.FileSystemObject")
04.
Set objText = objFSO.OpenTextFile(FILEPATH,1)
05.
strText = objText.ReadAll
06.
objText.Close()
07.
counter = 1
08.
Set myRegExp = CreateObject("vbscript.regexp")
09.
myRegExp.IgnoreCase = False
10.
myRegExp.Global = True
11.
myRegExp.Pattern = "((<-XxX[\s\S]*?Zwischensumme[\s\S]*?<-YyY[\s\S]*?<-YyY)|(<-XxX[\s\S]*?<-YyY))"
12.
Set myMatches = myRegExp.Execute(strText)
13.
If myMatches.Count >= 1 Then
14.
For Each myMatch In myMatches
15.
	If myMatch.SubMatches.Count >= 1 Then
16.
		Set f = objFSO.OpenTextFile(FILEPATH_NEWFILES & "\test_" & counter & ".txt",2,True)
17.
		strNewContent = "AaA" & vbNewLine & myMatch.SubMatches(0) & vbNewLine & "ZzZ"
18.
		f.Write(strNewContent)
19.
		f.Close
20.
		counter = counter + 1
21.
	End If
22.
Next
23.
End If
24.
'Nächste Zeile auskommentieren zum löschen der Quell-Datei
25.
'objFSO.DeleteFile(FILEPATH)
26.
Set objFSO = Nothing
getestet habe ich mit folgendem Text:

<-XxX
text
text
text
......
<-YyY <-XxX
text
text
text
Zwischensumme
......
<-YyY <-XxX
text
text
text
......
<-YyY <-XxX
text
Zwischensumme
text
text
......
<-YyY <-XxX
text
text
text
......
<-YyY
laut deiner Beschreibung sollte das Script aus diesem Text dann zwei Dateien mit folgendem Inhalt machen:

Datei 1
AaA
<-XxX
text
text
text
......
<-YyY <-XxX
text
text
text
Zwischensumme
......
<-YyY <-XxX
text
text
text
......
<-YyY
ZzZ
Datei 2
AaA
<-XxX
text
Zwischensumme
text
text
......
<-YyY <-XxX
text
text
text
......
<-YyY
ZzZ
wenn ich dich richtig verstanden habe ...
Das löschen der Quelldatei habe ich noch nicht aktiviert(Zeile 25), damit du testen kannst.

Grüße Uwe
Bitte warten ..
Mitglied: noob-x
01.10.2013 um 09:03 Uhr
Hi,

Danke für die schnelle Antwort, läuft aber noch nicht so wie es sein soll.

der Bereich zwischen <-XxX und <-YyY stellt ein Blatt dar, falls nun die Zwischensumme in diesem Bereich steht
ist das ein 2. Blatt welches zum 1. dazugehört und mit in die neue Datei übernommen werden soll, können aber theoretisch bis zu 100 und mehr Seiten sein die zusammengehören.

Falls keine Zwischensumme in dem Bereich zu finden ist handelt es sich um eine einseitige Rechnung.

Das ist nicht immer gleich. Mal sinds alles einseitige , mal sind ein paar mehrseitige dabei.

Das Skript von Dir funktioniert aber im großen und ganzen nur dass die Trennung noch nicht ganz passt, echt toll beim ersten Versuch schon so ein gutes Ergebnis
zu erzielen "RESPEKT" und vielen Dank nochmal.

Wäre super wenn Du mir hier mit dem Feinschliff noch etwas helfen könntest. Es können auch mehr Dateien in dem Verzeichnis sein

LG

Andy
Bitte warten ..
Mitglied: colinardo
01.10.2013, aktualisiert um 11:07 Uhr
Dein Wunsch sei mir Befehl
In Zeile 6 kannst du die Dateierweiterungen angeben, die im Quell-Ordner durchsucht werden soll - dies können auch mehrere sein Bsp. arrFileExtensions = Array("txt","log")
01.
'Pfad in dem sich die Stream-Files befinden
02.
FILEPATH = "C:\quelle"
03.
'Ausgabepfad für die einzelnen Rechnungen
04.
OUTPUTPATH = "C:\Ziel"
05.
'Erweiterungen der Dateien die durchsucht werden sollen
06.
arrFileExtensions = Array("txt")
07.
 
08.
Set objFSO = CreateObject("Scripting.FileSystemObject")
09.
Set myRegExp = CreateObject("vbscript.regexp")
10.
myRegExp.Global = True
11.
For Each file In objFSO.GetFolder(FILEPATH).Files
12.
	For i = 0 To UBound(arrFileExtensions)
13.
		If LCase(arrFileExtensions(i)) = LCase(objFSO.GetExtensionName(file.Path)) Then
14.
			Set objText = objFSO.OpenTextFile(file.Path,1)
15.
			strText = objText.ReadAll
16.
			objText.Close()
17.
			myRegExp.IgnoreCase = False
18.
			myRegExp.Pattern = "(<-XxX[\s\S]*?<-YyY)"
19.
			Set myMatches = myRegExp.Execute(strText)
20.
			If myMatches.Count >= 1 Then
21.
				counter = 1
22.
				strNewContent = ""
23.
				For Each myMatch In myMatches
24.
					If myMatch.SubMatches.Count >= 1 Then
25.
						myRegExp.IgnoreCase = True
26.
						myRegExp.Pattern = "Zwischensumme"
27.
						If myRegExp.Test(myMatch.SubMatches(0)) Then
28.
							strNewContent = strNewContent & myMatch.SubMatches(0)
29.
						Else
30.
							strNewContent = strNewContent & myMatch.SubMatches(0)
31.
							newFilePath = OUTPUTPATH & "\" & objFSO.GetBaseName(file.Path) & "_Rechnung_" & counter & "." & objFSO.GetExtensionName(file.Path)
32.
							Set f = objFSO.OpenTextFile(newFilePath,2,True)	
33.
							strNewContent = "AaA" & vbNewLine & strNewContent & vbNewLine & "ZzZ"
34.
							f.Write(strNewContent)
35.
							f.Close
36.
							strNewContent = ""
37.
							counter = counter + 1	
38.
						End If
39.
					End If
40.
				Next
41.
			End If
42.
			'Nächste Zeile auskommentieren zum löschen der Quell-Datei
43.
			'objFSO.DeleteFile(file.Path)
44.
			Exit For
45.
		End If
46.
	Next
47.
Next
48.
wscript.echo "Fertig"
49.
Set objFSO = Nothing
50.
Set myRegExp = Nothing
Grüße Uwe
Bitte warten ..
Mitglied: noob-x
01.10.2013 um 13:42 Uhr
Vielen Vielen Dank,

da spare ich mir in Zukunft Viel Zeit.

LG

Andy
Bitte warten ..
Mitglied: noob-x
02.10.2013 um 14:37 Uhr
Hi,

ich nochmal

was muss ich jetzt ändern wenn ich die Datei nicht löschen sondern in einem Ordner archivieren möchte ?

habs mit objFSO.MoveFile anstatt objFSO.DeleteFile versucht und den Zielordner eingegeben aber da bekomme ich immer ne Fehlermeldung.

Grüße

Andy
Bitte warten ..
Mitglied: colinardo
02.10.2013 um 14:58 Uhr
Zitat von noob-x:
was muss ich jetzt ändern wenn ich die Datei nicht löschen sondern in einem Ordner archivieren möchte ?

habs mit objFSO.MoveFile anstatt objFSO.DeleteFile versucht und den Zielordner eingegeben aber da bekomme ich immer ne
Fehlermeldung.
da hat du wahrscheinlich den Zielordner nicht mit einem Backslash am Ende angegeben, so sollte die Zeile aussehen:
objFSO.MoveFile file.Path,"c:\Backup\"
Grüße Uwe
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Merkwürdige Zeilenformatierung in txt Datei

gelöst Frage von miczarBatch & Shell3 Kommentare

Hallo zusammen, ich arbeite mit .cxv Dateien. Das ist nichts anderes wie .txt Dateien nur mit Programmspezifischer Endung. Pro ...

Batch & Shell

Ergebnis in Text datei ausgeben

gelöst Frage von XcaschoXBatch & Shell2 Kommentare

Hallo, irgendwie stehe ich auf dem schlauch. Habe folgende Batch erstellt, aber der Text wier immer überschrieben. Das ergebnis ...

Batch & Shell

Batch sucht bestimmten "text" in einer .txt datei und soll dann die Zeile anzeigen

gelöst Frage von MedicalAdBatch & Shell6 Kommentare

Hallo Leute, wie mann vielleicht schon aus dem Titel heraus finden kann, brauche ich eine Batch Datei die eine ...

Debian

Rasbian Text Datei gelöscht - wiederherstellbar?

Frage von bytetixDebian1 Kommentar

HI, habe mich mit meinem Handy per OpenVPN auf eine Samba Freigabe auf meiner entfernten PI verbunden und dort ...

Neue Wissensbeiträge
Humor (lol)
Administrator.de Perlen
Tipp von DerWindowsFreak2 vor 4 TagenHumor (lol)6 Kommentare

Hallo, Heute beim stöbern auf dieser Seite bin auf folgenden Thread aus dem Jahre 2006 gestossen: Was meint ihr? ...

Erkennung und -Abwehr
OpenSSH-Backdoor Malware erkennen
Tipp von Frank vor 5 TagenErkennung und -Abwehr

Sicherheitsforscher von Eset haben 21 Malware-Familien untersucht. Die Malware soll Hintertüren via OpenSSH bereitstellen, so dass Angreifer Fernzugriff auf ...

iOS
WatchChat für Whatsapp
Tipp von Criemo vor 8 TageniOS5 Kommentare

Ziemlich coole App für WhatsApp User in Verbindung mit der Apple Watch. Gibts für iOS sowohl als auch für ...

iOS
IOS hat nen Cursor!
Tipp von Criemo vor 8 TageniOS5 Kommentare

Nette Funktion im iOS. iPhone-Mauszeiger aktivieren „Nichts ist nerviger, als bei einem Tippfehler zu versuchen, den iOS-Cursor an die ...

Heiß diskutierte Inhalte
Samba
Windows 10 Client in Samba-Domäne hinzufügen scheitert
Frage von diwaffmSamba30 Kommentare

Hi Leute, ich habe einen Samba Server in der Version 4.9.3 auf einer OpenSuse Maschine laufen. Damit sind momentan ...

Windows Server
Kleine Umfrage: Windows Server Desktop oder Core?
Frage von doomfreakWindows Server22 Kommentare

Hey :) Ich wollte mal eine kleine Umfrage hier starten. Ich bin schon etwas länger auf dieser Seite hier ...

Batch & Shell
CMD-Fenster nach Task schließen
gelöst Frage von Hyperlink.93Batch & Shell16 Kommentare

Hallo, ich habe ein Skript was über einen Task bei jeder User Anmeldung läuft. Der Task startet eine CMD ...