booster123
Goto Top

Mit Hilfe von Batch numerisch sortieren

Guten Tag liebe Community,

ich habe leider ein Problem mit meiner Batch Datei. Habe es jetzt geschafft das ich aus der Textdatei die ich habe, alle Informationen die ich benötige rauszuschreiben, jedoch nicht sortiert. In der Textdatei sind verschiedene Bausteine die ich rausfiltern muss.
Kleines Beispiel zum Verständnis, so sieht meine Textdatei zur Zeit aus:

ECHO ist ausgeschaltet (OFF).
4;IDK 100295017 99 gkv informatik
15;IDK 100395611 99 AOK Nordost Region MVP
46;IDK 100696012 99 AOK Nordost Region BRB
77;IDK 100696023 99 gkv informatik
87;IDK 101097008 99 AOK Sachsen-Anhalt
121;IDK 101097019 99 AOK Magdeburg
129;IDK 101197316 99 AOK Halle
ECHO ist ausgeschaltet (OFF).
28;VKG 03 100395611 5 07 00
65;VKG 03 100696012 5 07 00
110;VKG 03 101097008 5 07 00
141;VKG 03 101317004 5 07 10
142;VKG 03 661430035 5 07 20
143;VKG 03 101317004 5 07 30
144;VKG 03 101317004 5 07 40
145;VKG 03 101317004 5 07 50
146;VKG 03 101317004 5 07 55
147;VKG 03 101317004 5 07 56
148;VKG 03 101317004 5 07 57
149;VKG 03 101317004 5 07 60
150;VKG 03 101317004 5 07 61
151;VKG 03 101317004 5 07 62
152;VKG 03 101317004 5 07 65
ECHO ist ausgeschaltet (OFF).
7;NAM 01 gkv informatik Fachbereich Inputmanagement
38;NAM 01 AOK Nordost Region Mecklenburg-Vorpommern
69;NAM 01 AOK Nordost Region Brandenburg
80;NAM 01 gkv informatik Fachbereich Inputmanagement
111;NAM 01 AOK Sachsen-Anhalt
125;NAM 01 AOK Sachsen-Anhalt
133;NAM 01 AOK Sachsen-Anhalt
194;NAM 01 AOK NORDWEST (Region Schleswig-Holstein)
215;NAM 01 AOK NORDWEST (Region Schleswig-Holstein) Rechnungsprüfung
224;NAM 01 AOK NORDWEST Die Gesundheitskasse
232;NAM 01 AOK NORDWEST (Region Schleswig-Holstein) Rechnungsprüfung
242;NAM 01 AOK NORDWEST (Region Schleswig-Holstein) Rechnungsprüfung
251;NAM 01 AOK NORDWEST (Region Schleswig-Holstein) Rechnungsprüfung
259;NAM 01 AOK NORDWEST

Habe die Daten auch nummerisch sortieren lassen, da ich dachte, dies würde das sortieren erleichtern. Also sodass die Datei danach so aussieht:

4;IDK 100295017 99 gkv informatik
7;NAM 01 gkv informatik Fachbereich Inputmanagement
15;IDK 100395611 99 AOK Nordost Region MVP
28;VKG 03 100395611 5 07 00
38;NAM 01 AOK Nordost Region Mecklenburg-Vorpommern..... usw.


also genau so wie die Zahlen angegeben sind, soll es sortiert sein.


PS: wenn möglich nach jeder Zeile in der NAM vorkommt eine Leerzeile, sodass zwischen NAM und IDK immer eine Zeile frei ist. (NicetoHave)


ich Bitte sehr um eure Hilfe.

Vielen Dank im Voraus.


Gruß Booster123

Content-Key: 537449

Url: https://administrator.de/contentid/537449

Printed on: April 24, 2024 at 17:04 o'clock

Mitglied: 142232
Solution 142232 Jan 20, 2020 updated at 12:07:18 (UTC)
Goto Top
Bidde
@echo off &setlocal
set "quelle=D:\test.txt"  
set "ziel=D:\test_neu.txt"  
powershell -EP Bypass -NoP -c "gc '%quelle%' | ?{$_ -match '^\d'} | sort {[int64]$_.split(';')} | %%{if($_.split(';')[1] -like 'NAM *'){$_ + [Environment]::Newline}else{$_}} | sc '%ziel%'"  
Gruß s.
Member: Booster123
Booster123 Jan 20, 2020 at 12:18:01 (UTC)
Goto Top
Vielen Dank für deine schnelle Antwort.

Habe es jetzt in meine Batch Datei eingegeben :


@echo off &setlocal
set "C:\Benutzer\Altmann\Desktop\AOKTEST.txt"
set "C:\Benutzer\Altmann\Desktop\\FERTIG.txt"
powershell -EP Bypass -NoP -c "gc '%quelle%' | ?{$_ -match '^\d'} | sort {[int64]$_.split(';')} | %%{if($_.split(';')[1] -like 'NAM *'){$_ + [Environment]::Newline}else{$_}} | sc '%ziel%'"



Also "C:\Benutzer\Altmann\Desktop\AOKTEST.txt" ist die Datei die sortiert werden soll, und "C:\Benutzer\Altmann\Desktop\\FERTIG.txt" gibts es noch nicht und soll dann erstellt werden.

ist das so richtig?

Die Umgebungsvariable "C:\Benutzer\Altmann\Desktop\AOKTEST.txt" ist nicht definiert.

Das wird mir dann beim ausführen der Batch ausgegeben.
Mitglied: 142232
Solution 142232 Jan 20, 2020 updated at 13:41:03 (UTC)
Goto Top
ist das so richtig?
Nein ist falsch, schau dir meinen Code nochmal genau an wo die Pfade stehen, deine Variablenzuweisung ist komplett falsch.
set "quelle=C:\Users\Altmann\Desktop\AOKTEST.txt"  
set "Ziel=C:\Users\Altmann\Desktop\FERTIG.txt"  
Member: Booster123
Booster123 Jan 20, 2020 at 13:36:37 (UTC)
Goto Top
So habe es jetzt mit quelle und ziel eingegeben und nun erscheint diese Nachricht...

gc : Der Pfad "C:\Benutzer\Altmann\Desktop\AOKTEST.txt" kann nicht gefunden werden, da er nicht vorhanden ist.
In Zeile:1 Zeichen:1

back-to-topgc 'C:\Benutzer\Altmann\Desktop\AOKTEST.txt' | ?{$_ -match '^\d'} | so ...

back-to-top~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ CategoryInfo : ObjectNotFound: (C:\Benutzer\Altmann\Desktop\AOKTEST.txt:String) [Get-Content], ItemNotFo
undException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetContentCommand


also entweder übersehe ich hier etwas oder es läuft irgendwas nicht richtig face-sad


gruß Booster123
Mitglied: 142232
Solution 142232 Jan 20, 2020 updated at 13:43:11 (UTC)
Goto Top
also entweder übersehe ich hier etwas
Ja du übersiehst das Der Pfad c:\Users\Altmann\Desktop\AOKTEST.txt lauten muss!
"C:\Benutzer" gibt es nicht, das ist nur eine Lokalisierung zur Anzeige von Windows.
Heut schon wieder früh Freitag ....
Member: Booster123
Booster123 Jan 20, 2020 at 13:54:54 (UTC)
Goto Top
ja das scheint wohl so ..... vielen vielen dank für deine Geduld und mühe :D

ich drehe gleich durch (im positiven sinne)


VIELEN VIELEN DANK!!! einfach unglaublich :D so wie ich es mir vorgestellt habe :D


also wenn ich schon mal einen wie dich hier dran habe frage ich mal ganz nett.

In einigen Blöcken sind auch mehrere IDK's vorhanden

Beispiel: 137;IDK 101317004 99 AOK NORDWEST
141;VKG 03 101317004 5 07 10
142;VKG 03 661430035 5 07 20
143;VKG 03 101317004 5 07 30
144;VKG 03 101317004 5 07 40
145;VKG 03 101317004 5 07 50
146;VKG 03 101317004 5 07 55
147;VKG 03 101317004 5 07 56
148;VKG 03 101317004 5 07 57
149;VKG 03 101317004 5 07 60
150;VKG 03 101317004 5 07 61
151;VKG 03 101317004 5 07 62
152;VKG 03 101317004 5 07 65
153;VKG 03 101317004 5 07 66
154;VKG 03 101317004 5 07 67
155;VKG 03 101317004 5 07 68
156;VKG 03 661430035 5 07 71
157;VKG 03 661430035 5 07 72
158;VKG 03 101317004 5 07 75
159;VKG 03 101317004 5 07 99
194;NAM 01 AOK NORDWEST (Region Schleswig-Holstein)


praktisch wird nur eine VKG benötigt, entscheidend sind die letzten beiden ziffern. Zuerst müsste geguckt werden, ob eine 41 vorhanden ist dann 40, 99 und dann 00 (die auf jedenfall immer vorhanden ist, falls keine anderen)
gibt es da eine möglichkeit mit einer schleife zu arbeiten? wenn ja wie wäre dieser Schritt machbar?

und noch einmal vielen vielen dank.
Member: Booster123
Booster123 Jan 20, 2020 at 13:58:51 (UTC)
Goto Top
PS. ist es möglich die Zahlen vor dem ; wegzubekommen? eventuell sogar mit dem ; ?


Danke :D
Mitglied: 142232
142232 Jan 20, 2020 updated at 14:00:21 (UTC)
Goto Top
Geht alles, aber deine Beschreibung check ich nicht, les dir das selbst nochmal durch und denk dran das es ein fremder verstehen muss.
Mitglied: 142232
142232 Jan 20, 2020 updated at 14:02:15 (UTC)
Goto Top
Zitat von @Booster123:

PS. ist es möglich die Zahlen vor dem ; wegzubekommen? eventuell sogar mit dem ; ?
Kein Thema, einfacher Split
@echo off
set "datei=A:\test.txt"  
powershell -EP Bypass -NoP -c "gc '%datei%' | ?{$_ -match '^\d'} | sort {[int]$_.split(';')} | %%{if($_.split(';')[1] -like 'NAM *'){$_.Split(';')[1] + [Environment]::Newline}else{$_.Split(';')[1]}}"  

p.s. wenn das sowieso ne CSV ist kannst du besser gleich mit Import-CSV arbeiten...
Member: Booster123
Booster123 Jan 20, 2020 at 14:15:24 (UTC)
Goto Top
Ich versuche es noch einmal ausführlich :D entschuldige bitte.

Also ich habe nun eine Textdatei mit mehreren "Blöcken".
In den Blöcken ist immer IDK und NAM vorhanden und in vielen aber nicht allen Blöcken ist dazwischen noch VKG 03 gegeben.

Beispiel:

116;IDK 101392368 99 BKK S-H
120;NAM 01 Betriebskrankenkasse S-H

136;IDK 101392518 99 Novitas BKK Wahltarif
140;VKG 03 661430046 5 07 00
143;NAM 01 NOVITAS BKK Wahltarif

148;IDK 101520078 99 BKK MOBIL OIL
152;VKG 03 101520078 5 07 55
154;VKG 03 101520078 5 07 56
156;VKG 03 101520078 5 07 57
158;VKG 03 101520078 5 07 65
160;VKG 03 101520078 5 07 69
162;VKG 03 101520078 5 07 75
164;VKG 03 102193212 5 07 99
166;NAM 01 Betriebskrankenkasse der Mobil Oil


wie du siehst ist im letzten block mehr als nur eine VKG gegeben. Nun wollt ich wissen, ob es mit hilfe einer Schleife möglich ist, das diese solange umher"schleift", das nur ein VKG Wert dort ausgegeben wird. Entscheidend hierbei sind die letzten beiden Zahlen ausschlaggebend. Zuerst sollte geguckt werden, ob es eine VKG mit dem Wert 41 gibt, wenn nein dann 40, wenn nein dann 99 , wenn nein 00 und wenn dass nein dann keine.

Hoffe konnte es diesmal verständlicher rüber bringen :D

gruß Booster
Member: Booster123
Booster123 Jan 20, 2020 at 15:10:46 (UTC)
Goto Top
hey ja soll am ende eine csv werden, damit ich die daten in eine datenbank einfügen kann. muss ich dafür einen extra befehl eintragen?
Member: Booster123
Booster123 Apr 06, 2020 at 12:13:34 (UTC)
Goto Top
Vielen Dank an jeden einzelnen. Hatte leider jetzt erst die Möglichkeit zu schreiben.


gruß Booster123


bleibt gesund