archivos csv

03/02/2008 - 21:20 por Patricio | Informe spam
hola amigos.
Tengo un pequeño gran problema.
Tengo un programa (InTouch), que me genera diariamente un archivo con nombre
de fecha del dia actual, y con extencion CSV, ejemplo: 20080301.csv, y mañana
sera 20080401.csv, y asi sucesivamente. Lo que necesito es, al dia siguiente
de generado este archivo, separar los datos, que me entrega, por coma, y
ordenarlos de tal forma que sean facil de interpretar, y tambien agregarles
nombres a las columnas. (para no darme la lata de ordenarlos dia a dia, para
que las demas personas lo entiendan). si alguien me puede ayudar, se lo
agradeceria bastante.

un saludo
Patricio.

Preguntas similare

Leer las respuestas

#6 Héctor Miguel
06/02/2008 - 04:32 | Informe spam
hola, Patricio !

(aunque es lo mismo que te vengo comentando desde la primer respuesta a esta consulta tuya):

- ultimo punto de la primer respuesta:
" - tienes problemas entre el separador de listas/argumentos (excel/configuracion regional) y el que utilizan los archivos *.CSV ?"

- punto 2 de la segunda respuesta:
" 2) no alcanzo a entender la razon por la cual "tienes que..." (abrirlo para) "separar por comas" los datos de cada columna -?-"
" a menos que el separador de listas sea distinto entre la pc donde se genera el *.CSV y donde se abre (en excel) el archivo -?-"
" situacion que suele ser "recurrente" cuando la configuracion regional es distinta entre los equipos (y/o en excel 2002 en adelante)"

por los datos que expones (creo que) quedan +/- "claras" las causas del problema al que te enfrentas...
1) hay "incompatibilidad" en el formato de los archivos (*.CSV = COMMA SEPARATED VALUES)
2) los separadores (listas/argumentos, miles, decimales) son distintos entre la pc que genera los *.CSV y la pc donde los abres en excel
3) la pc "generadora" usa coma para separar listas y argumentos (tu pc utiliza punto y coma) <= (aqui empieza el conflicto)
4) la pc "generadora" usa coma para separar decimales (tu pc las separa por comas) <= por eso te aparecen (como) en millones/miles

existen alternativas +/- rapidas para hacer (re)conversiones por separadores diferentes (miles/decimales)
pero necesitas confirmar si lo anterior es correcto y un ejemplo de los datos como te aparecen y como los necesitas :))

saludos,
hector.

__ la consulta original __
Haber si me explico mejor con el sgte ejemplo. Asi me lo entrega el programa InTouch
todo en las celdas desde la A1:A... un archivo con nombre de fecha 20080502.CSV, y con con una sola hoja con igual nombre 20080502
A B C D
1 01-02-2008,15:23:57,102.055745,101.660760
2 01-02-2008,15:23:57,99.010695,94.919786
3 01-02-2008,15:23:57,89.432103,82.219484
4 01-02-2008,15:24:57,103.101539,101.706376
5 01-02-2008,15:24:57,98.870637,94.892197
6 01-02-2008,15:24:57,89.432451,82.220310
7 01-02-2008,15:25:57,102.101539,101.706376
8 01-02-2008,15:25:57,98.741362,95.409674
9 01-02-2008,15:25:57,89.432939,82.222252
10 01-02-2008,15:26:57,102.101539,101.706376
11 01-02-2008,15:26:57,98.906844,95.627376
12 01-02-2008,15:26:57,89.433939,82.223682
13 01-02-2008,15:27:57,102.101539,101.706376
14 01-02-2008,15:27:57,98.693859,95.371219
15 01-02-2008,15:27:57,89.434194,82.224135
y yo tengo que dejarlo asi:
A B C D E F G H
1 FECHA HORA % HORA % TURNO % CAMPA#A
2 01-02-2008 15:23:57 102,06 101,66 99,01 94,92 89,43 82,22
3 01-02-2008 15:24:57 103,1 101,71 98,87 94,89 89,43 82,22
4 01-02-2008 15:25:57 102,1 101,71 98,74 95,41 89,43 82,22
5 01-02-2008 15:26:57 102,1 101,71 98,91 95,63 89,43 82,22
6 01-02-2008 15:27:57 102,1 101,71 98,69 95,37 89,43 82,22
7 01-02-2008 15:28:57 102,15 101,75 98,92 95,71 89,44 82,23
8 01-02-2008 15:29:57 102,1 101,71 98,93 95,7 89,44 82,23
9 01-02-2008 15:30:57 102,1 101,71 99,13 95,51 89,44 82,23

Ojala te aclare un poco, mas y me puedas ayudar...
Respuesta Responder a este mensaje
#7 Patricio
07/02/2008 - 02:43 | Informe spam
Hola y gracias por interesarse en mi problema.

Hector, es muy correcto lo que dices.

los datos me aparecen asi:

(A1) 01-02-2008,15:23:57,102.055745,101.660760
(A2) 01-02-2008,15:23:57,99.010695,94.919786
(A3) 01-02-2008,15:23:57,89.432103,82.219484

y tengo que dejarlos asi:

A B C D E F G H
1 fecha hora %hora %turno %campaña
2 01-02-2008 15:23:57 102,06 101,66 99,01 94,92 89,43 82,22

Y esto se repite sucesivamente. las 3 filas A1:A3, tengo que dejarlas A2:H2
de la A4:A6 en A3:H3 todo esto en otro archivo. (A1:H2, los reservo para los
nombres de las columnas)

(yo pensaba hacer una plantilla, donde poniendo la direccion y nombre de
archivo CSV (en alguna celda), me copie los datos de este archivo a la
pantilla, para luego guardarla con otro nombre, donde puedan acceder el
personal involucardo con los estos datos, yo lo he echo copiando datos de un
archivo con nombre conocido y que no cambia. pero en este caso no se como
relacionarlo con estos archivos que se crean diariamente y con nombre
diferente. si me pudieran ayudar por este lado, se los agradeceria aun mas,
ya que yo no me manejo mucho con Visual Basic)

un saludo
Patricio.


"Héctor Miguel" escribió:

hola, Patricio !

(aunque es lo mismo que te vengo comentando desde la primer respuesta a esta consulta tuya):

- ultimo punto de la primer respuesta:
" - tienes problemas entre el separador de listas/argumentos (excel/configuracion regional) y el que utilizan los archivos *.CSV ?"

- punto 2 de la segunda respuesta:
" 2) no alcanzo a entender la razon por la cual "tienes que..." (abrirlo para) "separar por comas" los datos de cada columna -?-"
" a menos que el separador de listas sea distinto entre la pc donde se genera el *.CSV y donde se abre (en excel) el archivo -?-"
" situacion que suele ser "recurrente" cuando la configuracion regional es distinta entre los equipos (y/o en excel 2002 en adelante)"

por los datos que expones (creo que) quedan +/- "claras" las causas del problema al que te enfrentas...
1) hay "incompatibilidad" en el formato de los archivos (*.CSV = COMMA SEPARATED VALUES)
2) los separadores (listas/argumentos, miles, decimales) son distintos entre la pc que genera los *.CSV y la pc donde los abres en excel
3) la pc "generadora" usa coma para separar listas y argumentos (tu pc utiliza punto y coma) <= (aqui empieza el conflicto)
4) la pc "generadora" usa coma para separar decimales (tu pc las separa por comas) <= por eso te aparecen (como) en millones/miles

existen alternativas +/- rapidas para hacer (re)conversiones por separadores diferentes (miles/decimales)
pero necesitas confirmar si lo anterior es correcto y un ejemplo de los datos como te aparecen y como los necesitas :))

saludos,
hector.

__ la consulta original __
> Haber si me explico mejor con el sgte ejemplo. Asi me lo entrega el programa InTouch
> todo en las celdas desde la A1:A... un archivo con nombre de fecha 20080502.CSV, y con con una sola hoja con igual nombre 20080502
> A B C D
> 1 01-02-2008,15:23:57,102.055745,101.660760
> 2 01-02-2008,15:23:57,99.010695,94.919786
> 3 01-02-2008,15:23:57,89.432103,82.219484
> 4 01-02-2008,15:24:57,103.101539,101.706376
> 5 01-02-2008,15:24:57,98.870637,94.892197
> 6 01-02-2008,15:24:57,89.432451,82.220310
> 7 01-02-2008,15:25:57,102.101539,101.706376
> 8 01-02-2008,15:25:57,98.741362,95.409674
> 9 01-02-2008,15:25:57,89.432939,82.222252
> 10 01-02-2008,15:26:57,102.101539,101.706376
> 11 01-02-2008,15:26:57,98.906844,95.627376
> 12 01-02-2008,15:26:57,89.433939,82.223682
> 13 01-02-2008,15:27:57,102.101539,101.706376
> 14 01-02-2008,15:27:57,98.693859,95.371219
> 15 01-02-2008,15:27:57,89.434194,82.224135
> y yo tengo que dejarlo asi:
> A B C D E F G H
> 1 FECHA HORA % HORA % TURNO % CAMPA#A
> 2 01-02-2008 15:23:57 102,06 101,66 99,01 94,92 89,43 82,22
> 3 01-02-2008 15:24:57 103,1 101,71 98,87 94,89 89,43 82,22
> 4 01-02-2008 15:25:57 102,1 101,71 98,74 95,41 89,43 82,22
> 5 01-02-2008 15:26:57 102,1 101,71 98,91 95,63 89,43 82,22
> 6 01-02-2008 15:27:57 102,1 101,71 98,69 95,37 89,43 82,22
> 7 01-02-2008 15:28:57 102,15 101,75 98,92 95,71 89,44 82,23
> 8 01-02-2008 15:29:57 102,1 101,71 98,93 95,7 89,44 82,23
> 9 01-02-2008 15:30:57 102,1 101,71 99,13 95,51 89,44 82,23
>
> Ojala te aclare un poco, mas y me puedas ayudar...



Respuesta Responder a este mensaje
#8 Héctor Miguel
07/02/2008 - 03:29 | Informe spam
hola, Patricio !

por los datos que expones, necesitas "combinar" cada 3 filas del *.csv en una sola de la nueva hoja
omitiendo fecha y hora (as primeras dos columnas) de las filas 2 y 3 de cada grupo

si quieres dejara para despues alguna macro, seria bueno si comentas el procedimiento que sigues actualmente
no importa si lo has logrado con la base de archivos que no cambian de nombre (solo no omitas los detalles, o sea)...
el procedimiento (manual ?) exacto de como, cuando, de donde, a donde, etc. (hojas, rangos, ...)

saludos,
hector.

__ la consulta original __
los datos me aparecen asi:
(A1) 01-02-2008,15:23:57,102.055745,101.660760
(A2) 01-02-2008,15:23:57,99.010695,94.919786
(A3) 01-02-2008,15:23:57,89.432103,82.219484
y tengo que dejarlos asi:
A B C D E F G H
1 fecha hora %hora %turno %campa#a
2 01-02-2008 15:23:57 102,06 101,66 99,01 94,92 89,43 82,22

Y esto se repite sucesivamente. las 3 filas A1:A3, tengo que dejarlas A2:H2 de la A4:A6 en A3:H3 todo esto en otro archivo.
(A1:H1, los reservo para los nombres de las columnas)
(yo pensaba hacer una plantilla, donde poniendo la direccion y nombre de archivo CSV (en alguna celda)
me copie los datos de este archivo a la pantilla, para luego guardarla con otro nombre
donde puedan acceder el personal involucardo con los estos datos
yo lo he echo copiando datos de un archivo con nombre conocido y que no cambia.
pero en este caso no se como relacionarlo con estos archivos que se crean diariamente y con nombre diferente.
si me pudieran ayudar por este lado, se los agradeceria aun mas, ya que yo no me manejo mucho con Visual Basic)
Respuesta Responder a este mensaje
#9 Patricio
08/02/2008 - 04:02 | Informe spam
Hola, Héctor.

lo primero que hago es copiar toda la columna "A" del Libro *.csv en la
columna "A" de la "Hoja 1" de un nuevo Libro *.xls. Luego hago la separación
por coma (Menú>Datos>Texto en columnas... Delimitados> Separador> Coma). En
la "Hoja 2" (de este nuevo libro) en la fila "1" desde la columna "A", hasta
la "H". lo dejo para los nombres de las columnas. Luego comienzo a copiar los
datos desde la "Hoja 1" a la "Hoja 2":

Fila "2"
[A2]=Hoja1!A1 [B2]=Hoja1!B1 [C2]=REDONDEAR(Hoja1!C1/1000000;2)
[D2]=REDONDEAR(Hoja1!D1/1000000;2) [E2]=REDONDEAR(Hoja1!C2/1000000;2)
[F2]=REDONDEAR(Hoja1!D2/1000000;2) [G2]=REDONDEAR(Hoja1!C3/1000000;2)
[H2]=REDONDEAR(Hoja1!D3/1000000;2)

esta seria la primera fila con datos. Esta fila la selecciono y la copio en
las demás filas, y de ahí tengo que comenzar a eliminar las filas que no me
sirven: dejo 1 y elimino 2, avanzo 1 y elimino 2 y así sucesivamente, para
dejarlo así:

Fila "3"
[A3]=Hoja1!A4 [B3]=Hoja1!B4 [C3]=REDONDEAR(Hoja1!C4/1000000;2)
[D3]=REDONDEAR(Hoja1!D4/1000000;2) [E3]=REDONDEAR(Hoja1!C5/1000000;2)
[F3]=REDONDEAR(Hoja1!D5/1000000;2) [G3]=REDONDEAR(Hoja1!C6/1000000;2)
[H3]=REDONDEAR(Hoja1!D6/1000000;2)

Fila "4"
[A4]=Hoja1!A7 [B4]=Hoja1!B7 [C4]=REDONDEAR(Hoja1!C7/1000000;2)
[D4]=REDONDEAR(Hoja1!D7/1000000;2) [E4]=REDONDEAR(Hoja1!C8/1000000;2)
[F4]=REDONDEAR(Hoja1!D8/1000000;2) [G4]=REDONDEAR(Hoja1!C9/1000000;2)
[H4]=REDONDEAR(Hoja1!D9/1000000;2)
.
.
.

y así...

Como puedes ver es una lata realizarlo todos los días.

un saludo
Patricio.


"Héctor Miguel" escribió:

hola, Patricio !

por los datos que expones, necesitas "combinar" cada 3 filas del *.csv en una sola de la nueva hoja
omitiendo fecha y hora (as primeras dos columnas) de las filas 2 y 3 de cada grupo

si quieres dejara para despues alguna macro, seria bueno si comentas el procedimiento que sigues actualmente
no importa si lo has logrado con la base de archivos que no cambian de nombre (solo no omitas los detalles, o sea)...
el procedimiento (manual ?) exacto de como, cuando, de donde, a donde, etc. (hojas, rangos, ...)

saludos,
hector.

__ la consulta original __
> los datos me aparecen asi:
> (A1) 01-02-2008,15:23:57,102.055745,101.660760
> (A2) 01-02-2008,15:23:57,99.010695,94.919786
> (A3) 01-02-2008,15:23:57,89.432103,82.219484
> y tengo que dejarlos asi:
> A B C D E F G H
> 1 fecha hora %hora %turno %campa#a
> 2 01-02-2008 15:23:57 102,06 101,66 99,01 94,92 89,43 82,22
>
> Y esto se repite sucesivamente. las 3 filas A1:A3, tengo que dejarlas A2:H2 de la A4:A6 en A3:H3 todo esto en otro archivo.
> (A1:H1, los reservo para los nombres de las columnas)
> (yo pensaba hacer una plantilla, donde poniendo la direccion y nombre de archivo CSV (en alguna celda)
> me copie los datos de este archivo a la pantilla, para luego guardarla con otro nombre
> donde puedan acceder el personal involucardo con los estos datos
> yo lo he echo copiando datos de un archivo con nombre conocido y que no cambia.
> pero en este caso no se como relacionarlo con estos archivos que se crean diariamente y con nombre diferente.
> si me pudieran ayudar por este lado, se los agradeceria aun mas, ya que yo no me manejo mucho con Visual Basic)



Respuesta Responder a este mensaje
#10 Héctor Miguel
08/02/2008 - 05:16 | Informe spam
hola, Patricio !

prueba con la siguiente macro que deberas ejecutar (solamente) despues de hacer la separarcion (texto en columnas)
asume que la separacion ocurre en la "hoja1"... y que la "hoja2" empieza TOTALMENTE LIMPIA <= OJO
despues de haberla ejecutado, aplicas los formatos de fecha y hora a las columnas A y B (en la hoja 2)
y combinas los titulos de las celdas C1:D1, E1:F1, G1:H1 (a mi me chocan las celdas combinadas) :))

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

Sub Arregla_CSV()
Dim Fila As Integer
Application.ScreenUpdating = False
With Worksheets("hoja1")
For Fila = 1 To .Range("a65536").End(xlUp).Row Step 3
Worksheets("hoja2").Range("a" & (Fila + 2) / 3).Resize(, 8).Value = _
Array(.Range("a" & Fila), .Range("b" & Fila), _
Application.Round(.Range("c" & Fila) / [1e6], 2), _
Application.Round(.Range("d" & Fila) / [1e6], 2), _
Application.Round(.Range("c" & Fila + 1) / [1e6], 2), _
Application.Round(.Range("d" & Fila + 1) / [1e6], 2), _
Application.Round(.Range("c" & Fila + 2) / [1e6], 2), _
Application.Round(.Range("d" & Fila + 2) / [1e6], 2))
Next
End With
With Worksheets("hoja2")
.Range("a1").EntireRow.Insert
.Range("a1").Resize(, 7).Value = _
Array("Fecha", "Hora", "% Hora", "", "% Turno", "", "% Campaña")
End With
End Sub

__ la consulta original __
lo primero que hago es copiar toda la columna "A" del Libro *.csv en la columna "A" de la "Hoja 1" de un nuevo Libro *.xls.
Luego hago la separacion por coma (Menu>Datos>Texto en columnas... Delimitados> Separador> Coma).
En la "Hoja 2" (de este nuevo libro) en la fila "1" desde la columna "A", hasta la "H". lo dejo para los nombres de las columnas.
Luego comienzo a copiar los datos desde la "Hoja 1" a la "Hoja 2":
Fila "2"
[A2]=Hoja1!A1 [B2]=Hoja1!B1 [C2]=REDONDEAR(Hoja1!C1/1000000;2)
[D2]=REDONDEAR(Hoja1!D1/1000000;2) [E2]=REDONDEAR(Hoja1!C2/1000000;2)
[F2]=REDONDEAR(Hoja1!D2/1000000;2) [G2]=REDONDEAR(Hoja1!C3/1000000;2)
[H2]=REDONDEAR(Hoja1!D3/1000000;2)
esta seria la primera fila con datos. Esta fila la selecciono y la copio en las demas filas
y de ahi tengo que comenzar a eliminar las filas que no me sirven
: dejo 1 y elimino 2, avanzo 1 y elimino 2 y asi sucesivamente, para dejarlo asi:
Fila "3"
[A3]=Hoja1!A4 [B3]=Hoja1!B4 [C3]=REDONDEAR(Hoja1!C4/1000000;2)
[D3]=REDONDEAR(Hoja1!D4/1000000;2) [E3]=REDONDEAR(Hoja1!C5/1000000;2)
[F3]=REDONDEAR(Hoja1!D5/1000000;2) [G3]=REDONDEAR(Hoja1!C6/1000000;2)
[H3]=REDONDEAR(Hoja1!D6/1000000;2)
Fila "4"
[A4]=Hoja1!A7 [B4]=Hoja1!B7 [C4]=REDONDEAR(Hoja1!C7/1000000;2)
[D4]=REDONDEAR(Hoja1!D7/1000000;2) [E4]=REDONDEAR(Hoja1!C8/1000000;2)
[F4]=REDONDEAR(Hoja1!D8/1000000;2) [G4]=REDONDEAR(Hoja1!C9/1000000;2)
[H4]=REDONDEAR(Hoja1!D9/1000000;2)

... es una lata realizarlo todos los dias...
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida