fahrrad
Goto Top

Zweistelliges Jahr aus vorgegeben vierstelligen Jahr aus Textdatei

Hallo und guten Morgen

ich habe eine CSV-Datei, die Daten im folgenden Format enthält in vielen Zeilen enthält:

1234567;24.02.2018;10.03.2018;XY

Ich muß die Daten in folgendes Format umbauen:

1234567 24.02.1810.03.18XY

Ich kann mir über

FOR /F "SKIP=1 TOKENS=1-8 DELIMS=.;" %A IN (Dateiname.CSV) DO @echo %A %B %C %D %E %F %G %H

schon mal die einzelnen Bruchstücke auflisten lassen:

1234567 24 02 2018 10 03 2018 XY

Jetzt muß nur noch %D und %H von vierstelliges Jahr auf zweistelliges Jahr reduziert werden, aber da habe ich mein Problem, welches ich nicht gelöst bekomme, danach könnten alle Variablen passend zusammengeschrieben werden.

Kann mich jemand aufschlauen, wie ich die Jahreszahl innerhalb der For-Schleife reduzieren kann?

Vielen Dank & viele Grüße
Fahrrad

Content-ID: 349338

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

Ausgedruckt am: 23.11.2024 um 10:11 Uhr

SeaStorm
SeaStorm 18.09.2017 aktualisiert um 12:07:55 Uhr
Goto Top
mit %D:~2,2% würdest du in dem Fall an die "18" in "2018" kommen
em-pie
Lösung em-pie 18.09.2017 aktualisiert um 12:13:57 Uhr
Goto Top
Moin,

rechnen kannst du, indem du folgendes machen tätest:
Set /a JJ1=%D-2000
Set /a JJ2=%G-2000
ECHO %JJ1%
ECHO %JJ2%

Du musst in deiner FOR-Schleife dann halt nur mit Klammern arbeiten

Gruß
em-pie

P.S. oder die Variante des KollegenSeaStorm face-smile
Fahrrad
Fahrrad 18.09.2017 um 12:15:13 Uhr
Goto Top
hallo Seastorm,

den gleichen Ansatz hatte ich schon probiert, bekomme dann aber als Ausgabe 2018:~2,2% und nicht wie erwünscht nur die 18

Trotzdem vielen Dank
Fahrrad
SeaStorm
SeaStorm 18.09.2017 aktualisiert um 12:21:23 Uhr
Goto Top
machst du das in der FOR-Zeile? Das geht nicht.
Aber anstatt danach dann nur %D% zu schreiben, schreibst du %D:~2,2% und erhälst die korrekte ausgabe.
Also "%D:~2,2%" da verwenden, wo du deine CSV neu zusammenbaust


FOR /F "SKIP=1 TOKENS=1-8 DELIMS=.;" %A IN (Dateiname.CSV) DO @ECHO %A %B %C %D %E %F %G %H  
echo %A% %B% %C% %D:~2,2% %E% %F% %G% %H%

sollte in sowas wie

1234567 24 02 18 10 03 2018 XY

enden
Biber
Lösung Biber 18.09.2017 aktualisiert um 13:10:59 Uhr
Goto Top
Moin Fahrrad,

Laufvariablen der FOR-Anweisung lassen sich nicht mit den Teilstring-Funktionen auswerten; das geht nur mit Variablen, die auch mit SET definiert wurden.
Und wenn innerhalb einer FOR-Anweisung Variablen gesetzt UND ausgelesen/manipuliert werden sollen, dann muss zusätzlich mit "setlocal enableDelayedExpansion" gewerkelt werden.

Beispiel/proof-of-concept am CMD-Prompt
C:\Users\Biber>setlocal enabledelayedExpansion & FOR /F "TOKENS=1-8 DELIMS=.;" %A IN ("1234567;24.02.2018;10.03.2018;XY") DO @(set /a jj1=%D-2000) &(Set/a jj2=%G-2000) &@ECHO %A %B %C %JJ1% %E %F %JJ2% %H  
18181234567 24 02 18 10 03 18 XY

Im Batch dann optisch auf ein paar Zeilen auseinandergezogen:
@echo off & setlocal enabledelayedExpansion 
FOR /F "Skip=1 TOKENS=1-8 DELIMS=.;" %%A IN (Dateiname.csv) DO (  
  set /a jj1=%%D-2000
  Set/a jj2=%%G-2000
  ECHO %%A %%B %%C %JJ1% %%E %%F %JJ2% %%H
)

Grüße
Biber
Fahrrad
Fahrrad 18.09.2017 um 12:38:51 Uhr
Goto Top
Hallo Seastorm,

ich bekomme trotzdem nur die Ausgabe 2018:~2,2%, wenn ich folgende Kommandozeile ausführe

FOR /F "SKIP=1 TOKENS=1-8 DELIMS=.;" %A IN (Dateiname.CSV) DO @echo %A %B %C %D %E %F %G %H&echo %A% %B% %C% %D:~2,2% %E% %F% %G% %H%

1234567% 24% 02% 2018:~2,2% 10% 03% 2018% XY% und zu viele Prozente bei den anderen Variablen

Vielen Dank
Fahrrad
SeaStorm
SeaStorm 18.09.2017 um 12:45:19 Uhr
Goto Top
siehste mal wie schnell man das verlernt face-smile Verwende seit einiger Zeit kein Batch mehr und mache alles in Powershell.
hast natürlich recht...
Fahrrad
Fahrrad 18.09.2017 um 13:32:16 Uhr
Goto Top
Hallo Biber,

ich habe Deinen Beitrag zu spät gesehen..... Vielen Dank :o)

Dein proof-of-concept am CMD-Prompt funktioniert tadellos, nur meine Umsetzung in der Batch liefert weder JJ1 noch JJ2

@echo off & setlocal enabledelayedExpansion
FOR /F "TOKENS=1-8 DELIMS=.;" %%A IN (Dateiname.csv) DO (
Set /a JJ1=%%D-2000
Set /a JJ2=%%G-2000
ECHO %JJ1%
ECHO %JJ2%
REM ECHO %%A %%B %%C %JJ1% %%E %%F %JJ2% %%H
)
PAUSE

sondern nur
ECHO ist ausgeschaltet (OFF).
ECHO ist ausgeschaltet (OFF). usw.

d.h. JJ1 und JJ2 werden nicht definiert

Viele Grüße
Fahrrad
Fahrrad
Fahrrad 18.09.2017 um 13:41:49 Uhr
Goto Top
Aber mit ! anstelle % geht es.......

Vielen Dank an alle Beteiligten :o)