branpo
Goto Top

Batch Datei um eine CSV zu bearbeiten und umzuformatieren

Guten Abend,

ich habe eine CSV Liste die folgendermaßen aussieht:

MYL: 92.18
TEVA: 91.51
LEG: 90.63
FLR: 88.74
GLD: 79.52

usw.

1-4 Buchstaben dann einen : und anschließend eine Zahl mit zwei Nachkommastellen.

Nun soll aus der Liste die erste Zeile entfernt werden, dafür habe ich folgenden Code gefunden:

@echo off
for /f "delims=" %%i in ('dir /a-d /b /on "*.csv"') do (  
    more /e +1 "%%i">"%%i.tmp"   
    del "%%i" && ren "%%i.tmp" "%%i"  
)
exit /b

anschließend sollen alle Spalten deren Zahl kleiner als 60,00 gelöscht werden.

Zuletzt sollte dann das ganze in folgendes CSV Format geschrieben werden:
SYM,MYL,SMART/AMEX
SYM,TEVA,SMART/AMEX
SYM,LEG,SMART/AMEX
SYM,FLR,SMART/AMEX
SYM,GLD,SMART/AMEX


das SYM, und ,SMART/AMEX ist fix nur eben den Mittelteil soll aus der ursprünglichen CSV Datei von den übrig gebliebenen übernommen werden

den letzten Teil habe ich mit 2 zusätzlichen CSV Dateien und einem gefundenen Code gelöst:

@echo off &setlocal DisableDelayedExpansion

set "outfile=output.csv"  

set "first="  
set "tmpfile1=%temp%\out.csv~"  
set "tmpfile2=%temp%\ascii.csv~"  
for /f "delims=" %%i in ('dir /a-d /b /on "*.csv"') do (  
  echo Verarbeitung von "%%i".  
  if not defined first (
    >"%outfile%" echo "%%i"  
    >>"%outfile%" type "%%i"  
    set "first=1"  
  ) else (
    set "nextfile=%%i"  
    call :merge
  )
)
pause
exit /b

:merge
>"%tmpfile2%" type "%nextfile%"  
<"%outfile%" >"%tmpfile1%" (  
  set "first=" &set /p "first="  
  setlocal EnableDelayedExpansion
  echo(!first!,"!nextfile!"  
  endlocal
  for /f "delims=" %%j in ('findstr /n "^" "%tmpfile2%"') do (  
    set "first=" &set /p "first="  
    set "second=%%j"  
    setlocal EnableDelayedExpansion
    echo(!first!,!second:*:=!
    endlocal
  )
)
>nul move /y "%tmpfile1%" "%outfile%"  
>nul del "%tmpfile2%"  
exit /b

Da ich wirklich sogut wie keine Ahnung davon habe und es sicherlich alles in einer Batch Datei geht wäre es super wenn mir jemand helfen könnte!

Vielen Dank und liebe Grüße
Branpo

Content-ID: 475242

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

Ausgedruckt am: 23.11.2024 um 17:11 Uhr

140447
Lösung 140447 20.07.2019 aktualisiert um 10:51:39 Uhr
Goto Top
@echo off
set "quelle=d:\daten"  
Powershell -EP Bypass -NoP -c "gci '%quelle%' -Filter *.csv -File | %%{(gc $_.Fullname) | select -skip 1 | ?{[decimal]($_.split(':')[1].trim()) -ge 60} | %%{ 'SYM,' + $_.split(':') + ',SMART/AMEX'} | sc $_.Fullname}"  
Branpo
Branpo 20.07.2019 aktualisiert um 16:35:11 Uhr
Goto Top
Vielen Dank für den Quellcode.
Er funktioniert super! face-smile

Gibt es noch die Möglichkeit das er als Quelle automatisch den Ordner nimmt in dem die Bat ist?
140447
Lösung 140447 20.07.2019 aktualisiert um 17:29:11 Uhr
Goto Top
Gibt es noch die Möglichkeit das er als Quelle automatisch den Ordner nimmt in dem die Bat ist?
Klar. schon mal was von %~dp0 gehört face-wink?!
set "quelle=%~dp0"