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

.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, 3041 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 ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Ähnliche Inhalte
Batch & Shell
gelöst Einzelne Zeilen in txt Datei speichern und auslesen (7)

Frage von noah1400 zum Thema Batch & Shell ...

Microsoft Office
Excel Dateien durchsuchen und Werte einzeln in neue Excel Datei auslesen (1)

Frage von krischanii zum Thema Microsoft Office ...

Batch & Shell
Text-Datei auslesen und Inhalt als Parameter übergeben (1)

Frage von aubm2013 zum Thema Batch & Shell ...

Webentwicklung
gelöst HTML Output in eine txt Datei mit VisualBasicScript (2)

Frage von coca22COCA zum Thema Webentwicklung ...

Heiß diskutierte Inhalte
Windows Netzwerk
Windows 10 RDP geht nicht (16)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (13)

Frage von Motte990 zum Thema Microsoft Office ...