Pytanie : Dlaczego CSV using Windows Rozkaz Linia

Dla bassicly kartoteka ukierunkowywać zastosowanie I musieć niektóre procedura. Jeden czytać csv kartoteka i pisać dwa inny kartoteka opierać się na the informacja w the pierwszy file.
De contence the wkład kartoteka być jak:

#, 6/29/2010,
222857293,2857293, V.E.C. Klanta, en/of V.E.C. Klantc, 3
223509302,3509302, V.E.C.Klantb, 9

The DLA rozkaz I używać mieć kłopot z the pusty pole (czwarty) w the ostatni linia. The pisać akcja (echo w the odrzynek) robić w zależności od the 3 lub the 9 w the ostatni pole. Teraz pole 4 być pusty pole 4 dostawać the wartość pole 5.
Is tam  sposób ten beheavior the DLA rozkaz?

Thanks w postępowy!
John
(1):
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
:: Kustosz grupa
::  9 = KB
::  3 = ABN
:: ******************************************************
: create_custodian_group
  
  DLA /F "skip=1 tokens=1,2,3,4,5 delims=," %%G wewnątrz (%a_vanvec%vecacc.csv) (
    wezwanie: s_write_group %%G %%H "%%I" "%%J" %%K)
  ROZPOCZYNAJĄCY: einde
  
: s_write_group

jeśli nie [%5] == [3] (
  jeśli nie [%5] == [9] (
    echowy 1=%1 2=%2 3=%3 4=%4 5=%5 krzywdzić kod
  ) inny (
    echowy KB = %1 - %5
  )
) inny odbijać się echem abn = %1 - %5

:: końcówka subroutine
  ROZPOCZYNAJĄCY: eof

: einde
fermata

Odpowiedź : Dlaczego CSV using Windows Rozkaz Linia

Tam  być jakaś sposób the DLA rozkaz konsekutywny delims jako pojedynczy delim.  The sposób I typowo pracować wokoło i być "to" the wkład linia i para delims z i między.  I zamieniać wartość z wartość między the delims który I móc wtedy dla w the kod i jako chybianie lub wartość.

W Ten Sposób jeżeli the wkład linia być

aaa, bbb

I I chcieć 4 wartość raczej the 2 który the DLA wola   pickup brak, then I najpierw nawracać the linia

aaa, @, @, bbb

i wtedy karmić i w the DLA i parse na przecinek.

I dołączać the kod z ten zmiana, pozwalać znać jak ono iść dla ty.  I zrobić kilka inny mały dostosowanie, pozwalać znać jaki pytanie ty mieć.

- potrzebować the setlocal EnableDelayedExpansion tak, że I móc i zmienna wśrodku pętla

- definiować the wkład kartoteka - imię jako zmienna, i ono w the magistrala DLA przestrzeń czytać ono, the skrzynka dokąd the filename móc przestrzeń

- the zewnętrzny DLA pętla czytać the całkowity linia, then my wyznaczać zewnętrzny zmienna tak, że my móc the "pusty" wartość z placeholder (I używać @, móc zewnętrzny ty lubić)

- wtedy - DLA bardziej jak twój oryginalny jeden parses the wynikający sznurek i dzwonić the subroutine

- I dodawać ECHO the inputline przed i po the zamiana właśnie w ten sposób ty móc jak ono pracować, móc być usuwać opóźniony

Mieć Nadzieję to pomagać

~bp
(1):
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
@echo daleko
setlocal EnableDelayedExpansion
 
REM Kustosz grupa
REM  9 = KB
REM  3 = ABN
REM ******************************************************
ustawiać InputFile=%a_vanvec%vecacc.csv
 
: create_custodian_group
  
dla /F "usebackq skip=1 tokens=*" %%A w ("%InputFile%") (
  ustawiać InputLine=%%A
  echo PRZEDTEM: ! InputLine!
  dla /L %%B wewnątrz (1,1,20) (
    ustawiać InputLine=! InputLine: , =, @!
  )
  echo PÓŻNIEJ: ! InputLine!
  dla /F "tokens=1-5 delims=," %%G wewnątrz ("! InputLine! ") (
    wezwanie: s_write_group %%G %%H "%%I" "%%J" %%K
  )
)
ROZPOCZYNAJĄCY: einde
  
: s_write_group
  jeśli nie [%5] == [3] (
    jeśli nie [%5] == [9] (
      echowy 1=%1 2=%2 3=%3 4=%4 5=%5 krzywdzić kod
    ) inny (
      echowy KB = %1 - %5
    )
  ) inny (
    echowy abn = %1 - %5
  )
 
  REM końcówka subroutine
  ROZPOCZYNAJĄCY: eof
 
: einde
  fermata
Inne rozwiązania  
 
programming4us programming4us