Avatar billede klaestrup Nybegynder
04. januar 2005 - 16:43 Der er 9 kommentarer og
1 løsning

Ønsker batch redigering i CSV-fil.

Jeg vil gerne have lavet et batch (DOS) script som kan foretage nogle ændringer i en CSV-fil. Her følger et eksempel på hvad der skal gøres:

Filen før:
"";"01-4068";"01-4068";"Varetekst";"Varetekst2";36.00;-2.00;10.00;201220040433

Ny fil:
"01-4068";1;;0;36,00(rettet fra 36.00);0(rettet fra -2.00);0;;

Som det ses skal en del fjernes/ændres fra strengen.
Der skal gøres følgende:

Hvis felt 7 (i førfilen) har en minus værdi, skal værdien rettes til et 0 (nul).
Desuden skal .00 i felt 7 fjernes (eks. 12.00 -> 12) (eks. -12.00 -> 0).

I felt 6 (i førfilen) skal 36.00 ændres til 36,00.

Jeg har NÆSTEN fået løst det selv (pånær ovenstående ændringer) med flg. kode:

FOR /F "eol=- delims=; tokens=2,6,7" %%1 IN ( FØRFIL.CSV ) DO (
        ECHO %%1;1;;0;%%2;%%3;0;; >> Final.csv
        )
Avatar billede bertelbrander Novice
04. januar 2005 - 23:36 #1
Man burde kunne gøre det med en bat-fil i stil med:

@echo off
FOR /F "eol=- delims=; tokens=2,6,7" %%I IN (FORFIL.CSV) DO Call :Process %%I %%J %%K
goto :eof

:process
set First=%1
set Second=%2
set Third=%3
set Second=%Second:.=,%
if [%Third:~0,1%]==
  • set Third=0
echo %First%;1;;0;%Second%;%Third%;0;;>>Final.csv
Avatar billede klaestrup Nybegynder
05. januar 2005 - 09:46 #2
Tak for hurtigt og yderst brugbart svar!
Det virker...NÆSTEN!
Nu mangler jeg så bare at få fjernet .00 i felt 7 i førfilen. Håber du også lige gider hjælpe med det...?
Jeg er absolut ikke BAT-haj, og du skulle vide hvor mange timer jeg har brugt på at finde ud af at jeg skulle bruge FOR kommandoen til dette. Har søgt efter adskillige find/replace prg. til DOS.
Avatar billede klaestrup Nybegynder
05. januar 2005 - 10:37 #3
Nå, jeg tror jeg fik dette løst på egen hånd, så det nu ser således ud:

:convert
echo.
echo Konvertering er igang - Vent...
echo.
FOR /F "eol=- delims=; tokens=2,6,7" %%I IN (96200949.KOM) DO Call :Process %%I %%J %%K
goto :eof

:process
set First=%1
set Second=%2
set Third=%3
set Second=%Second:.=,%
set Third=%Third:.00=%
if [%Third:~0,1%]==
  • set Third=0
echo %First%;1;;0;%Second%;%Third%;0;;>>Final.csv
   
:eof

Har du nogle kommentarer til det???
Avatar billede bertelbrander Novice
05. januar 2005 - 20:00 #4
Ser ok ud.
Hvis det ikke altid er .00 der skal fjernes, men . og det efter kunne du bruge:
for /F "delims=." %%Z in ("%Third%") do set Third=%%Z

Jeg tror ikke at det er nødvendigt at bruge eol=- du behøver ikke at angive noget (der ser dog ikke ud til at der sker noget ved det).
Avatar billede klaestrup Nybegynder
07. januar 2005 - 16:58 #5
Du skal have dine points. Men hvordan er det nu lige at jeg giver dig dem? Burde der ikke været noget "Giv Point" eller "Accepter Svar" ???
Avatar billede klaestrup Nybegynder
07. januar 2005 - 17:03 #6
Aaaah, det er fordi du har skrevet kommentarer og ikke Svar... er du slet ikke interesseret i de points? ;-)
Avatar billede bertelbrander Novice
07. januar 2005 - 20:43 #7
Nej, jeg er ikke interresseret i point.
Lav selv et svar og accepter det, så får du dine point tilbage.
Avatar billede klaestrup Nybegynder
07. januar 2005 - 22:38 #8
Ok, mange tak!
Avatar billede klaestrup Nybegynder
28. januar 2005 - 10:16 #9
Jeg har iøvrigt lige et tillægsspørgsmål!

Kan man definere den første linje i den semikolon-separerede fil man laver?
Denne linje skal nemlig indeholde headers for alle data i filen.

Altså noget ala header1;header2;header3;EOREOR
Avatar billede klaestrup Nybegynder
28. januar 2005 - 10:22 #10
Se nu bare, jeg fandt selv løsningen...

Jeg indsatte denne linje først:

echo header1;header2;header3;EOREOR>>Final.csv

NOGLE gange behøver tingene ikke være så sværre som de umiddelbart lyder... HELDIGVIS!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester