Pergunta : Como ler um CSV using a linha de comando de Windows

Para bassicly uma lima orientada aplicação eu tenho que redigir alguns procedimentos. Um deles lê uma lima do csv e escreve outras duas limas baseadas na informação no primeiro contence de file.
De da lima de entrada está como: o

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

The PARA o comando que eu me estou usando está tendo o problema com o campo vazio (quarto) na última linha. A ação da escrita (eco na pequena notícia) é feita dependendo dos 3 ou dos 9 no último campo. Agora o campo 4 é o campo vazio 4 começ ao valor do campo 5.
Is lá uma maneira de impedir este beheavior do PARA o comando?

Thanks em avançado!
John
class= > " desobstruído " do
> do " codeSnippet " do class= do
class= " lineNumbers " do
class= do
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:
class= " do id= " codeSnippet837878 do
:: Criando o grupo do curador
::  9 = KB
::  3 = ABN
:: ******************************************************
: create_custodian_group
  
  PARA /F de “delims= skip=1 tokens=1,2,3,4,5,” %%G dentro (%a_vanvec%vecacc.csv) fazem (
    chamada: s_write_group %%G %%H “%%I” “%%J” %%K)
  EMPREENDEDORES: einde
  
: s_write_group

se não == [de %5] [3] (
  se não == [de %5] [9] (
    o eco 1=%1 2=%2 3=%3 4=%4 5=%5 trata injustamente o código
  ) mais (
    eco KB = %1 - %5
  )
) abn outro do eco = %1 - %5

:: fim da sub-rotina
  EMPREENDEDORES: eof

: einde
pausa
class= do

Resposta : Como ler um CSV using a linha de comando de Windows

Não há nenhuma maneira de dizer PARA o comando não tratar delims consecutivos como um único delim.  A maneira que eu trabalho tipicamente em torno deste é “pre processar” a linha de entrada e procurar pares de delims com nada entre eles.  Eu substituo estes com o algo entre os delims que eu posso então verific para ver se há no código e tratar como um valor faltante ou vazio.

Assim se a linha de entrada era

aaa, bbb

E eu quero processar 4 valores um pouco do que os 2 a que PARA o coletor da vontade à revelia, a seguir mim converter primeiramente a linha

aaa, @, @, bbb

e então alimentar isso no PARA e analisá-lo gramaticalmente na vírgula.

Eu estou unindo o código com esta mudança, deixo-me sei vai para você.  Eu fiz um par outros ajustes pequenos, deixo-me sei que perguntas você tem.

- necessário para adicionar o EnableDelayedExpansion setlocal de modo que eu pudesse atualizar e usar uma variável dentro de um laço

- definiu o nome de arquivo da entrada como uma variável, e citou-o no cano principal PARA aquele lê-o, para segurar o caso onde o nome de arquivo poderia incluir espaços

- o exterior PARA o laço lê a linha inteira, a seguir nós atribuímos aquele a uma variável de modo que nós possamos substituir os valores “vazios” com um placeholder (eu me usei @, poderia ser qualquer coisa que você gosta)

- então outro PARA bem como seu original analisa gramaticalmente a corda resultante e chama a sub-rotina

- Eu adicionei um ECO do inputline antes e depois de que a conversão que apenas assim você pode ver como trabalha, estas seria removido mais tarde

Esperar que isto ajuda

~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 fora
EnableDelayedExpansion setlocal
 
REM que cria o grupo do curador
REM  9 = KB
REM  3 = ABN
****************************************************** do REM
ajustar InputFile=%a_vanvec%vecacc.csv
 
: create_custodian_group
  
para tokens=*” %%A usebackq skip=1 de /F do “dentro (“%InputFile%") fazem (
  ajustar InputLine=%%A
  eco ANTES: ! InputLine!
  para /L %%B dentro (1.1.20) fazer (
    ajustar InputLine=! InputLine: , =, @!
  )
  eco EM SEGUIDA: ! InputLine!
  para delims= tokens=1-5 de /F de “,” %%G dentro (“! InputLine! ") fazer (
    chamada: s_write_group %%G %%H “%%I” “%%J” %%K
  )
)
EMPREENDEDORES: einde
  
: s_write_group
  se não == [de %5] [3] (
    se não == [de %5] [9] (
      o eco 1=%1 2=%2 3=%3 4=%4 5=%5 trata injustamente o código
    ) mais (
      eco KB = %1 - %5
    )
  ) mais (
    abn do eco = %1 - %5
  )
 
  Fim do REM da sub-rotina
  EMPREENDEDORES: eof
 
: einde
  pausa
Outras soluções  
 
programming4us programming4us