berti82
Goto Top

Auslesen bestimmter Spalten aus csv

Hallo,

Ich bekomme regelmäßig csv-Dateien mit ca. 77 Spalten und prinzipiell unbegrenzten Zeilen.
Diese muss ich eindampfen auf 5 Spalten, welche in eine andere Software eingelesen werden.
Nun Versuche ich seit einigen Tagen ein kleines batch zu erstellen welche diesen Vorgang ausführt.
Leider stoße ich dabei mal wieder an meine Grenzen face-sad
Ab Spalte 31 gibt er die Daten leider nicht mehr aus.

Die Ausgangs-csv sieht wie folgt aus (mit wesentlich mehr Zeilen):

"KndName";"Zusatz";"Anschrift1";"Anschrift2";"Kundennr";"KndFibunr";"Stammkunde";"KndLastsch";"KndSkonto";"KndZweck1";"KndGruppe";"KndKtoRang";"Bankname";"Bankort";"lfdNr";"AuftraggID";"ABlz";"AKontonr";"EKndID";"KndBLZ";"Zweck2";"KndKontonr";"Betrag";"Faellig";"Beginn";"Ende";"Turnus";"Auftragsgr";"Textschl";"TextJahr";"Brutto";"SkontoPro";"SkontoAbs";"Zweck1";"Zweck2";"Zweck3";"Zweck4";"Zweck5";"Zweck6";"Zweck7";"Zweck8";"Zweck9";"Zweck10";"Zweck11";"Zweck12";"Zweck13";"Zweck14";"AbsName";"EmpfName";"Belegnr";"Kategorie";"UKategorie";"AFibunr";"MwstPro";"MwstAbs";"Netto";"KndKtoBez";"WKZ";"KndZweck2";"bankvwltet";"EIBAN";"ESwift";"AIBAN";"ASwift";"Ref_Auftr";"Ref_Mandat";"Dat_Mandat";"LS_Art";"VerwSchl";"Bez_Mandat";"Rng_Mandat";"Seq_Mandat";"Typ_Mandat";"ZahlgsZiel";"GlaeubigID";"KndReferen";"Schl_Manda";"Nutz_Manda"
"Musterhaus GmbH";"xxx";"xxx";"xxx";"xxx";"xxx";"T";"T";0;"xxx";0;0;"Commerzbank Frankfurt";"Frankfurt";13431;"EBL-Ertr?g";51550000;4540000666;"Musterhaus GmbH";51040038;"St.: 6,65 (19%) netto: 35,0";520429200;41,65;01.03.17;01.03.17;"xxx";"01 (j";0;18;"xxx";41,65;0;0;"Lizenzgebuehr Software Mw";"St.: 6,65 (19%) netto: 35,0";"0 Steuer-Nr. 061 23255003";"xxx";"xxx";"xxx";"xxx";"xxx";"xxx";"xxx";"xxx";"xxx";"xxx";"xxx";"xxx";"xxx";"xxx";"xxx";"xxx";"xxx";0;0;41,65;"xxx";"EUR";"xxx";"F";"DE63510400380236476800";"COBADEFFXXX";"DE235109000018999999";"WIBADE5WXXX";"xxx";"ABC000003";31.03.14;2;"xxx";"xxx";0;0;0;0;"DE77EBL00000003999";"xxx";"xxx";01.03.16

Das ist mein bisheriger Ansatz - welcher wie gesagt bis Spalte 31 funktioniert.

for /f "tokens=1,13,21,31 delims=;" %%a in (...ORIGINAL.csv) do echo %%a;%%b;%%c;%%d>>AUSGABE_5_Spalten.csv  

Wäre toll wenn mir jemand nen Tipp geben könnte wo ich hier ansetzen muss um den Fehler auszumerzen.

Vielen Dank schon mal an jeden der sich mit meinem Problem befasst.

Content-Key: 308960

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

Printed on: April 25, 2024 at 20:04 o'clock

Member: Kraemer
Kraemer Jul 05, 2016 at 11:42:45 (UTC)
Goto Top
Moin,

wäre Powershell auch eine Lösung für dich?

Gruß Krämer
Member: Berti82
Berti82 Jul 05, 2016 at 12:15:05 (UTC)
Goto Top
Wenn mir hier jemand ne "einfach" anzupassende Lösung parat hat - Ich hab nur absolute Anfängerkenntnisse von dem ganzen und bin Sicherheits- und rechtetechnisch sehr eingeschränkt da ich in der Bank nicht alles einsetzen kann wie es mir beliebt. War ja über den ersten Gehversuch schon recht erfreut ... bis es nicht mehr weiter ging. Das bisherige Ergebnis hab ich leider auch nur zusammengegoogelt ;)
Member: Kraemer
Solution Kraemer Jul 05, 2016 at 12:18:01 (UTC)
Goto Top
$path='C:\temp'  
$culture = [cultureinfo]::GetCultureInfo('de-DE')  
$csv = Import-CSV "$path\REIN.csv" -Delimiter ";" -Encoding Default  
$csv | Select 'Kundennr','Zwei','Drei','Vier','Fünf' | Export-Csv  -Delimiter ";" -path "$path\RAUS.csv" -NoTypeInformation -Encoding Default  
Member: Lochkartenstanzer
Lochkartenstanzer Jul 05, 2016 updated at 12:51:46 (UTC)
Goto Top
Zitat von @Berti82:

for /f "tokens=1,13,21,31 delims=;" %%a in (...ORIGINAL.csv) do echo %%a;%%b;%%c;%%d>>AUSGABE_5_Spalten.csv  

Wäre toll wenn mir jemand nen Tipp geben könnte wo ich hier ansetzen muss um den Fehler auszumerzen.


Falls es Dir nichts ausmacht cygwin oder eine andere bash zu benutzen:

cat Original.CSV | gawk -F ";"  ' { print $1 ";" $13 ";" $21 ";" $31 } '  >neu.csv

lks

Nachtrag: Sehe gerade, daß Deine Eingabezeilen der Tabelle sich über mehrere Zeilen der CSV erstrecken. Da muß dann ein wenig mehr Logik reingesteckt werden, damit man zusammengehörige Zeilen erkennt.
Member: Biber
Biber Jul 05, 2016 at 13:03:35 (UTC)
Goto Top
Moin Berti82,

nur wenn dir gar keine der anderen Lösungen gefällt und/oder du auf CMD/Batch angewiesen bist...
-> dann musst du aufgrund der Beschränkung auf 31 Tokens mehrere FOR /F-Anweisungen hintereinanderschalten.

Beispiel:
<code type="plain>
K:\>for /f "delims=; tokens=1,13,21,30,*" %a in (77spalten.csv) do @for /f "delims=; tokens=12,30" %A in ("%e") do @echo %a;%b;%c;%A;%B
"KndName";"Bankname";"Zweck2";"Zweck9";"bankvwltet"
"Musterhaus GmbH";"Commerzbank Frankfurt";"St.: 6,65 (19%) netto: 35,0";"xxx";"F"


Dieses Beispiel würde aus deiner *.csv-Datei (bei mir heisst sie 77splaten.csv die Spalten "KndName";"Bankname";"Zweck2";"Zweck9";"bankvwltet" rausfieseln.
Dazu sind zwei FOR/F-Anweisungen nötig, eine mit der Laufvariablen %a(...bis%e) und eine mit %A (bis %B).

Diese Mimik wäre aber auch nicht meine erste Wahl für deine Anforderung, ich würde eher Kraemers Variante wählen.

Grüße
Biber
Member: Berti82
Berti82 Jul 06, 2016 at 09:29:45 (UTC)
Goto Top
Super - Vielen vielen Dank !!!!
Mit etwas Anpassung und noch ein wenig Spielerei funktioniert es bestens!