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, 3471 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
Batch : TXT-Datei auslesen
gelöst Frage von Newplay123Batch & Shell20 Kommentare

Hallo, ich habe eine Textdatei mit dem Inhalt " "Test" ". Also die zweiten Anführungszeichen sind auch mit in ...

Batch & Shell

Inhalt einer txt Datei pro Zeile in je neue txt Datei

gelöst Frage von sanshineBatch & Shell4 Kommentare

Servus, ich habe mehrer txt Dateien. In ihnen stehen manchmal 1 Zeile, manchmal 20 Zeilen. Ich möchte, dass ein ...

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 ...

Neue Wissensbeiträge
Hyper-V
Setup VM W2016 startet nicht in Hyper-V 2016
Erfahrungsbericht von keine-ahnung vor 37 MinutenHyper-V1 Kommentar

Moin, sitze gerade über meinem neuen Server und versuche, die VM auf den Host zu prügeln. Jetzt wollte ich ...

Zusammenarbeit

Verfügbar - Samsung PCoIP Zero Client NB-NH (40 Stück)

Tipp von loop.12 vor 2 StundenZusammenarbeit1 Kommentar

Wenn jemand braucht, ich habe 40 Stück: - Samsung PCoIP Zero Client NB-NH - PCoIP Client - - Preis ...

Server-Hardware

HPE Proliant ML350P Gen8 Probleme mit Zugriff auf Raid-Volumes

Erfahrungsbericht von goscho vor 6 StundenServer-Hardware1 Kommentar

Hallo Leute, das Problemgerät: HPE ML350P G8 Windows Server 2012R2 HyperV-Host 8 x 300 GB 10K SAS HDD (1 ...

Humor (lol)

"Linux und 5 Gründe Warum man kein Windows verwenden sollte sondern Ubuntu Linux"

Tipp von Snowbird vor 2 TagenHumor (lol)8 Kommentare

Gerade gefunden. Ja, ist etwas älter, aber irgendwie lustig?

Heiß diskutierte Inhalte
Microsoft
Windows 10 - Kombination von lokalen Benutzerkonten und Benutzern aus einer Domäne
Frage von PappnaseVxVVMicrosoft21 Kommentare

Hi, würde gerne folgendes realisieren, von dem ich gern wüsste, ob es geht. Ich habe einen Raum mit 3 ...

Netzwerkgrundlagen
Windows Server über Außen-IP nicht ansprechbar
Frage von uups81Netzwerkgrundlagen18 Kommentare

Hallo! Es gibt mehrere Windows Server (2016, 2019), die über einen zweiten Netzwerkadapter in einem lokalen Netzwerk miteinander verbunden ...

Windows 10
Windows 10 druckt nicht mehrere Kopien?
Frage von StefanKittelWindows 1016 Kommentare

Hallo, ich hatte gerade einen Anruf eines Kunden. Sein neuer PC (Win 10 1903) druckt nicht mehr mehrere Seiten ...

Grafikkarten & Monitore
Grafikkarten Angebot auf Amazon
gelöst Frage von NudellordGrafikkarten & Monitore16 Kommentare

Hallo Community, ich suche eine neue Grafikkarte und bin auf die Nvidea Gforce GTX 1080 ti gestoßen. Und dabei ...