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

Batch WinXP - jeweils 3 Bestimmte Zeilen aus mehreren Textdateien in neue Datei (die 3 Zeilen hintereinander dann als Einzeiler)

Frage Entwicklung Batch & Shell

Mitglied: Experiment626

Experiment626 (Level 1) - Jetzt verbinden

01.02.2014 um 16:23 Uhr, 2292 Aufrufe, 2 Kommentare, 1 Danke

Hallo Ihr Fachleute,

ich krieg's nicht hin, FOR ist für mich nur noch verwirrrend, kenne mich mit den Detaills nicht aus.

Ich möchte eine Log-Datei erstellen.
Diese soll entstehen aus Inhalten bestimmter Textdateien, die alle im gleichen Verzeichnis liegen, z.B. "D:\HL7\" und dem Muster "Bef*.txt" entsprechen.
Die Textdateien beinhalten unter anderem die u. a., immer gleiche Struktur, um deren Daten es geht.
Die genannten Feldanfänge OBX|4|TX||| bis OBX|7|TX||| sind entsprechend in jeder Textdatei vorhanden.
Die | ist ein Separator, z.B. ||| = 3 Separatoren ohne dazwischenliegende Daten.

OBX|4|TX|||A-Nr: 7503387431 Name: Aaa, Bbbbbb geb. am: 01.01.1950||||||F|||20140131|||
OBX|5|TX|||Materialeingang: 30.01.2014||||||F|||20140131|||
OBX|6|TX|||Berichtsausgang: 31.01.2014||||||F|||20140131|||
OBX|7|TX|||Berichtsnummer: E 14361/13||||||F|||20140131|||

Sollte irgendwann der Header erweitert werden, wäre es möglich, das die Zeilen sich ändern könnten,
d. h. z. B. OBX|4|TX|||A-Nr. ..... etc. beginnt dann erst a OBX|8|TX||| o. ä., so dass man sich hier vielleicht
besser auf die Begriffe stützen sollte, wie A-Nr, geb. am:, Materialeingang etc. So wäre ein evtl. späteres Zeilenverschieben durch Header-Veränderung unerheblich.

Die erzeugte Zieldatei (z. B. Liste.log) sollte dann folgenden Inhalt zeigen:.

E 14361/13 EIN30.01.2014 AUS31.01.2014 A-Nr: 7503387431 Name: Aaa, Bbbbbb, geb. am: 01.01.1950

Ich bin euch für eure Hilfe sehr dankbar.

Stitch
Mitglied: bastla
01.02.2014, aktualisiert um 17:40 Uhr
Hallo Experiment626!

Das könnte (weitgehend ungetestet) etwa so gehen:
01.
@echo off & setlocal 
02.
set "Ordner=D:\HL7" 
03.
set "Dateien=Bef*.txt" 
04.
 
05.
set "Liste=D:\Liste.log" 
06.
 
07.
set "Feld1=Berichtsnummer;" 
08.
set "Feld2=Materialeingang;EIN" 
09.
set "Feld3=Berichtsausgang;AUS" 
10.
set "Feld4=A-Nr;A-Nr: " 
11.
 
12.
del "%Liste%" 2>nul 
13.
pushd "%Ordner%" 
14.
for /f "delims=" %%i in ('dir /b/a-d "%Dateien%"') do call :ProcessFile "%%i" 
15.
popd 
16.
goto :eof 
17.
 
18.
:ProcessFile 
19.
set "Satz=" 
20.
for /f "tokens=1-3 delims=;=" %%e in ('set Feld') do call :ProcessField %1 "%%f" "%%g" 
21.
setlocal enabledelayedexpansion 
22.
>>"%Liste%" echo !Satz:~1! 
23.
endlocal 
24.
goto :eof 
25.
 
26.
:ProcessField 
27.
for /f "delims=" %%a in ('findstr /lc:"%~2: " %1') do set "Zeile=%%a" 
28.
call set "Daten=%%Zeile:*%Feld%: =%%" 
29.
for /f "delims=|" %%a in ("%Daten%") do set "Satz=%Satz% %~3%%a" 
30.
goto :eof
Geschwindigkeitsrekorde lassen sich damit aber sicher nicht aufstellen ...

Kurz zur Erklärung der Variablen %Feld1% bis %Feld4% (andere Variablen, deren Namen mit "Feld" beginnen, darf es übrigens in diesem Batch nicht geben): Diese enthalten den Suchbegriff und (nach dem Semikolon) den Text, der vor dem jeweiligen Feld ausgegeben werden soll (also zB "EIN" vor dem Wert von "Materialeingang").
Zu
FOR ist für mich nur noch verwirrrend, kenne mich mit den Detaills nicht aus.
könnte ich das einschlägige "Tutorial zur FOR-Schleife" von @Friemler empfehlen.

Grüße
bastla
Bitte warten ..
Mitglied: Experiment626
01.02.2014 um 22:23 Uhr
Alle Achtung bastla, ich staune nur ...
vielen lieben Dank, es funktioniert wunderbar, genauso sollte es sein.

Danke für die Empfehlung und solch schneller Hilfe,
und das auch noch am Wochenende.

.... sehr empfehlenswert !!!

Gruss Stitch.
Bitte warten ..
Ähnliche Inhalte
PHP
gelöst TXT Datei auslesen und bestimmte Zeilen in Variable setzen (11)

Frage von 126594 zum Thema PHP ...

VB for Applications
Bestimmte Daten aus eine CSV-Datei in eine Excel-Tabelle importieren (2)

Frage von MariaElena zum Thema VB for Applications ...

Batch & Shell
gelöst Bestimmte Daten aus CSV per Windows BATCH Datei in .txt Format schreiben lassen. (9)

Frage von freshman2017 zum Thema Batch & Shell ...

Neue Wissensbeiträge
Peripheriegeräte

Was beachten bei der Wahl einer USV Anlage im Serverschrank

(2)

Tipp von zetboxit zum Thema Peripheriegeräte ...

Windows 10

Das Windows 10 Creators Update ist auf dem Weg

(5)

Anleitung von BassFishFox zum Thema Windows 10 ...

Administrator.de Feedback

Tipp: Ungelöste Fragen ohne Antwort in Tickeransicht farblich hinterlegen

Tipp von pattern zum Thema Administrator.de Feedback ...

Viren und Trojaner

Neue Magazin Ausgabe: Malware und Angriffe abwehren

Information von Frank zum Thema Viren und Trojaner ...

Heiß diskutierte Inhalte
Windows Systemdateien
Warum System auf "C:" (29)

Frage von DzumoPRO zum Thema Windows Systemdateien ...

Windows Server
gelöst Update BackupExec 2015 auf 2016 führt zu SQL-Server Problem (16)

Frage von montylein1981 zum Thema Windows Server ...

Cloud-Dienste
gelöst Bitcoins minen über Nacht? (16)

Frage von 1410640014 zum Thema Cloud-Dienste ...

LAN, WAN, Wireless
Cisco SG200: Auf bestimmtem vLAN bestimmte TCP-Ports sperren (16)

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