nocheinnoobmehr
Goto Top

Fortlaufende Nummer aus csv überprüfen?

Moinsen,

in einer Datei sind Rechnungen mit der Rechnungsnummer im Dateinamen enthalten. Um die evt. Lücken in den Nummern zu überprüfen, hab ich diese in einer csv abgespeichert.
Mein Träumchen wäre für die GoBD eine weitere csv mit den fehlenden Rechnungsnummern. Bisher sieht es so aus:

rechnungsnummern.csv
1001
1002
1003
1007
1008

Haben würde ich gerne dann die folgende csv:

fehlendeReNr.csv
1004
1005
1006

Ich hab schon mehrere Ansätze versucht, aber mit meinem (bescheidenen) Wissen komme ich nicht wirklich weiter. :/
Hat jmd Erbarmen? ;)

Content-Key: 667009

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

Ausgedruckt am: 28.03.2024 um 07:03 Uhr

Mitglied: TK1987
Lösung TK1987 23.05.2021 aktualisiert um 18:17:22 Uhr
Goto Top
Moin,

Zitat von @nocheinnoobmehr:
rechnungsnummern.csv
1001
1002
1003
1007
1008
ist das der komplette Ihnalt deiner CSV-Datei? In dem Fall würde ich mit Get-Content arbeiten.
$File = [int[]](Get-Content 'C:\Test\rechnungsnummern.csv') | sort  
1001..$File[-1] | Where-Object {$File -NotContains $_} | Set-Content 'C:\Test\fehlendeReNr.csv'  

Gruß Thomas
Mitglied: 148121
148121 23.05.2021 aktualisiert um 18:32:37 Uhr
Goto Top
tio.run
int]$inhalt = gc rechnungen.csv
compare-object ($inhalt..$inhalt[-1]) $inhalt -Passthru | out-file fehlende.csv
Gruß w.
Mitglied: nocheinnoobmehr
nocheinnoobmehr 23.05.2021 um 18:40:41 Uhr
Goto Top
Moin Thomas,

cool, tut was es soll, ganz lieben Dank.

btw:
Eigentlich war ich von einer DOS-Batch ausgegangen, da ich die "rechnungsnummern.csv" darüber extrahiere. (Sorry, hätte ich im post mit dazu schreiben sollen) Gespeichert werden die Dateien von der Wawi bsp. so:
"Rechnung_2021-04-09_134557.pdf"
Über eine DOS-Batch bekomme ich dann die eigentliche Rechnungsnummer in eine csv.

...und ja: PS rulez, aber ich bin wahrscheinlich zu alt dafür. ;)

Ich hab es auf meine Dateien angepasst:
[int[]]$File = Get-Content 'beschneidung.txt' | sort  
134557..$File[-1] | Where-Object {$File -NotContains $_} | Set-Content 'fehlendeReNr.csv'  

Nun muß ich noch die Startnummer (134557) als Variable in das PS-Script übergeben. Wir haben monatlich einen Ordner mit 1k+ Rechnungsdateien, die natürlich immer eine andere Startnummer haben.
lg
Tom
Mitglied: TK1987
TK1987 23.05.2021 um 19:31:14 Uhr
Goto Top
Zitat von @nocheinnoobmehr:
Eigentlich war ich von einer DOS-Batch ausgegangen
Mit Batch ist sowas nur schwer und mit schlechter Performance lösbar
Gespeichert werden die Dateien von der Wawi bsp. so:
"Rechnung_2021-04-09_134557.pdf"
Über eine DOS-Batch bekomme ich dann die eigentliche Rechnungsnummer in eine csv.
mein Rat wäre, lass das Ganze mit Batch gleich bleiben und extrahiere die Nummern auch gleich mit Powershell
# Pfad zum Rechnungsordner
$Dir = 'C:\Test'  

# Nummern extrahieren und sortieren
$nrn = [int[]]((Get-ChildItem -File -Name "$Dir\Rechnung*.pdf") -Replace '^.*\D(\d+)\.pdf','$1') | sort  

# Fehlende Nummern ausgeben
$nrn..$nrn[-1] | Where-Object {$nrn -NotContains $_} | Set-Content 'fehlendeReNr.csv'  
Nun muß ich noch die Startnummer (134557) als Variable in das PS-Script übergeben.
Wenn du es wie oben machst, ist das ja eigentlich nicht mehr notwendig, aber eine Variable übergeben geht mit Powershell ganz leicht. Du kannst entweder die Standardvariable $args nutzen, oder eine eigene Variable definieren, indem du am Anfang des Skripts mit Param eine Variable definierst
Param( [int]$Startnr )
Dann bräuchtest du nur nach beim Aufruf des Skripts die Nummer als Argument anhängen.