none
Datum in einer Textdatei um einen Tag zurücksetzen RRS feed

  • Frage

  • Hallo,

    vielleicht könnt Ihr mir helfen? Ich habe eine Textdatei mit diversen Daten... Hier zwei Beispielzeile:[ZEITENKAL]";"INSERT";"20170228";";";"";"1310";"";"1580";"Muster";"Klaus";"1";"17.10.2016";"21.10.2016";"";"";"";"";"_K";"I";"";"";"";"";"";"";"";"1

    [ZEITENKAL]";"INSERT";"20170228";"";"";"";"1310";"";"1580";"Muster";"Klaus";"1";"10.11.2016";"10.11.2016";"";"";"";"";"_K";"I";"";"";"";"";"";"";"";"1

    Nun muss Spalte 14 jeweils um einen Tag reduziert werden. Die Ausgabe soll dann so aussehen:

    :[ZEITENKAL]";"INSERT";"20170228";";";"";"1310";"";"1580";"Muster";"Klaus";"1";"17.10.2016";"20.10.2016";"";"";"";"";"_K";"I";"";"";"";"";"";"";"";"1

    [ZEITENKAL]";"INSERT";"20170228";"";"";"";"1310";"";"1580";"Muster";"Klaus";"1";"10.11.2016";"09.11.2016";"";"";"";"";"_K";"I";"";"";"";"";"";"";"";"1

    Bisher habe ich das immer mit Excel gemacht. Ich würde das aber gerne automatisch mit Hilfe eines Skriptes als Task laufen lassen. Jemand eine Idee?

    Viele Grüße

    Montag, 27. März 2017 11:27

Antworten

  • Hallo,

    vielleicht könnt Ihr mir helfen? Ich habe eine Textdatei mit diversen Daten... Hier zwei Beispielzeile:[ZEITENKAL]";"INSERT";"20170228";";";"";"1310";"";"1580";"Muster";"Klaus";"1";"17.10.2016";"21.10.2016";"";"";"";"";"_K";"I";"";"";"";"";"";"";"";"1

    [ZEITENKAL]";"INSERT";"20170228";"";"";"";"1310";"";"1580";"Muster";"Klaus";"1";"10.11.2016";"10.11.2016";"";"";"";"";"_K";"I";"";"";"";"";"";"";"";"1

    Nun muss Spalte 14 jeweils um einen Tag reduziert werden. Die Ausgabe soll dann so aussehen:

    :[ZEITENKAL]";"INSERT";"20170228";";";"";"1310";"";"1580";"Muster";"Klaus";"1";"17.10.2016";"20.10.2016";"";"";"";"";"_K";"I";"";"";"";"";"";"";"";"1

    [ZEITENKAL]";"INSERT";"20170228";"";"";"";"1310";"";"1580";"Muster";"Klaus";"1";"10.11.2016";"09.11.2016";"";"";"";"";"_K";"I";"";"";"";"";"";"";"";"1

    Bisher habe ich das immer mit Excel gemacht. Ich würde das aber gerne automatisch mit Hilfe eines Skriptes als Task laufen lassen. Jemand eine Idee?

    Viele Grüße

    Klar. Einfach machen ;-)

    Es ist 'ne CSV-Datei, die kannst Du als solche mit Import-CSV einlesen, mit foreach-Schleife durchgehen, Datum in Datum umwandeln, einen Tag abziehen (.AddDays(-1) ), zurück in einen String wandeln und dann den ganzen Spaß wieder rausschreiben. Wenn Du die Anführungszeichen zwingend brauchst, musst Du halt ein bißchen tricksen.


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> http://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    Montag, 27. März 2017 11:35
  • Na wenn das nicht eine perfekte Gelegenheit ist, sich die Fähigkeiten anzueignen, dann weiß ich ja auch nicht ...  hier wäre so ein Anfang: Getting Started with Microsoft Powershell  ;-)

    Grüße - Best regards

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

    Montag, 27. März 2017 12:19

Alle Antworten

  • Hallo,

    vielleicht könnt Ihr mir helfen? Ich habe eine Textdatei mit diversen Daten... Hier zwei Beispielzeile:[ZEITENKAL]";"INSERT";"20170228";";";"";"1310";"";"1580";"Muster";"Klaus";"1";"17.10.2016";"21.10.2016";"";"";"";"";"_K";"I";"";"";"";"";"";"";"";"1

    [ZEITENKAL]";"INSERT";"20170228";"";"";"";"1310";"";"1580";"Muster";"Klaus";"1";"10.11.2016";"10.11.2016";"";"";"";"";"_K";"I";"";"";"";"";"";"";"";"1

    Nun muss Spalte 14 jeweils um einen Tag reduziert werden. Die Ausgabe soll dann so aussehen:

    :[ZEITENKAL]";"INSERT";"20170228";";";"";"1310";"";"1580";"Muster";"Klaus";"1";"17.10.2016";"20.10.2016";"";"";"";"";"_K";"I";"";"";"";"";"";"";"";"1

    [ZEITENKAL]";"INSERT";"20170228";"";"";"";"1310";"";"1580";"Muster";"Klaus";"1";"10.11.2016";"09.11.2016";"";"";"";"";"_K";"I";"";"";"";"";"";"";"";"1

    Bisher habe ich das immer mit Excel gemacht. Ich würde das aber gerne automatisch mit Hilfe eines Skriptes als Task laufen lassen. Jemand eine Idee?

    Viele Grüße

    Klar. Einfach machen ;-)

    Es ist 'ne CSV-Datei, die kannst Du als solche mit Import-CSV einlesen, mit foreach-Schleife durchgehen, Datum in Datum umwandeln, einen Tag abziehen (.AddDays(-1) ), zurück in einen String wandeln und dann den ganzen Spaß wieder rausschreiben. Wenn Du die Anführungszeichen zwingend brauchst, musst Du halt ein bißchen tricksen.


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> http://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    Montag, 27. März 2017 11:35
  • Danke, aber geht's etwas ausführlicher. Ich habe ehrlich gesagt kaum powershell Erfahrung.
    Montag, 27. März 2017 12:08
  • Na wenn das nicht eine perfekte Gelegenheit ist, sich die Fähigkeiten anzueignen, dann weiß ich ja auch nicht ...  hier wäre so ein Anfang: Getting Started with Microsoft Powershell  ;-)

    Grüße - Best regards

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

    Montag, 27. März 2017 12:19
  • Na wenn das nicht eine perfekte Gelegenheit ist, sich die Fähigkeiten anzueignen, dann weiß ich ja auch nicht ...  hier wäre so ein Anfang: Getting Started with Microsoft Powershell  ;-)

    Grüße - Best regards

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


    So isses. Vor 11 Jahren hatte noch keiner PowerShell Erfahrung :-)

    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> http://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    • Als Antwort markiert lucedeciello Montag, 27. März 2017 13:01
    • Tag als Antwort aufgehoben lucedeciello Montag, 27. März 2017 13:01
    Montag, 27. März 2017 12:38
  • Ich versteh schon... von nichts kommt nichts. Habe den Import via Import-CSV auch schon gemeistert...aber wie gebe ich nun die genaue Position an, an der das Datum geändert werden soll?

    Montag, 27. März 2017 13:05
  • Ich versteh schon... von nichts kommt nichts. Habe den Import via Import-CSV auch schon gemeistert...aber wie gebe ich nun die genaue Position an, an der das Datum geändert werden soll?


    Mein größtes Problem ist gerade, das meine Datei keinen Header hat.... falls jemand versteht was ich meine?
    Montag, 27. März 2017 13:16
  • Ich versteh schon... von nichts kommt nichts. Habe den Import via Import-CSV auch schon gemeistert...aber wie gebe ich nun die genaue Position an, an der das Datum geändert werden soll?


    Mein größtes Problem ist gerade, das meine Datei keinen Header hat.... falls jemand versteht was ich meine?

    Aber sicher. Schau mal hier:

    $a = @("a,b,c","d,e,f")
    $b = "f1,f2,f3"
    $c = @($b) + $a
    $c | ConvertFrom-Csv

    So kannst Du den Header anfügen. $a wäre in Deinem Fall das Ergebnis von Get-Content.


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> http://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    Montag, 27. März 2017 13:20
  • Glaube mir, es nützt nichts, wenn du dir jetzt hier die Antwort Häppchenweise erbittest. Du scheiterst dann unweigerlich bei der ersten kleinen Anpassung.

    Du wirst wohl nicht umhin kommen erstmal ein paar Grundlagen zu lernen. Schau mal hier: LINK

    Wenn du das hast, gibt es zum Thema CSV-Edit mit Powershell quasi unzählige Beispiele im Netz: LINK

    Und wenn du dann dazu Fragen oder Probleme damit hast, kannst du hier gern wieder Fragen.

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Code Manager v5: Link
    (u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    Montag, 27. März 2017 13:22
    Moderator
  • :[ZEITENKAL1]";"INSERT";"20170228";";";"";"1310";"";"1580";"Muster";"Klaus";"1";"17.10.2016";"19.10.2016";"";"";"";"";"_K";"I";"";"";"";"";"";"";"";"1"
    :[ZEITENKAL2]";"INSERT";"20170228";";";"";"1310";"";"1580";"Muster";"Klaus";"1";"17.10.2016";"18.10.2016";"";"";"";"";"_K";"I";"";"";"";"";"";"";"";"1"
    :[ZEITENKAL3]";"INSERT";"20170228";";";"";"1310";"";"1580";"Muster";"Klaus";"1";"17.10.2016";"17.10.2016";"";"";"";"";"_K";"I";"";"";"";"";"";"";"";"1"
    :[ZEITENKAL4]";"INSERT";"20170228";";";"";"1310";"";"1580";"Muster";"Klaus";"1";"17.10.2016";"16.10.2016";"";"";"";"";"_K";"I";"";"";"";"";"";"";"";"1"
    $ximport = Import-Csv -Path c:\temp\test.csv -Delimiter ";" -Header a,b,c,d,e,f,g,h,i,j,k,l,xdatum,n,o,p,q,r,s,t,u,v,w,x,y,z,aa
    
    foreach($zeile in $ximport)
    {
        $zeile.xdatum = (get-date($zeile.xdatum)).AddDays(-1).ToString("dd.MM.yyyy")
        $zeile |convertto-csv -Delimiter ";" -NoTypeInformation | select -Skip 1 | out-file c:\temp\test2.csv -Append
    }
    
    ":[ZEITENKAL1]""";"INSERT";"20170228";";";"";"1310";"";"1580";"Muster";"Klaus";"1";"17.10.2016";"18.10.2016";"";"";"";"";"_K";"I";"";"";"";"";"";"";"";"1"
    ":[ZEITENKAL2]""";"INSERT";"20170228";";";"";"1310";"";"1580";"Muster";"Klaus";"1";"17.10.2016";"17.10.2016";"";"";"";"";"_K";"I";"";"";"";"";"";"";"";"1"
    ":[ZEITENKAL3]""";"INSERT";"20170228";";";"";"1310";"";"1580";"Muster";"Klaus";"1";"17.10.2016";"16.10.2016";"";"";"";"";"_K";"I";"";"";"";"";"";"";"";"1"
    ":[ZEITENKAL4]""";"INSERT";"20170228";";";"";"1310";"";"1580";"Muster";"Klaus";"1";"17.10.2016";"15.10.2016";"";"";"";"";"_K";"I";"";"";"";"";"";"";"";"1"
    "

    Chris

    • Als Antwort vorgeschlagen -- Chris -- Dienstag, 4. April 2017 13:21
    Montag, 27. März 2017 18:21
  • hat dir der Powershell Code geholfen?

    Chris

    Donnerstag, 30. März 2017 16:33