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 an bestimmten Stellen umbrechen und einen von bis bereich makieren und in ein neues TXT File mit bestimmter Bezeichnung speichern

Frage Entwicklung Batch & Shell

Mitglied: intermde

intermde (Level 1) - Jetzt verbinden

13.07.2010, aktualisiert 16.07.2010, 4106 Aufrufe, 39 Kommentare

Hallo, habe ein Problem wo ich nicht weiter komme. Muss dazu sagen, dass ich keine Ahnung von Programierung habe, aber vielleicht kann mir hier jemand weiterhelfen.

Habe eine TXT Datei mit folgendem Aufbau

IM2146564|Test1 gregt gergerg gerge|Test2|Test3 vfewgw gwgw weggweg
Test4
IM5464645|TestA jk jkljhjkl jkljkhhklh gfhg ghdfhfg |TestB vsdgsd gagaga fgsasgasgsag gassggsa IM654321 beher egwqgwe
TestC

TestD
IM5464664|TEST1|TEST2|TEST3
....

Die Datei soll nun wie folgt per Script aufgelöst werden

IM2146564|
Test1 gregt gergerg gerge|
Test2|
Test3 vfewgw gwgw weggweg
Test4

IM5464645|
TestA jk jkljhjkl jkljkhhklh gfhg ghdfhfg |
TestB vsdgsd gagaga fgsasgasgsag gassggsa IM654321 beher egwqgwe
TestC

TestD

IM5464664|
TEST1|
TEST2|
TEST3

Nun folgt aber der weitere Punk, dass ich hier gut 90000 Zeilen habe ( 2680 Datensätze)
wo aus jedem von IMXXXXXX bis zum Anfang des nächsten IMXXXXXX (IMXXXXXX kann aber auch mittem im Text vorkommen, darf aber nicht verwendet werden) der jeweilige Inhalt in eine neue TXT Datei kopiert werden soll und unter dem Dateinamen (wie aus Beispiel)
IM2146564 Test2.txt
IM5464645 TestB.txt
IM5464664 TEST2.txt
zeugt werden, und am Schluß 2680 TXT Dateien habe.

Oder wenn technisch so nicht machbar, dann ggf umgekehrt
1.
von IMXXXXXX bis zum Anfang des nächsten IMXXXXXX (IMXXXXXX kann aber auch mittem im Text vorkommen) der jeweilige Inhalt in eine neue TXT Datei kopiert werden soll und unter dem Dateinamen (wie aus Beispiel)
IM2146564 Test2.txt
IM5464645 TestB.txt
IM5464664 TEST2.txt

2. in den jeweiligen neuen TXT Files den Umbruch erzeugen

Sollte das Problem nicht ausführlich genug beschrieben wurde kann hier eine org. Datei mit 6 Datensätzen zur Verfügung stellen..

Ich hoffe es kann mir hier jemand weiter helfen.
39 Antworten
Mitglied: SamvanRatt
13.07.2010 um 10:07 Uhr
Hi
hast du dir schon mal sed (=Seriell Editor) angesehen; sofern Regexp mit vorkommen oder so ist er hervorragend für sowas geeignet
Gruß
Sam
Bitte warten ..
Mitglied: manuel-r
13.07.2010 um 10:10 Uhr
Mal kurz angerissen wie es funktioniert:
  • Datei per Script zeilenweise einlesen
  • In jeder eingelesenen Zeile prüfen ob die ersten beiden Zeichen IM lauten
  • Wenn ja, dann Zeile anhand Trennzeichen | in ein Array splitten
  • Aus den einzelnen Werten des Arrays den Dateinamen und die Dateiinhalte generieren
  • Neue Datei schreiben
  • nächste Zeile einlesen bis EOF
  • Fertig

Manuel
Bitte warten ..
Mitglied: intermde
13.07.2010 um 10:18 Uhr
Sorry, ich verstehe trotz der ausführlichen Umschreibung nur Bahnhof ( Dennoch vielen Dank für die schnelle Antwort).
Kenne mich mit Scripten und Programierung nicht aus,
Hab hier nur die Aufgabe bekommen das File umzuschüsseln um dieses in ein anderem Programm einlesen zu können.
Bitte warten ..
Mitglied: manuel-r
14.07.2010 um 13:37 Uhr
Das sind dann wohl denkbar schlechte Voraussetzungen für ein solches Projekt.
Du hast dann wohl nur zwei Möglichkeiten: Entweder findest du irgendein Tool mit dessen Hilfe du das bewerkstelligen kannst oder du eignest dir einige Scripting-Kenntnisse an.
Bitte warten ..
Mitglied: pieh-ejdsch
14.07.2010 um 14:44 Uhr
Hi Intermde,

wie Du zwar bei der 2. Datei auf IM5464645 TestB.txt kommst kann ich nicht nachmachen

zur Zeit ist das Auswahlkriterium des Hinteren Namenteiles, dass es in der selben Zeile, welche mit IM beginnen, ist und dahinter noch ein | zu finden ist.

das ganze könnte in etwa so gehen:
Bitte erst mit Testdaten ausprobieren!
01.
@echo off& setlocal 
02.
set "InPut=testfile.txt" 
03.
set "Pfad=D:\AdminHelp" 
04.
PushD "%Pfad%" 
05.
type nul>"%temp%\tmp" 
06.
for /f "usebackq tokens=*" %%i in ("%InPut%") do (set "Line=%%i" 
07.
	call :Line 
08.
09.
move "%temp%\tmp" "%Pfad%\%File% %Post%.txt" 2>nul 
10.
pause 
11.
goto :eof 
12.
:Line 
13.
if "IM%Line:*IM=%" == "%Line%" set "x=1" 
14.
:Split 
15.
if "%Line:*|=%" == "%Line%" (set "y=1"&goto :Write) 
16.
set "y=" 
17.
set "Linepost=%Line:*|=%" 
18.
call set "Line=%%Line:%Linepost%=%%" 
19.
set "Line=%Line:|=%" 
20.
for /f %%i in ("%Line%") do set "Test=%%i" 
21.
if /i "Test%Test:*Test=%" == "%Test%" set "Post=%Test%" 
22.
:write 
23.
for /f "tokens=*" %%i in ("%Line%") do ( 
24.
	if defined x (set "File=%%i" 
25.
		set "x=" 
26.
		move "%temp%\tmp" "%Pfad%\%File% %Post%.txt" 2>nul 
27.
28.
	echo %%i>>"%temp%\tmp" 
29.
30.
set "Line=%LinePost%" 
31.
if not defined y goto :Split
Gruß Phil
Bitte warten ..
Mitglied: intermde
15.07.2010 um 10:14 Uhr
Hallo Phil,

ersteinmal ein ganz grosses Lob an dich.

RESPEKT

Habe dieses über eine Testdatei laufen lassen

( 19 Datensätze)
er erzeugt auch von diesen 19 Datensätzen 8 Stück und bricht mit der Meldung

"passender" ist syntaktisch an dieser Stelle nicht verarbeitbar.

Habe mir die Datensätze angeschaut hierl iegt wohl das Problem das Inhaltlich Wörter in " " gesetzt worden sind.
Kann man dieses im Script mit beachten und übergehen lassen, so dass dies die " " mit übernommen werden.
Mir ist aufgefallen das im Text File der "Datenbank " auch Zeichen wie #; !; ' enthalten sind.
Können die auch Probleme verursachen

Vielen Dank für die weitere Hile
Bitte warten ..
Mitglied: pieh-ejdsch
15.07.2010 um 11:10 Uhr
Moin Intermde,

das liegt dann daran, dass in Zeile 13; 15 und 21 nur Variablen mit Umgebenden % Prozentzeichen im IF sofort beim auslesen der Zeile Aufgelöst werden.
wenn in diesen Variablen dann " Anführungszeichen enthalten sind - beeinflussen diese auch den IF - Vergleich -> und die Zeile wird zum Syntaktischen Fehler für die CMD.

das Ganze Umgehst Du, wenn die Variable entweder
  1. mit Setlocal EnableDelayedExpansion und dem Umgebenden ! Ausrufezeichen im IF Vergleich Aufgelöst werden - oder
  2. Die Anzuzeigenden Variablen in jeweils eine ForSchleife packst und die Dynamischen (oder auch LaufVariablen genannt) in den IF - Vergleich packst.

(Zeile 05 angepasst)

01.
@echo off& setlocal 
02.
set "InPut=testfile.txt" 
03.
set "Pfad=D:\AdminHelp" 
04.
PushD "%Pfad%" 
05.
del /q "%temp%\tmp" 2>nul 
06.
for /f "usebackq tokens=*" %%i in ("%InPut%") do (set "Line=%%i" 
07.
	call :Line 
08.
09.
move "%temp%\tmp" "%Pfad%\%File% %Post%.txt" 2>nul 
10.
pause 
11.
goto :eof 
12.
:Line 
13.
for /f "tokens=*" %%i in ("IM%Line:*IM=%") do for /f "tokens=*" %%j in ("%Line%") do if "%%i" == "%%j" set "x=1" 
14.
:Split 
15.
for /f "tokens=*" %%i in ("%Line:*|=%") do for /f "tokens=*" %%j in ("%Line%") do if "%%i" == "%%j" (set "y=1"&goto :Write) 
16.
set "y=" 
17.
set "Linepost=%Line:*|=%" 
18.
call set "Line=%%Line:%Linepost%=%%" 
19.
set "Line=%Line:|=%" 
20.
for /f %%i in ("%Line:"=%") do set "Test=%%i" 
21.
for /f "tokens=*" %%i in ("Test%Test:*Test=%") do for /f "tokens=*" %%j in ("%Test%") do if /i "%%i" == "%%j" set "Post=%Test%" 
22.
:write 
23.
for /f "tokens=*" %%i in ("%Line%") do ( 
24.
	if defined x (set "File=%Line:"=%" 
25.
		set "x=" 
26.
		move "%temp%\tmp" "%Pfad%\%File% %Post%.txt" 2>nul 
27.
28.
	echo %%i>>"%temp%\tmp" 
29.
30.
set "Line=%LinePost%" 
31.
if not defined y goto :Split
Passt es denn mit der NachnamensErstellung?

Gruß Phil
Bitte warten ..
Mitglied: intermde
15.07.2010 um 11:55 Uhr
Passt noch nicht 100%, erhalte beim Ausführen noch einige FM:

C:\test>1.bat
Die Datei "t °?er?▬?↨et"" kann nicht gefunden werden.
Die Datei "a³? i?↑?▬" kann nicht gefunden werden.
Die Datei "z¸U Z?↑?↑in Urlaub ist." kann nicht gefunden werden.
Die Datei "z??s♀?" kann nicht gefunden werden.
Die Datei " is½?" kann nicht gefunden werden.
Die Datei "rlÁ?b ?↑?↑" kann nicht gefunden werden.
Die Datei "r ZeÅ? i?↑?↑laub ist." kann nicht gefunden werden.
Die Datei "SeitÝ?m ?↓?↑t dieses Problem auf... Laut AW ist kein Admin im Hause,
da er zur Zeit in Urlaub ist." kann nicht gefunden werden.
Die Datei "temp♀Rn u§?↨"noch" kann nicht gefunden werden.
Die Datei " ♣hd O§?↓h" kann nicht gefunden werden.
Die Datei "s♣h" kann nicht gefunden werden.
Die Datei "04 ??SH?↔?↔ELT): Incident ³bernommen 26.01.10 15:45:19 (EMail close
26.01.2010 15:38:20 Georg Hofer): " kann nicht gefunden werden.
Die Datei "n f??ie?▬?→rkt|07.07.2010 15:42:10 (ISH.SCHMOELE): Mail entsprechend
an Zentralaufgaben / CC Standort versendet| L÷sung 07.07.2010 1
5:42:09 (ISH.SCHMOELE): Mail entsprechend an Zentralaufgaben / CC Standort vers
endet" kann nicht gefunden werden.
Die Datei ")8?À§?§?▲CROSS 1 Zeiten wurde auch in der Spalte Monat sowie Jahr der
Echtwert "" kann nicht gefunden werden.
Die Datei "wur0?n ?§?↔ jene Kennzahlen, die einen Tageszustand "" kann nicht ge
funden werden.
Die Datei "she(?ge?§?↔chtssagenden "" kann nicht gefunden werden.
Die Datei " L♀N?" kann nicht gefunden werden.
Die eingegebene Zeile ist zu lang.
":Line
" ist syntaktisch an dieser Stelle nicht verarbeitbar.

Es werden zwar Textfiles erzeugt , aber nicht alle.
Hab ich die Möglichkeit dir ggf das org File zukommen zu lassen, dass du hier mal einsehen kann wie der Aufbau der Datei wirklich ist.

Grüße aus Köln...
Bitte warten ..
Mitglied: pieh-ejdsch
15.07.2010 um 14:40 Uhr
na sowas FM's

sind sicher Klammern oder AnführungsZeichen schuld.
dann breiten wir dies mal ein bisschen auseinander.

01.
@echo off& setlocal 
02.
set "InPut=testfile.txt" 
03.
set "Pfad=D:\Adminhelp" 
04.
PushD "%Pfad%" 
05.
del /q "%temp%\tmp" 2>nul 
06.
for /f "usebackq tokens=*" %%i in ("%InPut%") do ( 
07.
	set "Line=%%i" 
08.
	call :Line 
09.
10.
move "%temp%\tmp" "%Pfad%\%File% %Post%.txt" 2>nul 
11.
pause 
12.
goto :eof 
13.
:Line 
14.
for /f "tokens=*" %%i in ( 
15.
	"IM%Line:*IM=%" 
16.
) do for /f "tokens=*" %%j in ( 
17.
	"%Line%" 
18.
) do if "%%i" == "%%j" set "x=1" 
19.
:Split 
20.
for /f "tokens=*" %%i in ( 
21.
	"%Line:*|=%" 
22.
) do for /f "tokens=*" %%j in ( 
23.
	"%Line%" 
24.
) do if "%%i" == "%%j" (set "y=1"&goto :Write) 
25.
set "y=" 
26.
set "Linepost=%Line:*|=%" 
27.
call set "Line=%%Line:%Linepost%=%%" 
28.
set "Line=%Line:|=%" 
29.
for /f %%i in ( 
30.
	"%Line:"=%" 
31.
) do set "Test=%%i" 
32.
for /f "tokens=*" %%i in ( 
33.
	"Test%Test:*Test=%" 
34.
) do for /f "tokens=*" %%j in ( 
35.
	"%Test%" 
36.
) do if /i "%%i" == "%%j" set "Post=%Test%" 
37.
:write 
38.
for /f "tokens=*" %%i in ( 
39.
	"%Line%" 
40.
) do ( 
41.
	if defined x ( 
42.
		set "File=%Line:"=%" 
43.
		set "x=" 
44.
		move "%temp%\tmp" "%Pfad%\%File% %Post%.txt" 2>nul 
45.
46.
	echo %%i>>"%temp%\tmp" 
47.
48.
set "Line=%LinePost%" 
49.
if not defined y goto :Split
wenn jetzt noch eine Datei nicht erzeugt wird und der Inhalt in einer anderen stehen sollte, dann sind die Zeichen / \ : * ? | > <, welche nicht in den Namen einer Datei oder eines Ordners gehören, im neuen Dateinamen vorhanden.

Gruß Phil
Bitte warten ..
Mitglied: TsukiSan
16.07.2010 um 08:40 Uhr
Kurze Frage:

wäre dieser 4-Zeiler
01.
MeineDatei = "C:\NeuUmbruch.txt" 
02.
 
03.
Set FSO = CreateObject("Scripting.FileSystemObject") 
04.
MyText = Replace(FSO.OpenTextFile(MeineDatei, 1).ReadAll,"|", vbCrLF)  
05.
 
06.
msgbox MyText
auch ein Lösungsansatz (in VBS)?

gruss
Tsuki
Bitte warten ..
Mitglied: intermde
16.07.2010 um 12:20 Uhr
Danke Phil für die bisherige gute Hilfe.

Ich habe mir nochmal Gedanken gemacht, da hier wohl zu viele unterschiedliche Zeichen im Text stehen die mit einem Script nicht abgegriffen werden
und dabei weitere Probleme bestehen.

Habe daher die Datei nochmal ein wenig Modifiziert, Trennzeichen wie | sind nicht mehr vorhanden, es müssen keine Umbrüche ect mehr erzeugt werden , da in der neuen TXT bereits alles aufgegliedert wurde.:

Die Datei sieht wie folgt aus und ist immer geich aufgebaut:

IM12345678 <= (immer IM+8 Zeichen gefolgt von einem Umbruch)

TEXTE mit unterschiedlichen Absätzen und Zeichen

STOP* <= (ENDE des Blocks)
IM87654321 <= (immer IM+8 Zeichen gefolgt von einem Umbruch)

TEXTE mit unterschiedlichen Absätzen und Zeichen

STOP* <= (ENDE des Blocks)
IMxxxx.......

Gibt es die Möglichkeit alles was mit IMXXXXXXXX <= (immer IM+8 Zeichen gefolgt von einem Umbruch)
anfängt und mit STOP* endet in ein neues File zu überführen ( und dabei als Dateinamen das was der ersten Zeile steht ( in diesem Fall IMxxxxx) zu übernehmen?
Bitte warten ..
Mitglied: intermde
16.07.2010 um 12:20 Uhr
PS VBS hab ich selber noch nicht auf dem Rechner installiert
Bitte warten ..
Mitglied: TsukiSan
16.07.2010 um 16:35 Uhr
PS VBS hab ich selber noch nicht auf dem Rechner installiert
muss nicht installiert werden. Ist ein "Boardmittel" von MS.
Du trägst das Schnipsel einfach in ein "txt"-file ein und benennst es "hinten" in "vbs" um.
Dann nur noch doppelklicken.

Aber ich denke, ihr seid in Batch schon so weit, dass eine Überlegung in VBS (VisualBasicScript)
nur (eventuell) unnötig wäre. Aber meine Idee war nur die, dass eventuell jemand anderes, der diesen Thread liest, eventuell mit VBS etwas ähnliches lösen möchte.

Gruss
Tsuki
Bitte warten ..
Mitglied: intermde
16.07.2010 um 17:20 Uhr
Aber vielleicht ist für dich u.a. im VBS Script eine möglichkeit gegeben die anforderrung mit ein paar zeilen Quellcode umzusetzen.

Folgendes soll eigentlich passieren:

Makiere alles, bis das Wort STOP* gefunden wird,
kopiere dieses in ein neues Dokument und speicher es als txt ab,
und führe die Schleife fort mit dem nächsten Datensatz

Die Datei sieht wie folgt aus und ist immer gleich aufgebaut:

IM12345678 <= (immer IM+8 Zeichen gefolgt von einem Umbruch)

TEXTE mit unterschiellichen Absätzen und Zeichen

STOP* <= (ENDE)
IM87654321 <= (immer IM+8 Zeichen gefolgt von einem Umbruch)

TEXTE mit unterschiellichen Absätzen und Zeichen

STOP* <= (ENDE)
IMxxxx.......
Bitte warten ..
Mitglied: TsukiSan
16.07.2010 um 17:38 Uhr
eventuell hätte ich einen Vorschlag in VBS:
Deine Datei ist ungefähr so aufgebaut: (habe unter "C:\" Eine Datei mit dem Namen "Stop.txt" angelegt und folgende Einträge eingefügt)
IM12345678
1
2
3
STOP
IM87654321
Ä
Ö
Ü
STOP
IM12345678
a
s
d
f
g
h
Stop
usw.

Dann kopiere dir mal zum Testen folgenden Code in VBS:
01.
MeineDatei = "C:\Stop.txt" 
02.
 
03.
Set FSO = CreateObject("Scripting.FileSystemObject") 
04.
MyText = Split(FSO.OpenTextFile(MeineDatei, 1).ReadAll,vbCrLF & "IM")  
05.
 
06.
msgbox Mytext(0) 
07.
 
08.
for i = 1 to Ubound(MyText) 
09.
	msgbox "IM" & Mytext(i) 
10.
Next
Ist es so in etwa, was du meinst?

Gruss
Tsuki
Bitte warten ..
Mitglied: intermde
16.07.2010 um 17:42 Uhr
Das ist doch auch mal TOP.

Wenn die Ausgabe nun anstatt auf dem Bildschirm in eine TXT Datei mit der IM Nummer gespeichert werden könnte wäre das ideal,
Wichtig wäre das ALLES VON IMxxxxx bis STOP* wirklich auch abzufragen und den Inhalt in eine Textdatei zu bekommen.
Bitte warten ..
Mitglied: TsukiSan
16.07.2010 um 18:05 Uhr
na eventuell so:
01.
MeineDatei = "C:\Stop.txt" 
02.
 
03.
Set FSO = CreateObject("Scripting.FileSystemObject") 
04.
MyText = Split(FSO.OpenTextFile(MeineDatei, 1).ReadAll,vbCrLF & "IM")  
05.
 
06.
	Set MyFile = FSO.CreateTextFile("c:\" & Left(Mytext(0),10) & ".txt" , true) 
07.
	MyFile.WriteLine (Mytext(0)) 
08.
	MyFile.Close 
09.
 
10.
for i = 1 to Ubound(MyText) 
11.
	on error resume next 
12.
	Set MyFile = FSO.CreateTextFile("c:\IM" & Left(Mytext(i),8) & ".txt" , true) 
13.
	MyFile.WriteLine (Mytext(i)) 
14.
	MyFile.Close 
15.
Next
Wäre dir das recht?

Gruss
Tsuki
Bitte warten ..
Mitglied: intermde
16.07.2010 um 18:12 Uhr
HEY...DAS IST TOPPPPP!!!

Ich werde das gleich mal mit einem anderen File austesten
und wenn das funktioniert.

wo kann ich die 5 STERNE hinterlassen?
Bitte warten ..
Mitglied: TsukiSan
16.07.2010 um 18:15 Uhr
Wenn ich das Script ausprobiere passiert nach dem doppelklick nichts.
Schau mal unter "C:\" nach!
Da müßten einige Dateien neu angelegt sein!

[Edit]
diese Antwort hat sich auch erledigt. Alles schmilzt dieser Tage
[/Edit]
Bitte warten ..
Mitglied: TsukiSan
16.07.2010 um 18:17 Uhr
wo kann ich die 5 STERNE hinterlassen?
Ich bin bescheiden! Ein kühles Hopfen bei den heutigen Temperaturen reicht völlig aus

Gruss
Tsuki

[Edit]
Aber ein bastla sollte hier lieber nochmals drüber schauen!!!!!!
[/Edit]
Bitte warten ..
Mitglied: intermde
16.07.2010 um 18:21 Uhr
für mich ist es nur ganz wichtig, dass er alles bis STOP* mit nimmt.
Aber das werd ich mit hmm nun ja 20-30 Datensätzen testen.
Bitte warten ..
Mitglied: TsukiSan
16.07.2010 um 18:23 Uhr
halt uns auf dem laufenden! Die Batch-Dinger sind auch bestens!

Ein schönes WE

Tsuki
Bitte warten ..
Mitglied: bastla
16.07.2010 um 19:09 Uhr
Hallo Tsuki!

Auf ganz speziellen Wunsch :
"Split()" wäre auch meine Wahl, allerdings würde ich die eigens eingefügte Markierung "STOP*" zum Aufteilen verwenden:
01.
MeineDatei = "C:\Stop.txt" 
02.
Marke = "STOP*" 'Blockende-Markierung 
03.
Ziel = "C:\" 'Zielordner für die zu erstellenden Einzeldateien 
04.
 
05.
If Right(Ziel, 1) <> "\" Then Ziel = Ziel & "\" 'Sicher stellen, dass Zielpfad mit "\" endet 
06.
Set FSO = CreateObject("Scripting.FileSystemObject") 
07.
MyText = Split(FSO.OpenTextFile(MeineDatei, 1).ReadAll, Marke)  
08.
 
09.
For i = 0 To Ubound(MyText) 
10.
    If Left(MyText(i) = vbCrLf Then MyText(i) = Mid(MyText(i), 3) 'keine Zeilenschaltung am Anfang des Blocks zulassen 
11.
    If Len(MyText(i)) > 10 Then FSO.CreateTextFile(Ziel & Left(Mytext(i),10) & ".txt").Write MyText(i) 'Block nur verarbeiten, wenn mehr als 10 Zeichen lang 
12.
Next
Das zweite "If" soll sicherstellen, dass keine zu kurzen Blöcke (vor allem nach der letzen Marke) berücksichtigt werden - scheint mir vorteilhafter als "On Error Resume Next" ...

Falls übrigens am Ende der einzelnen Dateien eine Zeilenschaltung gewünscht wäre, "WriteLine" anstelle von "Write" verwenden.

Grüße
bastla

... und übrigens : ein leicht verspätetes "Willkommen im Forum, intermde"!
Bitte warten ..
Mitglied: intermde
19.07.2010 um 07:00 Uhr
Wünsche einen guten Morgen ,
danke Bastla,


danke für das weitere Script.

Dieses erzeugt beim Ausführen folgenden Fehler;
Windows Script Host
Skript: C:\test\schrip2.vbs
Zeile: 10
Zeichen: 32
Fehler: ')' erwartet
Code: 800A03EE
Quelle: Kompilierungsfehler in Microsoft VBScript

OK

Ich habe da noch eine Frage, besteht die Möglichkeit den Absatz mit IMxxxxx + die 3 Zeile als Dateiname zu verwenden?
So das IM12345678 TEST.txt heraus kommt?

Aufbau des Files:

IM12345678

TEST

rgghrwe
ghherh
herh

STOP*
Bitte warten ..
Mitglied: TsukiSan
19.07.2010 um 07:31 Uhr
Hallo intermde

in Zeile 10 fehlt eine Klammer. Erstze sie wie folgt:
01.
If Left(MyText(i)) = vbCrLf Then MyText(i) = Mid(MyText(i), 3) 'keine Zeilenschaltung am Anfang des Blocks zulassen
für deine 2te Anforderung ginge eventuell nach Zeile 9 (bastlas Script!)
01.
temp = Split(MyText(i), vbCrlf)
und dann die Zeile 11 eventuell so barbeiten:
01.
If Len(MyText(i)) > 10 Then FSO.CreateTextFile(Ziel & Left(Mytext(i),10) & temp(2) & ".txt").Write MyText(i) 'Block nur verarbeiten, wenn mehr als 10 Zeichen lang 
Bitte mal testen und bastla wird uns eh sagen, was ich falsch gemacht habe

Gruss
Tsuki
Bitte warten ..
Mitglied: bastla
19.07.2010 um 08:33 Uhr
@Tsuki
Eigentlich habe bisher nur ich etwas falsch gemacht - danke für die Korrektur.

Deine Ergänzung sollte so funktionieren - Du könntest vielleicht mit einer Überprüfung von "UBound(temp)" noch sicherstellen, dass es auch tatsächlich eine Zeile 3 gibt ...

Grüße
bastla
Bitte warten ..
Mitglied: TsukiSan
19.07.2010 um 08:35 Uhr
Hi bastla

Eigentlich habe bisher nur ich etwas falsch gemacht - danke für die Korrektur.
Na, na, na! Ich habe jede Menge von dir hier gelernt. Und als Fehler würde ich die fehlende Klammer nicht ansehen.
Ehr als Tastaturproblem.

Deine Ergänzung sollte so funktionieren - Du könntest vielleicht mit einer Überprüfung von "UBound(temp)" noch
sicherstellen, dass es auch tatsächlich eine Zeile 3 gibt ...
Das ist ein sehr guter Hinweis.

Viele Grüße
Tsuki
Bitte warten ..
Mitglied: bastla
19.07.2010 um 08:40 Uhr
Hallo Tsuki!
... als Tastaturproblem.
Den muss ich mir merken ...

Tatsächlich war's der typische Fall von "Verschlimmbesserung beim Posten" - getestet hatte ich noch ohne das "If Left(..." ...

Grüße
bastla
Bitte warten ..
Mitglied: intermde
19.07.2010 um 09:06 Uhr
und nun kommt wieder ne frage des DummUsers:

Zeile 9 ; 10 und 11 angepasst, aber wo schreib ich
UBound(temp) hin?

Vielleicht kann mir jemand den quelltext nochmal zusammengefasst schreiben?

Ich glaub das We war wohl zu heftig *lol

Grüße aus Köln und ein danke schön für die tolle Hilfe....
Bitte warten ..
Mitglied: TsukiSan
19.07.2010 um 10:10 Uhr
na ich würd's dann eventuell so mal probieren:
01.
MeineDatei = "C:\Stop.txt" 
02.
Marke = "STOP*" 'Blockende-Markierung 
03.
Ziel = "C:\" 'Zielordner für die zu erstellenden Einzeldateien 
04.
 
05.
If Right(Ziel, 1) <> "\" Then Ziel = Ziel & "\" 'Sicher stellen, dass Zielpfad mit "\" endet 
06.
Set FSO = CreateObject("Scripting.FileSystemObject") 
07.
MyText = Split(FSO.OpenTextFile(MeineDatei, 1).ReadAll, Marke)  
08.
 
09.
For i = 0 To Ubound(MyText) 
10.
    temp = Split(MyText(i), vbCrlf) 
11.
    If Left(MyText(i)) = vbCrLf Then MyText(i) = Mid(MyText(i), 3) 'keine Zeilenschaltung am Anfang des Blocks zulassen 
12.
    If Len(MyText(i)) > 10 Then 
13.
              If  UBound(temp) > 2 then 
14.
                         FSO.CreateTextFile(Ziel & Left(Mytext(i),10) & temp(2) & ".txt").Write MyText(i) 
15.
              Else 
16.
                         FSO.CreateTextFile(Ziel & Left(Mytext(i),10) & ".txt").Write MyText(i) 
17.
            End If 
18.
     End If 
19.
Next
nochmals drüber schauen, bitte!

Gruss
Tsuki
Bitte warten ..
Mitglied: intermde
19.07.2010 um 10:42 Uhr
Danke schön. Bringt beim ausführen leider folgende FM:
Windows Script Host
Skript: C:\test\schrip2.vbs
Zeile: 11
Zeichen: 5
Fehler: Falsche Anzahl an Argumenten oder ungültige Eigenschaftszuweisung: 'Left'
Code: 800A01C2
Quelle: Laufzeitfehler in Microsoft VBScript

OK
Könntest nochmal drüber schaun?
Bitte warten ..
Mitglied: bastla
19.07.2010 um 11:53 Uhr
Hallo intermde!

Wenn ich etwas verpfusche, dann aber gleich ordentlich - nimm diese Zeile 11:
If Left(MyText(i), 2) = vbCrLf Then MyText(i) = Mid(MyText(i), 3) 'keine Zeilenschaltung am Anfang des Blocks zulassen
Grüße
bastla
Bitte warten ..
Mitglied: intermde
19.07.2010 um 12:50 Uhr
Danke für die Hilfe,

klappt bei der 1 TXT Datei ohne Probleme, alle anderen Files generiert er nur die TXT Files mit der IM Nummer.

Grüße
Sven
Bitte warten ..
Mitglied: bastla
19.07.2010 um 15:09 Uhr
Hallo intermde!

Das wäre vor allem dann der Fall, wenn in den anderen Blöcken keine Zeile 3 existiert oder diese leer ist ...

Könntest Du ein (bei Bedarf anonymisiertes) Beispiel des aktuellen Standes der Ausgangsdatei bzw der ersten zB 5 Blöcke davon (unter Verwendung von "<code>"- und "</code>"-Tags) posten?

Grüße
bastla
Bitte warten ..
Mitglied: intermde
19.07.2010 um 16:48 Uhr
Hier mal ein Beispiel mit 3 Datensätzen

01.
IM08875912 
02.
 
03.
XXXXXXXX - GGGGGG GGGGG - evhkgöl lkögklö rklrelkö rklözerklj zerkl 
04.
 
05.
rklkljglkjretk ljkljtjkl kltjre kljtkljözt ölkjzer ölkjzkjlöz twlkjzt lkjzkjlz kjljkltz jklztlk 
06.
 
07.
17.04.2009 15:59:07  
08.
(ISH.AAAAAAA): relköherhj lkhth4hjtrjket kjretjkretjkrt ljkjrkt rjjkr rhajkt 
09.
 
10.
++++++Lösung +++++++ 
11.
 
12.
17.04.2009 15:59:07  
13.
(ISH.AAAAAAA): Drelkgrelkgklerjtlkjö zklkjlzerlkjreklzerlkjrelkzerzreutztruztrztruwurtutuutrutzjtewrturetzutzioutztutuoiztezutuirtueutterztretbtrhuzr ugrhjugteh erhet herhotp er hear oihaereoih eqhioziho hiozhio rzpoihqeriohzp iohpzioheoihprezihopre 
14.
 
15.
STOP* 
16.
IM11050056 
17.
 
18.
XXXXXXXX - EEEEEEEE  Bei Anlage FM: - vewlkjhglhrekhlgkljerlkjökljrekjlerklhelkjhrsjökjf,gklhegkölaer lköhklkljhkljkljklt 
19.
 
20.
15.03.2010 11:07:07  
21.
(ISH.BBBBBBBB): fdkgfhklö jklöhkltkljte zlkjötrzkjt zlktrztr ztölkrzkzlktzkzklzklöwr 
22.
 
23.
++++++Lösung +++++++ 
24.
 
25.
15.03.2010 11:06:59  
26.
(ISH.BBBBBBBB): grjehjreherjhjeh lkghlerghrelkhgkhlerlkhr 
27.
 
28.
STOP* 
29.
IM11462149 
30.
 
31.
XXXXXXX - DDDDD - AAAAAAAAA - ewkjölreagklöjj lkökjlgkl hlkjer kljerklj kljöekl 
32.
 
33.
kejlkjeherhjerhj lkhkltrklhrjklewkjlwreö kjlkljwkl jzrktljzlk 
34.
 
35.
04.05.2010 09:51:43  
36.
(ISH.DDDDDDDD): Uklglkjwekljrekjelkjzreköj bkzk herlkjö lkrejtkljörtklöjertklröj. 
37.
 
38.
++++++Lösung +++++++ 
39.
 
40.
04.05.2010 09:51:36  
41.
(ISH.DDDDDDDD): Ureklgelkjgekljglkjgerlkjbkbvkl tlktkljretklertkleklzt tkljtkreljkljtkwtezw 
42.
zrzrwzzrtzrtzu 
43.
zherzu4ruzrt4uerut 
44.
 
45.
truutrlzkrturlktiuort tioeroitioertioereztoiw 
46.
 
47.
STOP* 
48.
IM10770448 
49.
 
50.
XXXXXX - DDD DDDD DDDD 
51.
 
52.
------------------------------------------------------------------------------------------------------------- 
53.
 
54.
09.02.2010 11:39:51  
55.
(ISH.CCCCCCCC): ewgkljwglkj gjklglkj klejr tkljert lkrejtkljsrtrkljtrlkj trlkj zkrljeelkjrzelkjz 
56.
 
57.
++++++Lösung +++++++ 
58.
 
59.
09.02.2010 11:39:51  
60.
(ISH.CCCCCCCC): vedjklglkjwelktewkljr lkjbrelkjt lkjöktljr er tre 
61.
ghretretretret 
62.
ret 
63.
ert 
64.
rretteteerz  09.02.2010 10:59:11  
65.
(ISH.CCCCCCCC): csfghklgkltkl kljtwekjltewkltkl jtwekljt wkljtwejkltewkljtewlkjtr 
66.
 
67.
STOP* 
68.
IM11200045 
69.
 
70.
XXXXX - BAL BLA BLA - BLUB BLUB BLUB - 2gewrkgtklj kljkjlre kljttkljerkljt relkt. 
71.
 
72.
elkjfgejklt gklj4kjl3lkjkl jkljt34lkjlkjk4lj klvjt43klj 
73.
 
74.
01.04.2010 16:44:23  
75.
(ISH.EEEEEEEE): ewjkfjg  lkjewklt weklewrkl tewrkljter klrelkjt kl jtwelkj wktljew 
76.
 
77.
++++++Lösung +++++++ 
78.
 
79.
01.04.2010 16:44:23  
80.
(ISH.EEEEEEEE): csajavsjjjkfjk jkj kew jwejkwe jwekjtwejk tejk therkjte.  01.04.2010 16:17:46  
81.
(ISH.EEEEEEEE): Agjkgjglkewkjlklj lktklwkltkl tklj relkjtkrljt kjlertkljrtrekjltrkle  01.04.2010 16:16:29  
82.
(ISH.EEEEEEEE): Adkllkjldgklegkljk ktklewrkltkl wlkö kölwekltlkt kwlt k wölj 01.04.2010 15:57:14  
83.
(ISH.EEEEEEEE): kgjeajkgeköjlgeökgerköjgkgkgklög  01.04.2010 15:11:51  
84.
(ISH.AAAAAAA): Fekwklglk kltklgklrtklj treklrtkltrkelklerj 
85.
 
86.
STOP* 
87.
IM11000046 
88.
 
89.
rejkeghre geklrglkreklgkl gelkjgrkelkelrg klgerlgkjreklr 
90.
 
91.
felkkjlfekljghkljeakhl gklreklgeklgeklö kljvjkeklkerklörg 
92.
 
93.
09.03.2010 07:38:32  
94.
(ISH.CCCCCCCC): fglkelkklgklgkl krekgektekeklök greklgterköltkjlöet tewkrltklertkltkölköt 
95.
 
96.
++++++Lösung +++++++ 
97.
 
98.
09.03.2010 07:38:29  
99.
(ISH.CCCCCCCC): dggreg jjhhegjrek  grejgjkerjkerjgkgjrejer gtejkgrejkgjkgjkherjkger 
100.
 
101.
STOP*
Bitte warten ..
Mitglied: bastla
19.07.2010 um 17:18 Uhr
Hallo intermde!

Durch Vertauschen der Zeilen 10 und 11 sieht das Script jetzt so aus:
01.
MeineDatei = "C:\Stop.txt" 
02.
Marke = "STOP*" 'Blockende-Markierung 
03.
Ziel = "C:\" 'Zielordner für die zu erstellenden Einzeldateien 
04.
 
05.
If Right(Ziel, 1) <> "\" Then Ziel = Ziel & "\" 'Sicher stellen, dass Zielpfad mit "\" endet 
06.
Set FSO = CreateObject("Scripting.FileSystemObject") 
07.
MyText = Split(FSO.OpenTextFile(MeineDatei, 1).ReadAll, Marke)  
08.
 
09.
For i = 0 To Ubound(MyText) 
10.
    If Left(MyText(i), 2) = vbCrLf Then MyText(i) = Mid(MyText(i), 3) 'keine Zeilenschaltung am Anfang des Blocks zulassen 
11.
    temp = Split(MyText(i), vbCrlf) 
12.
    If Len(MyText(i)) > 10 Then 
13.
        If  UBound(temp) > 2 Then 
14.
            FSO.CreateTextFile(Ziel & Left(Mytext(i),10) & temp(2) & ".txt").Write MyText(i) 
15.
        Else 
16.
            FSO.CreateTextFile(Ziel & Left(Mytext(i),10) & ".txt").Write MyText(i) 
17.
        End If 
18.
    End If 
19.
Next
und sollte auch funktionieren - allerdings nicht mit Deinen Beispieldaten, da in der Zeile 3 des zweiten Blocks ein ":" und damit ein für Dateinamen nicht erlaubtes Zeichen (weitere wären: "*?\/<|>) enthalten ist ...

Wie realistisch ist diese Möglichkeit bei "Echtdaten", und was soll ggf in diesem Fall passieren?

Grüße
bastla
Bitte warten ..
Mitglied: intermde
19.07.2010 um 17:27 Uhr
Die Frage ist, ob die Möglichkeit besteht per Script aus der dritten Zeile alle Sonderzeichen heraus zu nehmen. z.b. durch ein " " ersetzen. Da diese für den Titel in der Bezeichnung keine Rolle spielen.
Bitte warten ..
Mitglied: bastla
19.07.2010 um 17:34 Uhr
Hallo intermde!
... aus der dritten Zeile alle Sonderzeichen heraus zu nehmen. z.b. durch ein " " ersetzen ...
... wäre auch mein Vorschlag, allerdings Ersetzung nur für den Dateinamen, nicht im Dateiinhalt:
01.
MeineDatei = "C:\Stop.txt" 
02.
Marke = "STOP*" 'Blockende-Markierung 
03.
Ziel = "C:\" 'Zielordner für die zu erstellenden Einzeldateien 
04.
DieNicht = ":*?\/<|>""" 'in Dateinamen nicht zulässige Zeichen 
05.
 
06.
If Right(Ziel, 1) <> "\" Then Ziel = Ziel & "\" 'Sicher stellen, dass Zielpfad mit "\" endet 
07.
Set FSO = CreateObject("Scripting.FileSystemObject") 
08.
MyText = Split(FSO.OpenTextFile(MeineDatei, 1).ReadAll, Marke)  
09.
 
10.
For i = 0 To Ubound(MyText) 
11.
    If Left(MyText(i), 2) = vbCrLf Then MyText(i) = Mid(MyText(i), 3) 'keine Zeilenschaltung am Anfang des Blocks zulassen 
12.
    If Len(MyText(i)) > 10 Then 
13.
        temp = Split(MyText(i), vbCrlf) 'Block in Zeilen-Array "temp" zerlegen 
14.
        If  UBound(temp) >= 2 Then 'mindestens 3 Zeilen vorhanden? 
15.
            N = temp(2) 'Dateinamen um Inhalt der Zeile 3 erweitern, ... 
16.
            For a = 1 To Len(DieNicht) 
17.
                N = Replace(N, Mid(DieNicht, a, 1), " ") '... vorweg aber unzulässige Zeichen durch Blank ersetzen 
18.
            Next 
19.
            FSO.CreateTextFile(Ziel & Left(Mytext(i),10) & N & ".txt").Write MyText(i) 'Block mit erweitertem Dateinamen schreiben 
20.
        Else 
21.
            FSO.CreateTextFile(Ziel & Left(Mytext(i),10) & ".txt").Write MyText(i) 'Block nur mit "IM########" als Dateinamen schreiben 
22.
        End If 
23.
     End If 
24.
Next
Grüße
bastla
Bitte warten ..
Mitglied: intermde
19.07.2010 um 18:51 Uhr
Hallo, danke an alle.

Klappt bestens. SUPER.

Danke für die Unterstützung.....
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 zum Thema Batch & Shell ...

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

Frage von coca22COCA zum Thema Webentwicklung ...

Batch & Shell
Merkwürdige Zeilenformatierung in txt Datei (3)

Frage von miczar zum Thema Batch & Shell ...

Batch & Shell
gelöst In Batchdatei Variablen befüllen - mit Werten aus einer TXT-Datei (6)

Frage von donnyS73lb zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (27)

Frage von patz223 zum Thema Windows Userverwaltung ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (20)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...