Text filtern mit Hilfe von Batch
#1
geschrieben 04. November 2019 - 11:34
ich habe ein "kleines" Problem und hoffe in diesem Forum auf Hilfe!
Mit Hilfe einer von mir zu erstellenden Batch Datei, soll ich aus einer Textdatei bestimmte Zeilen rauskopieren, jedoch bin ich am verzweifeln und hoffe nun um eure Hilfe.
die Textdatei sieht wie folgt aus (Ausschnitt)
UNA:+,? '
UNB+UNOC:3+104027544+999999999+190819:0000+00170++BK05Q419ke0'
UNH+00001+KOTR:02:001:KV'
IDK+100820488+99+Brandenburgische BKK'
VDT+20100101'
FKT+01'
VKG+01+100820488+5++++++00'
VKG+03+661430046+5++07++++00'
VKG+09+661430046+5++28++++00'
VKG+09+661430046+5++29++++00'
NAM+01+Brandenburgische+Betriebskrankenkasse'
ANS+1+15890+Eisenhüttenstadt+Werkstr. 10'
UNT+000011+00001'
UNH+00002+KOTR:02:001:KV'
IDK+101320032+99+SECURVITA BKK'
VDT+20100701'
FKT+01'
VKG+01+101320032+5++++++00'
VKG+03+107436557+5++07++++00'
VKG+09+107436557+5++28++++00'
VKG+09+107436557+5++29++++00'
NAM+01+SECURVITA+Betriebskrankenkasse'
ANS+1+20099+Hamburg+Lübeckertordamm 1-3'
ANS+2+20039+Hamburg+105829'
UNT+000012+00002'
UNH+00003+KOTR:02:001:KV'
...
...
UNZ+000393+00170'
Meine Aufgabe besteht darin, alle IDK, VKG und NAM rauszukopieren, natürlich in einem Block zusammen sprich die erste Lösung wäre:
IDK+100820488+99+Brandenburgische BKK
VKG+03+107436557+5++07++++00
NAM+01+Brandenburgische+Betriebskrankenkasse....
Zudem gibt es verschiedene VKG's jedoch muss durch eine Schleife die richtige gesucht werden.
Ein Plus wäre es noch zudem bei IDK die Nummer und den Namen zu trennen und in einzelne Zeilen wiederzugeben.
(bei der VKG schleife wird erstmal nach VKG+03..............++++41 gesucht, dann VKG+03......++++00 usw)
Vielen Dank im Voraus für eure Bemühungen.
MfG der Booster123
Anzeige
#2
geschrieben 04. November 2019 - 12:16
Wenn es ASCII Kompatibel ist wäre das eine Möglichkeit
@echo off find "IDK" X:\PFAD\ZUR\TEXT-DATEI\TEXT.TXT > X:\PFAD\ZUR\GEFILTERTEN\TEXT-DATEI\TEXT.TXT find "VKG" X:\PFAD\ZUR\TEXT-DATEI\TEXT.TXT >> X:\PFAD\ZUR\GEFILTERTEN\TEXT-DATEI\TEXT.TXT find "NAM" X:\PFAD\ZUR\TEXT-DATEI\TEXT.TXT >> X:\PFAD\ZUR\GEFILTERTEN\TEXT-DATEI\TEXT.TXT
hier wird nacheinander nach den Möglichkeiten gesucht und der Zieldatei hinzugefügt.
Achtung: "Neuausführen" überschreibt! die evtl. bestehende Zieldatei vollständig.
#3
geschrieben 04. November 2019 - 12:29
Es handelt sich um eine Textdatei aus dem Internet, die ich über den Browser öffne.
Jedoch vorher dann abspeicher mit Word, sodass die Batch-Datei darauf zugreifen kann.
Wie wäre denn eine Schleife für die VKG intergrierbar? Es sind meistens mehrere gegeben jedoch bräuchte ich jeweils nur eine. In einigen fällen ist sogar keine gegeben, sodass die schleife bei keinem Fund weiter gehen müsste.
Dieser Beitrag wurde von Booster123 bearbeitet: 04. November 2019 - 12:31
#4
geschrieben 04. November 2019 - 12:57
Zitat (Booster123: 04. November 2019 - 12:29)
Es handelt sich um eine Textdatei aus dem Internet, die ich über den Browser öffne.
Jedoch vorher dann abspeicher mit Word, sodass die Batch-Datei darauf zugreifen kann.
empfehle die Datei besser mit reinein Texteditoren wie bspw. NOTEPAD zu speichern damit Word nicht seinen Mist da hinein interpretiert
Zitat
Die Schleife geht ja weiter. Es wird nach VKG gesucht und die Ausgabe in eine TXT-Datei umgeleitet. Wird nix gefunden geht die Schleife zur nächsten Batch-Zeile über.
Ansonsten bitte etwas genauer beschreiben

#5
geschrieben 04. November 2019 - 13:03
Handelt es sich um eine ASCII-Kompatible Textdatei oder sind da irgendwelche Formatinfos mit hinterlegt (Word bspw.)?
Wenn es ASCII Kompatibel ist wäre das eine Möglichkeit
Habe es jetzt so gemacht und er filtert mir auch die ganzen Daten, jedoch nicht als Block sondern erst alle IDK's, dann alle VKG's und dann die ganzen NAM's. Gibt es denn eine Möglichkeit sie in einem Block ausgeben zu lassen, sodass man eine Zugehörigkeit hat?
[quote name='Stefan_der_held' timestamp='1572868670' post='2015257']
empfehle die Datei besser mit reinein Texteditoren wie bspw. NOTEPAD zu speichern damit Word nicht seinen Mist da hinein interpretiert
Die Schleife geht ja weiter. Es wird nach VKG gesucht und die Ausgabe in eine TXT-Datei umgeleitet. Wird nix gefunden geht die Schleife zur nächsten Batch-Zeile über.
Ansonsten bitte etwas genauer beschreiben

[/quote]
Es gibt auch "Blöcke" in denen mehrere VKG's gegeben sind. Ich bräuchte eine schleife die es so absucht wie ich es bräuchte.
Ein Beispiel "Block"
IDK+101592133+99+CITY BKK/Ost KöRiA'
VDT+20110701'
FKT+01'
VKG+01+101592133+5++++++00'
VKG+03+660510336+5++07++++10'
VKG+09+660510336+5++28++++10'
VKG+09+660510336+5++29++++10'
VKG+03+660510336+5++07++++20'
VKG+09+660510336+5++28++++20'
VKG+09+660510336+5++29++++20'
VKG+03+660510336+5++07++++71'
VKG+09+660510336+5++28++++71'
VKG+09+660510336+5++29++++71'
VKG+03+660510336+5++07++++72'
VKG+09+660510336+5++28++++72'
VKG+09+660510336+5++29++++72'
VKG+03+104027544+5++07++++30'
VKG+09+101592133+5++28++++30'
VKG+09+101592133+5++29++++30'
VKG+03+660510336+5++07++++40'
VKG+09+660510336+5++28++++40'
VKG+09+660510336+5++29++++40'
VKG+03+660510336+5++07++++50'
VKG+09+660510336+5++28++++50'
VKG+09+660510336+5++29++++50'
VKG+03+660510336+5++07++++55'
VKG+09+660510336+5++28++++55'
VKG+09+660510336+5++29++++55'
VKG+03+660510336+5++07++++56'
VKG+09+660510336+5++28++++56'
VKG+09+660510336+5++29++++56'
VKG+03+660510336+5++07++++57'
VKG+09+660510336+5++28++++57'
VKG+09+660510336+5++29++++57'
VKG+03+660510336+5++07++++61'
VKG+09+660510336+5++28++++61'
VKG+09+660510336+5++29++++61'
VKG+03+660510336+5++07++++62'
VKG+09+660510336+5++28++++62'
VKG+09+660510336+5++29++++62'
VKG+03+660510336+5++07++++65'
VKG+09+660510336+5++28++++65'
VKG+09+660510336+5++29++++65'
VKG+03+660510336+5++07++++66'
VKG+09+660510336+5++28++++66'
VKG+09+660510336+5++29++++66'
VKG+03+660510336+5++07++++67'
VKG+09+660510336+5++28++++67'
VKG+09+660510336+5++29++++67'
VKG+03+660510336+5++07++++68'
VKG+09+660510336+5++28++++68'
VKG+09+660510336+5++29++++68'
VKG+03+660510336+5++07++++69'
VKG+09+660510336+5++28++++69'
VKG+09+660510336+5++29++++69'
NAM+01+CITY Betriebskrankenkasse+Gesch.Ber. Neue Bundesländer+Körperschaft in Abwicklung'
ANS+1+70178+Stuttgart+Hauptstätter Str. 68-70'
UNT+000059+00027'
UNH+00028+KOTR:02:001:KV'
Danke

#6
geschrieben 20. November 2019 - 16:19
Zitat (Stefan_der_held: 04. November 2019 - 12:16)
Wenn es ASCII Kompatibel ist wäre das eine Möglichkeit
@echo off find "IDK" X:\PFAD\ZUR\TEXT-DATEI\TEXT.TXT > X:\PFAD\ZUR\GEFILTERTEN\TEXT-DATEI\TEXT.TXT find "VKG" X:\PFAD\ZUR\TEXT-DATEI\TEXT.TXT >> X:\PFAD\ZUR\GEFILTERTEN\TEXT-DATEI\TEXT.TXT find "NAM" X:\PFAD\ZUR\TEXT-DATEI\TEXT.TXT >> X:\PFAD\ZUR\GEFILTERTEN\TEXT-DATEI\TEXT.TXT
hier wird nacheinander nach den Möglichkeiten gesucht und der Zieldatei hinzugefügt.
Achtung: "Neuausführen" überschreibt! die evtl. bestehende Zieldatei vollständig.
hey, sag mal gibt es hier auch die Möglichkeit, dass mir die Daten auch in der Richtigen Reihenfolge ausgegeben werden?
So werden mir erst alle Datensätze mit "IDK" ausgegeben, darunter alle Datensätze mit "VKG" und da drunter dann alle Datensätze mit "NAM".
BSP:
IDK
IDK
IDK
VKG
VKG
NAM
NAM
NAM
was ich benötige ist:
IDK
VKG
NAM
Die Datensätze sind auch in der Textdatei untereinander, sodass keine Zuordnung nötig wäre.
Vielen Dank im Voraus.
#7
geschrieben 20. November 2019 - 18:01
Ist sehr viel verständlicher und vor allem auch weniger aufwendig als mit Batch. Alles was Du benötigst ist eine Spezifikation für das Dateiformat, sprich welches Zeichen steht wofür, damit man das auswerten kann.
#8
geschrieben 21. November 2019 - 11:32
Zitat (RalphS: 20. November 2019 - 18:01)
Ist sehr viel verständlicher und vor allem auch weniger aufwendig als mit Batch. Alles was Du benötigst ist eine Spezifikation für das Dateiformat, sprich welches Zeichen steht wofür, damit man das auswerten kann.
Vielen Dank erst einmal für die schnelle Antwort, jedoch kann ich damit 0 Anfangen. Habe keine Kenntnisse in PowerShell
Und auch keine Ahnung Spezifikationen zu definieren.
Dieser Beitrag wurde von Booster123 bearbeitet: 21. November 2019 - 11:32
#9
geschrieben 21. November 2019 - 11:50
Von den VKG Zeilen gibt es ja einige. Nach welchen Kriterien soll da die gewünschte Zeile ausgewählt werden? Das Selbe gilt auch für ANS. Und, für die einzelnen Blöcke in der Datei, haben die spezifische Start un Endmarkierungen/Zeilen, so dass man einen Block einzeln identifizieren kann?
Aber das ist wirklich kompliziert. Mit einer einfachen, leicht verständlichen Batch ist das wohl nicht getan.
---
Ich bin ein kleiner, schnickeldischnuckeliger Tiger aus dem Schwarzwald.
Alle haben mich ganz dolle lila lieb.
#10
geschrieben 21. November 2019 - 14:06
Zitat (DK2000: 21. November 2019 - 11:50)
Von den VKG Zeilen gibt es ja einige. Nach welchen Kriterien soll da die gewünschte Zeile ausgewählt werden? Das Selbe gilt auch für ANS. Und, für die einzelnen Blöcke in der Datei, haben die spezifische Start un Endmarkierungen/Zeilen, so dass man einen Block einzeln identifizieren kann?
Aber das ist wirklich kompliziert. Mit einer einfachen, leicht verständlichen Batch ist das wohl nicht getan.
Habe die Textdatei mal hochgeladen.
Hier ein kleiner Ausschnitt und wie es im endeffekt aussehen soll.
Ausschnitt:
UNA:+,? '
UNB+UNOC:3+109910000+999999999+191101:0955+00349++AO05Q419ke1'
UNH+00001+KOTR:02:001:KV'
IDK+100295017+99+gkv informatik'
VDT+19970403'
FKT+02'
NAM+01+gkv informatik+Fachbereich Inputmanagement'
ANS+1+42285+Wuppertal+Lichtscheiderstraße 89'
ASP+01+0202/69582581+0202/6958202581+Frau Wolf+Datenaustausch'
UEM+1+00+I8'
[email protected]'
DFU+02+016++0000+2400+1+ftam.gkvi.de?:5000'
UNT+000011+00001'
UNH+00002+KOTR:02:001:KV'
IDK+100395611+99+AOK Nordost Region MVP'
VDT+19970401'
FKT+02'
VKG+02+100295017+5++07++01++00'
VKG+02+100295017+5++07++02++00'
VKG+02+100295017+5++07++13++00'
VKG+02+104212516+5++07++05+38+00'
VKG+09+109519016+5++28+6+++00'
VKG+02+108310400+5++07++09++00'
VKG+02+108018007+5++07++08++00'
VKG+02+100696023+5++07++12++00'
VKG+02+101097008+5++07++15++00'
VKG+02+107299005+5++07++14++00'
VKG+03+100395611+5++07++++00'
VKG+01+100395611+5++07++++00'
VKG+02+106198626+5++07++11++00'
VKG+02+106198626+5++07++16++00'
VKG+02+106198626+5++07++06++00'
VKG+02+106198626+5++07++07++00'
VKG+02+103411401+5++07++05+20+00'
VKG+02+106198626+5++07++10++00'
VKG+02+103119199+5++07++04++00'
VKG+02+102110939+5++07++03++00'
NAM+01+AOK Nordost+Region Mecklenburg-Vorpommern'
ANS+1+14467+Potsdam+Behlertstr. 33A'
ANS+3+14456+Potsdam'
UEM+1+00+I8'
[email protected]'
DFU+02+016++0000+2400+1+ftam.gkvi.de?:5000'
UNT+000031+00002'
UNH+00003+KOTR:02:001:KV'
...
...
UNZ+000205+00349'
Endresultat:
IDK+100295017+99+gkv informatik'
NAM+01+gkv informatik+Fachbereich Inputmanagement'
IDK+100395611+99+AOK Nordost Region MVP'
VKG+03+100395611+5++07++++00'
NAM+01+AOK Nordost+Region Mecklenburg-Vorpommern'
...
Im besten Fall so:
IDK gkv informatik
NAM gkv informatik Fachbereich Inputmanagement
IDK AOK Nordost Region MVP
VKG03 00
NAM AOK Nordost Region Mecklenburg-Vorpommern
...
Brauche "nur" IDK, VKG und NAM
Bei den VKGs wäre es am besten mit einer Schleife zu arbeiten, jedoch weiß ich nicht wie ich das hinbekommen soll, da bei VKG erst die Kriterie beachtet werden muss, dass nach VKG die 03 folgt und dann die zahl ganz hinten beachtet werden muss. Dort gilt die Reihenfolge, zuerst nach 41 zu suchen dann nach 40 dann nach 99 und dann nach 00. Wenn keine davon vorhanden ist dann raus aus der schleife und das nächste IDK dann suchen. ich hoffe ich konnte es einigermaßen erklären, was mein Ziel ist.
Ich bin für jeden Tipp dankbar.
Vielen Dank im Voraus.
MfG
Booster123
- ← Batch - FTP über TLS Upload
- Skript/Web-Programmierung
- [Batch] Handhabung von allen Ordnern mit dem gleichen Namensanfang →