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.

Frage Entwicklung VB for Applications

Mitglied: noob-x

noob-x (Level 1) - Jetzt verbinden

30.09.2013, aktualisiert 16:58 Uhr, 3182 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
Einzelne Zeilen in txt Datei speichern und auslesen
gelöst Frage von noah1400Batch & Shell7 Kommentare

Liebe Forum-Mitglieder Ich habe da so eine Frage: Ich bin gerade dabei ein PW abfrage mit Batch zu machen. ...

Batch & Shell
Auslesen einer Datei mit einem Anführungszeichen im Text
Frage von c20082005Batch & Shell1 Kommentar

Hallo zusammen, ich habe ein Problem, das ich auch nach einiger Recherche im Internet nicht gelöst bekomme: Ich habe ...

Batch & Shell
Letzte Zeile einer .txt in eine andere .txt ausschneiden per Batch
gelöst Frage von AlexIOTBatch & Shell4 Kommentare

Hallo zusammen, zu meinem obrigen Thema habe ich leider nur in Richtung löschen und nicht in Richtung ausschneiden etwas ...

Batch & Shell
Datum in Datei speichern und wieder auslesen
gelöst Frage von AndroxinBatch & Shell3 Kommentare

Moinsen, ich spiele gerade ein wenig mit der Powershell und Zeitstempeln rum: Zeitstempel mit Get-Date erstellen, als String in ...

Neue Wissensbeiträge
Apple

IOS 11.2.1 stopft HomeKit-Remote-Lücke

Tipp von BassFishFox vor 1 TagApple

Das Update für iPhone, iPad und Apple TV soll die Fernsteuerung von Smart-Home-Geräten wieder in vollem Umfang ermöglichen. Apple ...

Windows 10

Windows 10 v1709 EN murkst bei den Regionseinstellungen

Tipp von DerWoWusste vor 1 TagWindows 10

Dieser kurze Tipp richtet sich an den kleinen Personenkreis, der Win10 v1709 EN-US frisch installiert und dabei die englische ...

Webbrowser

Kein Ton bei Firefox Quantum über RDP

Tipp von Moddry vor 1 TagWebbrowser

Hallo Kollegen! Hatte das Problem, dass der neue Firefox bei mir auf der Kiste keinen Ton hat, wenn ich ...

Internet

EU-DSGVO: WHOIS soll weniger Informationen liefern

Information von sabines vor 1 TagInternet4 Kommentare

Wegen der europäische Datenschutzgrundverordnung stehen die Prozesse um die Registrierung von Domains auf dem Prüfstand. Sollte die Forderungen umgesetzt ...

Heiß diskutierte Inhalte
Hardware
Kein Bild mit nur einer bestimmten Grafikkarten - Mainboard Konfiguration
gelöst Frage von bestelittHardware18 Kommentare

Hallo zusammen, ich hatte schon einmal eine ähnliche Frage gestellt. Damals hatte ich genau das gleiche Problem. Allerdings lies ...

Windows Server
RODC kann nicht aus Domäne entfernt werden
Frage von NilsvLehnWindows Server18 Kommentare

HAllo, ich arbeite in einem Universitätsnetzwerk mit 3 Standorten. Die Standorte haben alle ein ESXi Cluster und auf diesen ...

Hardware
Links klick bei Maus funktioniert nicht
gelöst Frage von Pablu23Hardware16 Kommentare

Hallo erstmal. Ich habe ein Problem mit meiner relativ alten maus jedoch denke ich nicht das es an der ...

Netzwerkmanagement
Mehrere Netzwerkadapter in einem PC zu einem Switch zusammenfügen
Frage von prodriveNetzwerkmanagement16 Kommentare

Hallo zusammen Vorweg, ich konnte schon einige IT-Probleme mit Hilfe dieses Forums lösen. Wirklich klasse hier! Doch für das ...