Zum Inhalt wechseln


Foto

Datumsfeld aus csv auslesen


  • Bitte melde dich an um zu Antworten
25 Antworten in diesem Thema

#1 al3x

al3x

    Junior Member

  • 164 Beiträge

 

Geschrieben 13. November 2017 - 10:38

Hallo zusammen,

 

folgende Situation, ich habe einen Ordner mit mehreren .csv mit gleichem Aufbau, an der x. Stelle in Zeile 1 steht das Datum jjjjmmd (In allen csv gleich).

Dieses möchte ich gern auslesen (Batch oder PS) und in eine Variable packen, damit ich im Anschluß alle csv´s zippen und mit dem ausgelesenen Datum benennen kann.

 

Der 2. Teil ist klar, aber ich weiß nicht wie ich an das Datumsfeld komme. Eventuell mit findstr?

 

Kann mir hier jemand helfen?



#2 BOfH_666

BOfH_666

    Junior Member

  • 144 Beiträge

 

Geschrieben 13. November 2017 - 11:35

Was hast Du denn schon? Steht das Datum immer an der gleichen Stelle? Steht es wirklich in der 1. Zeile, also der Header-Zeile?


live long and prosper!

PS:> (79,108,97,102|%{[char]$_})-join''

#3 al3x

al3x

    Junior Member

  • 164 Beiträge

 

Geschrieben 13. November 2017 - 12:20

ja, es steht immer an der gleichen Stelle. Es handelt sich um eine EDI-Rechnung mit Absender;Empfänger;Adresse; etc......

Bisher habe ich immer das Systemdatum genommen: (for /F "tokens=1-4 delims=." %%i in ('date /t') DO SET date=%%k%%j%%i​)

 

...dies setzt allerdings voraus, dass der Vorgang immer am gleichen Tag durchgeführt wird. Ich dachte nun es sei geschickter, das Datum einfach aus der csv auszulesen und beim Erstellen der zip dann das Rechnungsdatum als Dateiname zu verwenden (statt das Systemdatum zum Erstellungszeitpunkt).

 

Hab aber keine Idee, wie ich vorgehen muss.



#4 Dukel

Dukel

    Board Veteran

  • 9.298 Beiträge

 

Geschrieben 13. November 2017 - 12:23

Du kannst die Dateien als CSV (ConvertFrom-Csv) einlesen und hast alle Spalten als Wert verfügbar.

 

$csv = get-content /path/to/file.csv | ConvertFrom-Csv

$csv.Datum


Stop making stupid people famous.


#5 al3x

al3x

    Junior Member

  • 164 Beiträge

 

Geschrieben 13. November 2017 - 13:15

kannst du das etwas präzisieren? wie komm ich denn zB an den Spaltenwert 37?

Header gibt es in der csv keine.



#6 Dukel

Dukel

    Board Veteran

  • 9.298 Beiträge

 

Geschrieben 13. November 2017 - 13:21

Versuche es einmal und schau dir das Powershell Objekt an.


Stop making stupid people famous.


#7 BOfH_666

BOfH_666

    Junior Member

  • 144 Beiträge

 

Geschrieben 13. November 2017 - 13:27

Wenn es sowieso keine Header gibt, kannst Du auch einfach die erste Zeile einlesen, die entsprechende Stelle mittels SubString Methode rausfräsen und das einer Variable zuweisen. Also so ungefähr:

$DatumsString = (Get-Content -Path 'voller Pfad zu Deiner CSV-Datei' | Select-Object -First 1 ).SubString(37,8)

live long and prosper!

PS:> (79,108,97,102|%{[char]$_})-join''

#8 Dukel

Dukel

    Board Veteran

  • 9.298 Beiträge

 

Geschrieben 13. November 2017 - 13:34

Man kann auch nach bestimmten Zeichen schauen (z.B. Semikolon) und danach splitten (indexof, split).


Stop making stupid people famous.


#9 al3x

al3x

    Junior Member

  • 164 Beiträge

 

Geschrieben 13. November 2017 - 13:48

 

Wenn es sowieso keine Header gibt, kannst Du auch einfach die erste Zeile einlesen, die entsprechende Stelle mittels SubString Methode rausfräsen und das einer Variable zuweisen. Also so ungefähr:

$DatumsString = (Get-Content -Path 'voller Pfad zu Deiner CSV-Datei' | Select-Object -First 1 ).SubString(37,8)

 

ok hier komm ich zumindest mal an einen Wert, allerdings zeigt er mir das 37. Zeichen und nicht die 37. Spalte



#10 Dukel

Dukel

    Board Veteran

  • 9.298 Beiträge

 

Geschrieben 13. November 2017 - 13:50

Kannst du mal eine Beispiel Datei hier posten? Wir geben nur Beispielswerte an, diese musst du natürlich auf deine Dateien anpassen.


Stop making stupid people famous.


#11 al3x

al3x

    Junior Member

  • 164 Beiträge

 

Geschrieben 13. November 2017 - 13:55

02;1;1;STCK;15449.4;15449.4;308988;19;2935.39;5500002194;;;85477;;Modell4711;981080;20171110;;;;;;

 

 

Das ist zwar die 2. Zeile, aber hier steht auch ein Datum. Wäre in dem Fall, sofern ich mich nicht verzählt habe der 17. Wert.



#12 Dukel

Dukel

    Board Veteran

  • 9.298 Beiträge

 

Geschrieben 13. November 2017 - 13:59

Dann sollte das z.B. wie folgt gehen:

 

(Get-Content pfad/zur/datei.csv)[1].split(';')[16]


Stop making stupid people famous.


#13 al3x

al3x

    Junior Member

  • 164 Beiträge

 

Geschrieben 13. November 2017 - 14:07

ok, werde ich später testen...thx schon mal



#14 al3x

al3x

    Junior Member

  • 164 Beiträge

 

Geschrieben 14. November 2017 - 06:44

okay super das klappt!

Kennst du auch die Lösung für Batch? Denn nun habe ich Batch und PS gemischt :-D



#15 testperson

testperson

    Board Veteran

  • 4.578 Beiträge

 

Geschrieben 14. November 2017 - 06:50

Hi,

 

ich würde den Batch-Teil einfach ebenfalls in PS umsetzen und somit auf Batch verzichten.

 

Gruß

Jan


Good morning, that's a nice TNETENNBA!