Cuestión : Cómo leer un CSV usar línea de comando de Windows

Para un uso bassicly orientado al archivo tengo que escribir algunos procedimientos. Uno de ellos lee un archivo del csv y escribe dos otros archivos basados sobre la información en el primer contence de file.
De del fichero de entrada está como: el

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

The PARA el comando que estoy utilizando está teniendo apuro con el campo vacío (cuarto) en la línea pasada. La acción de la escritura (eco en el recorte) se hace dependiendo de los 3 o de los 9 en el campo pasado. ¿Ahora el campo 4 es el campo vacío 4 conseguirá a valor del campo 5.
Is allí una manera de prevenir este beheavior del PARA el comando? ¡

Thanks en avanzado!
John
class= > " claro " del
> del " codeSnippet " del class= del
class= " lineNumbers " del
class= del
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= " del id= " codeSnippet837878 del
:: Crear a grupo del guardián
::  9 = KB
::  3 = ABN
:: ******************************************************
: create_custodian_group
  
  PARA /F “delims= de skip=1 tokens=1,2,3,4,5,” %%G adentro (%a_vanvec%vecacc.csv) hacen (
    llamada: s_write_group %%G %%H “%%I” “%%J” %%K)
  INDICADO: einde
  
: s_write_group

si no == [de %5] [3] (
  si no == [de %5] [9] (
    el eco 1=%1 2=%2 3=%3 4=%4 5=%5 perjudica código
  ) (
    eco KB = %1 - %5
  )
) abn otro del eco = %1 - %5

:: final de la subrutina
  INDICADO: eof

: einde
pausa
class= del

Respuesta : Cómo leer un CSV usar línea de comando de Windows

No hay ninguna manera de decir PARA el comando de no tratar delims consecutivos como solo delim.  La manera que trabajo típicamente alrededor de esto es “pre procesar” la linea de entrada y buscar pares de delims con nada entre ellos.  Substituyo éstos por algo entre los delims que puedo después comprobar para saber si hay en el código y tratar como valor que falta o vacío.

Tan si era la linea de entrada

aaa, bbb

Y quiero procesar 4 valores algo que los 2 a los cuales PARA la recolección de la voluntad por abandono, después yo primero convertir la línea

aaa, @, @, bbb

y después alimentar eso en PARA y analizar en coma.

Estoy atando el código con este cambio, me dejo sé va para usted.  Hice uces par de otros pequeños ajustes, me dejo sé qué preguntas usted tiene.

- necesario agregar el EnableDelayedExpansion setlocal de modo que pudiera poner al día y utilizar una variable dentro de un lazo

- definió el nombre de fichero de la entrada como variable, y lo cotizó en la cañería PARA eso lo lee, para manejar el caso donde el nombre de fichero podría incluir espacios

- el externo PARA el lazo lee la línea entera, después asignamos eso a una variable de modo que poder substituir los valores “vacíos” por un placeholder (utilicé @, podría ser cualquier cosa que usted tiene gusto)

- después otro PARA como su original analiza la secuencia resultante y llama la subrutina

- Agregué un ECO del inputline antes y después de que la conversión que apenas usted puede ver tan cómo trabaja, éstas sería quitado más adelante

Esperar que esto ayude

~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 apagado
EnableDelayedExpansion setlocal
 
REM que crea a grupo del guardián
REM  9 = KB
REM  3 = ABN
****************************************************** del REM
fijar InputFile=%a_vanvec%vecacc.csv
 
: create_custodian_group
  
para tokens=*” %%A del usebackq skip=1 de /F “adentro (“%InputFile%") hace (
  fijar InputLine=%%A
  eco ANTES: ¡! ¡InputLine!
  para /L %%B adentro (1.1.20) hacer (
    ¡fijar InputLine=! InputLine: ¡, =, @!
  )
  eco DESPUÉS: ¡! ¡InputLine!
  ¡para delims= de tokens=1-5 de /F “,” %%G adentro (“! ¡InputLine! ") hacer (
    llamada: s_write_group %%G %%H “%%I” “%%J” %%K
  )
)
INDICADO: einde
  
: s_write_group
  si no == [de %5] [3] (
    si no == [de %5] [9] (
      el eco 1=%1 2=%2 3=%3 4=%4 5=%5 perjudica código
    ) (
      eco KB = %1 - %5
    )
  ) (
    abn del eco = %1 - %5
  )
 
  Final del REM de la subrutina
  INDICADO: eof
 
: einde
  pausa
Otras soluciones  
 
programming4us programming4us