Feld in Datum formatieren - bat
Hallo Leute ich bin neu hier und auf der Suche nach Hilfe.
Ich habe folgendes Problem mit einer CSV Datei
Die Werte 20151214 und 20160213 in den letzten beiden Zeilen stehen dabei als Beispiel für Datumsangaben. Diese brauche ich mittels einer .bat Datei in das Richtig Datum formatiert.
Punkt 1 - Aus 20151214 soll also 14.12.2015 werden.
Punkt 2 - Zudem soll die immer wenn 2x incoming mit der gleichen Nummer (Beispiel: 4053986217036) auftaucht die untere Zeile gelöscht werden.
Kann mir jemand helfen??? Wäre auch bereit dafür etwas zu bezahlen (dann bitte per PM melden)
Ich habe folgendes Problem mit einer CSV Datei
1;201520;30579;0001;XS;4053986214967;in_stock;;0
1;201520;30579;0003;L;4055262365981;in_stock;;137
1;201520;30579;0003;M;4055262365974;in_stock;;43
1;201520;30579;0003;S;4055262365967;in_stock;;74
1;201520;30579;0003;XL;4055262365998;in_stock;;17
1;201520;30579;0003;XS;4055262365950;in_stock;;5
1;201520;30581;0001;L;4053986217043;in_stock;;0
1;201520;30581;0001;L;4053986217043;incoming;20151214;91
1;201520;30581;0001;L;4053986217043;incoming;20160213;128
1;201520;30581;0001;M;4053986217036;in_stock;;0
1;201520;30581;0001;M;4053986217036;incoming;20151214;89
1;201520;30581;0001;M;4053986217036;incoming;20160213;131
Punkt 1 - Aus 20151214 soll also 14.12.2015 werden.
Punkt 2 - Zudem soll die immer wenn 2x incoming mit der gleichen Nummer (Beispiel: 4053986217036) auftaucht die untere Zeile gelöscht werden.
Kann mir jemand helfen??? Wäre auch bereit dafür etwas zu bezahlen (dann bitte per PM melden)
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 286556
Url: https://administrator.de/contentid/286556
Ausgedruckt am: 26.11.2024 um 12:11 Uhr
8 Kommentare
Neuester Kommentar
Moin,
mit Powershell z.B. so
Gruß jodel32
mit Powershell z.B. so
# Path to csv
$path = 'C:\temp\daten.csv'
# import csv as object
$csv = Import-CSV $path -Delimiter ";" -Header 1,2,3,4,5,6,7,8,9
$doubles = @()
# replace dates
$csv | ?{$_.8 -ne ""} | %{$_.8 = $_.8 -replace '(\d{4})(\d{2})(\d{2})','$3.$2.$1'}
# remove duplicates an export
($csv | %{if ($_.7 -eq 'incoming'){if($_.6 -notin $doubles){$doubles +=$_.6;$_}}else{$_}} | convertto-csv -Delimiter ";" -NoTypeInformation | select -skip 1) -replace '"','' | set-content $path -Encoding UTF8
Hallo,
Nun, das Datum dort ist nicht falsch. Abhängig von Länder und Regionen, Datums und Zeit Einstellungen usw. ist die Schreibweise durchaus als richtig anzusehen, nur nicht in dein gewünschtes Aussehen (Format)
Gruß,
Peter
Nun, das Datum dort ist nicht falsch. Abhängig von Länder und Regionen, Datums und Zeit Einstellungen usw. ist die Schreibweise durchaus als richtig anzusehen, nur nicht in dein gewünschtes Aussehen (Format)
Gruß,
Peter
mind. PS 3.0 nutzen !
Hallo jocheng.
Batch ist für dein Vorhaben suboptimal und fehlerbehaftet (darum habe ich mich auch zurückgehalten). Wenn es unbedingt Batch sein muss, von mir aus ...
Laufzeiten jenseits von gut und böse hast du inklusive ...
Grüße
rubberman
Batch ist für dein Vorhaben suboptimal und fehlerbehaftet (darum habe ich mich auch zurückgehalten). Wenn es unbedingt Batch sein muss, von mir aus ...
@echo off &setlocal DisableDelayedExpansion
set "csv_in=test.csv"
set "csv_out=test2.csv"
setlocal EnableDelayedExpansion
for /f "tokens=1* delims=:" %%i in ('type "!csv_in!"^|findstr /nrc:"..*;incoming;20[0-9][0-9][01][0-9][0-3][0-9];..*"') do (
for /f "tokens=6,8 delims=;" %%k in ("%%j") do (
set "num[%%i]=%%k"
set "d=%%l"
set "date[%%i]=!d:~-2!.!d:~4,2!.!d:~,4!"
)
)
<"!csv_in!" >"!csv_out!" (
for /f %%i in ('type "!csv_in!"^|find /c /v ""') do for /l %%j in (1 1 %%i) do (
set "ln=" & set /p "ln="
if "!num[%%j]!"=="" (
echo(!ln!
) else (
if "!numbefore!" neq "!num[%%j]!" (
for /f "tokens=1-8* delims=;" %%k in ("!ln!") do (
echo(%%k;%%l;%%m;%%n;%%o;%%p;%%q;!date[%%j]!;%%s
)
)
set "numbefore=!num[%%j]!"
)
)
)
Laufzeiten jenseits von gut und böse hast du inklusive ...
Grüße
rubberman