Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Ayuda para generar bases formato TXT

Estas en el tema de Ayuda para generar bases formato TXT en el foro de Bases de Datos General en Foros del Web. Amigos!: Estoy queriendo generar mediante acces y partiendo de una base de datos grandes, este formato de datos para la exportación a una BD de ...
  #1 (permalink)  
Antiguo 27/04/2006, 12:34
Avatar de tonymontana  
Fecha de Ingreso: abril-2006
Mensajes: 27
Antigüedad: 18 años
Puntos: 0
Ayuda para generar bases formato TXT

Amigos!:
Estoy queriendo generar mediante acces y partiendo de una base de datos grandes, este formato de datos para la exportación a una BD de un programa fiscal.
El tema es que no consigo lograr ese formato tal cual está, es más, no puedo incluir los ceros a la izquierda de cada valor de campo.

14010.29.00.000R 000000000000,97000000009999,991000000000058,640700 0000000000,00
14010.29.00.000R 000000000000,98000000009999,991000000000217,250700 0000000000,00
14010.29.00.000R 000000000000,99000000009999,991000000000199,880700 0000000000,00
14010.29.00.000R 000000000001,01000000009999,991000000000304,220700 0000000000,00
14010.29.00.000R 000000000001,02000000009999,991000000000051,170700 0000000000,00
14010.29.00.000R 000000000001,03000000009999,991000000000206,760700 0000000000,00

Estructura:

CAMPOS Desde Hasta Longitud
campo1 1 6 6
campo2 7 7 20
campo3 8 27 20
campo4 28 42 15
campo5 43 57 15
campo6 58 58 1
campo7 59 73 15
campo8 74 75 1
campo8 76 90 15

Los registros son cerca de 3.000, osea, a mano no quisiera hacerlo.
Hay algún programa que me facilite esto? ¿Que puedo hacer al respecto?

Un saludo!!
Antonio

Última edición por tonymontana; 27/04/2006 a las 12:49
  #2 (permalink)  
Antiguo 28/04/2006, 00:11
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 4 meses
Puntos: 1
Una pregunta, ¿por qué no puede ser un simple CSV?

¿Es decir, por qué tanto apuro con el formato?

Ahora que si es muy importante, podrías convertir fácilmente el formato de tus registros (tal como te los da un CSV) y con algún lenguaje, por ejemplo en PHP no se llevaría casi nada de líneas y te dejaría ese archivo tal como lo deseas en un instante.

Pero el lenguaje que te parsee un formato CSV es lo de menos, la idea es lo importante.
__________________
"Di no al Internet Explorer" -Proverbio Chino-
  #3 (permalink)  
Antiguo 28/04/2006, 05:37
Avatar de tonymontana  
Fecha de Ingreso: abril-2006
Mensajes: 27
Antigüedad: 18 años
Puntos: 0
uamistad:
Buena Idea!!! Excelente. Tengo ahora toda la base en CSV. Ahora lo único que me falta es que me tiren una línea siquiera de como poder agregar los ceros y espacios.
Con una muestra de un registro me conformo.
Necesito convertir partiendo de esto:
1;1;4010.39.00.000F;0,1916;9999,99;1;9,58;7;0,00

a esto como resultado:
00000114010.39.00.000F 000000000000,19000000009999,991000000000009,580700 0000000000,00

Agradecido amigos.

Antonio
  #4 (permalink)  
Antiguo 28/04/2006, 05:59
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 4 meses
Puntos: 1
Bueno, pues así sin saber está dificil.

Hay lugares en donde aparecen ceros pero no se sabe si se tiene que llenar un datos y completar con ceros o bien, es un número de ceros predeterminado.
__________________
"Di no al Internet Explorer" -Proverbio Chino-
  #5 (permalink)  
Antiguo 28/04/2006, 06:09
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 4 meses
Puntos: 1
O mejor en lugar de explicar, pega un pedazo representantivo de lo que tienes y su equivalente en cómo lo quieres.
__________________
"Di no al Internet Explorer" -Proverbio Chino-
  #6 (permalink)  
Antiguo 28/04/2006, 07:08
Avatar de tonymontana  
Fecha de Ingreso: abril-2006
Mensajes: 27
Antigüedad: 18 años
Puntos: 0
Con un ejemplo, mas o menos explicado me conformo.
Tal como pides te paso lo que tengo:
1;1;4010.39.00.000F;0,1916;9999,99;1;9,58;7;0,00

y Debe quedar así:
00000114010.39.00.000F 000000000000,19000000009999,991000000000009,580700 0000000000,00

Pero como dije, no es necesario que me lo haga alguien, con una tirada de ejemplo en php vale y mucho!.
  #7 (permalink)  
Antiguo 28/04/2006, 07:36
Avatar de oskarL  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 499
Antigüedad: 19 años
Puntos: 2
Pues creo que deberias explicar un poco mas la "conversion" que quieres hacer, porque yo veo ese ejemplo, y no lo veo nada claro. Como dice uamistad, no se donde poner ceros, donde no, cuantos, etc
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.
  #8 (permalink)  
Antiguo 28/04/2006, 07:46
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 4 meses
Puntos: 1
Exacto, esa conversión no dice nada. A menos que haya varios ejemplos y uno se pueda dar la idea de que ya existe un patrón.

Pero bueno, si quieres una idea, la mía es esta:

La siguiente función nada más se encarga de descomponer tu cadena hasta cierto punto, pues después ya no se me ocurre cómo está el patrón, justamente lo que dice OscarL. Pero bueno, es un ejemplillo.

Código PHP:
<?
$original 
"1;1;4010.39.00.000F;0,1916;9999,99;1;9,58;7;0,00";

//la función parseadora hace el trabajo sucio
$parseada parseadora($original);

echo 
$parseada//imprime: 00000114010.39.00.000F  (finaliza en espacio)

//faltan términos, tienes que ver qué patrón siguen tus conversiones.
?>
Y esta es la función comentada hasta donde me fue posible.

En la expresión regular, hay un momento en el que pongo '.*', y desde ahí hay que seguir capturando términos y parseando.

Código PHP:
<?
function parseadora($entrada){
    
//Consideraciones:
    //Te ayudo con la primera parte, lo que sigue es seguir fabricando
    //la expresión regular correcta.

    //para ahorrar código, meteré esto que se usa con frecuencia en $nl
    //la parte de las letras la metí por la F que aparece en tu ejemplo
    
$nl "[0-9a-zA-Z]+";

    
//La siguiente línea comentada muestra qué es lo que estaría extrayendo la expr.reg.
    //                        1;  1;   4010.   39.    00.   000F; y continúas
    
$expresion_regular "^($nl);($nl);($nl)\.($nl)\.($nl)\.($nl);.*";

    
//nos ayudará a separar los pedazos en $pedazos[1], $pedazos[2]...
    
ereg($expresion_regular,$entrada,$pedazos);
    
    
//CONSTRUYENDO POCO A POCO LA EXPRESIÓN 'RESULTADO'

    //concatenamos los primeros tres pedazos
    
$resultado $pedazos[1].$pedazos[2].$pedazos[3];

    
//ahora se rellenan con ceros a la izquierda hasta tener un número de 11 dígitos
    
$resultado str_pad($resultado,11,0,STR_PAD_LEFT);

    
//bien, ahora los siguientes tres pedazos nada más se concatenan con puntos...
    
$resultado .= '.'.$pedazos[4].'.'.$pedazos[5].'.'.$pedazos[6].' ';

    
//hay que seguir...

    
return $resultado;
    }
//end function

?>
__________________
"Di no al Internet Explorer" -Proverbio Chino-
  #9 (permalink)  
Antiguo 28/04/2006, 07:53
Avatar de tonymontana  
Fecha de Ingreso: abril-2006
Mensajes: 27
Antigüedad: 18 años
Puntos: 0
Toda la información..

Amigos:
Les dejo tada la información, epero explicar bien ahora lo que necesito.

Puntos a tener en cuenta antes de efectuar la importación:
Los datos a importar pueden ser:

- Alfanuméricos, se podrán especificar letras y números. Si no posee información para completar estos campos, sólo podrá utilizar espacios, nunca la tecla TAB.
Los datos alfanuméricos deberán estar alineados siempre a la izquierda, del total de posiciones que requiere el formato.
De no completarse la totalidad del campo con los datos alfanuméricos, deberá utilizar como caracter de relleno espacios, mediante el uso de la tecla barra espaciadora del teclado.

Ejemplo: Longitud del campo: 5 caracteres, en caso de tener que completarse con dos datos, el mismo quedaría: B 4 _ _ _

-Numéricos deberán estar alineados siempre a la derecha, del total de posiciones que indica el formato. Si no posee información podrá utilizar tantos ceros como sea necesario.
-De no completarse la totalidad del campo con los datos numéricos, podrá utilizar como carácter de relleno ceros.

Ejemplo: Longitud del campo: 5 caracteres, en caso de tener que completarse con un solo número, el mismo quedaría: 0 0 0 0 1.

Todos los registros deben tener la misma longitud, no se pueden importar para un mismo archivo registros con diferente longitud.

Los espacios deben ser realizados con la barra espaciadora. Nunca se deberán utilizar las teclas Tab y Enter para dejar espacios. Se deberá tener en cuenta que en ningún campo se pueden dejar espacios utilizando dichas teclas.



CAMPOS --------------Desde------- Hasta--------------Longitud

campo1-------------------1---------- 6---------------------6
campo2-------------------7----------7---------------------20
campo3-------------------8----------27------------------- 20
campo4------------------28----------42------------------- 15
campo5------------------43----------57--------------------15
campo6------------------58----------58---------------------1
campo7------------------59----------73--------------------15
campo8------------------74----------75---------------------1
campo8------------------76------------ 90-----------------15

Tal como pides te paso lo que tengo:
1;1;4010.39.00.000F;0,1916;9999,99;1;9,58;7;0,00

y Debe quedar así:
00000114010.39.00.000F 000000000000,19000000009999,991000000000009,580700 0000000000,00

Fíjense esta captura, creo que está todo explicado:
w w w.pellegrinioscarv.com.ar/images/tablas.jpg

Agradecido por el tiempo y la ayuda!!

Última edición por tonymontana; 28/04/2006 a las 08:13
  #10 (permalink)  
Antiguo 28/04/2006, 08:41
Avatar de tonymontana  
Fecha de Ingreso: abril-2006
Mensajes: 27
Antigüedad: 18 años
Puntos: 0
Unamistad
Excelente!, realmente me asombras amigo. Me gustaría saber el 1% de lo que sabes sobre php!
¿Viste toda la información que publiqué? Hay una captura que talvez aporte mucho.
Estoy intentado seguir con lo que publicaste pero me cuesta. Lo que sé de PHP no me ayuda de mucho.

Seguimos..
  #11 (permalink)  
Antiguo 28/04/2006, 09:07
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 4 meses
Puntos: 1
Hola man!

No es para tanto, sólo son expresiones regulares. Sí, vaya que aporta el gráfico, aclara varias cosas. Sin embargo, no se ve a partir de qué cadena se llegó a ese código, de manera que volvemos a lo mismo, jeje.

Mira, por decir en tu ejemplo, nunca supe cómo el 1916 perdió ese 16 al momento de la conversión.

Ese tipo de cosas era importante saber. Ahí si puedes postear cómo vas o en qué andas perdido, cualquiera que se de una vuelta por este post te ayuda.
__________________
"Di no al Internet Explorer" -Proverbio Chino-
  #12 (permalink)  
Antiguo 28/04/2006, 09:53
Avatar de oskarL  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 499
Antigüedad: 19 años
Puntos: 2
Cita:
Iniciado por uamistad
nunca supe cómo el 1916 perdió ese 16
xDxDxD Lo mismo digo
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.
  #13 (permalink)  
Antiguo 28/04/2006, 10:06
Avatar de tonymontana  
Fecha de Ingreso: abril-2006
Mensajes: 27
Antigüedad: 18 años
Puntos: 0
Muchachos:
Ahora entiendo a que se referían. Hace un rato terminé de "escribir" el código adaptado a lo que me prefijaste uamistad, entendí la secuencia y creo haberlo hecho más o menos. Pero todavía no pobré nada. En bien llegue dentro de un par de horas les muestro el código y las dudas.

Agradecidos!!

Antonio
  #14 (permalink)  
Antiguo 28/04/2006, 10:08
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 4 meses
Puntos: 1
Vale man, saludos.

No es muy recomendable hacer un código grande y esperar a que al final milagrosamente funcione. Deberías ir probando cada tantas líneas que el código haga justamente lo que tú le estás pidiendo que haga.

Good luck.
__________________
"Di no al Internet Explorer" -Proverbio Chino-
  #15 (permalink)  
Antiguo 28/04/2006, 12:28
Avatar de tonymontana  
Fecha de Ingreso: abril-2006
Mensajes: 27
Antigüedad: 18 años
Puntos: 0
El código

Amigos:
Ignoren mi post anterior, lo he reemplazado por este.
El tema es que, aunque entieno el método de para generar los espacios me los ceros se me van reemplazando. Quisiera saber si esta expresión está bien:
// "1; 1; 4010. 39. 00. 000F; 0,1916; 9999,99; 1; 9,58; 7; 0,00"
$expresion_regular = "^($nl);($nl);($nl)\.($nl)\.($nl)\.($nl); ($nl); ($nl); ($nl); ($nl); ($nl); ($nl);.*";

Última edición por tonymontana; 28/04/2006 a las 14:47
  #16 (permalink)  
Antiguo 29/04/2006, 07:25
Avatar de tonymontana  
Fecha de Ingreso: abril-2006
Mensajes: 27
Antigüedad: 18 años
Puntos: 0
Voy muy bien

Amigos: Después de renegar un par de horas, casi he terminado el trabajo!
Excelente la ayuda que me han dado. Pero me he encontrado con una pequeña complicación.

Cuando utilizo str_pad, lo que hace es rellenar con espacios a la izquierda o a la deracha no? Bueno, el caso es que esto funciona a la perfección cuando trabajo con caracteres de una misma cantidad.

Por ejemplo, si utilizo str_pad para insertar los puntos de una linea de precios:

Producto1:.....................:$150
Producto2:.....................:$650
Producto3:.....................:$250

Ahora que pasa si quiero trabajar asi?

Producto1:..............:$15890,45
Producto2:...................:$14,65
Producto3:..............:$25087,14

Este es solo un ejemplo, lo que presiso saber cual es el metodo de trabajo en estos casos.

Saludos!
  #17 (permalink)  
Antiguo 29/04/2006, 07:57
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 4 meses
Puntos: 1
El primero parece un número fijo de datos.

El segundo se arregla con el mismo str_pad(), pues tú le dices con qué caracter quieres que se rellene, a la izq. o derecha, y cuántos se deberá ocupar en total.

Por decir:

Código PHP:
<?
$cantidad
[] = 458.02;
$cantidad[] = 45852.30;
$cantidad[] = 5;
$cantidad[] = 1000000;
for(
$i=0;$i<sizeof($cantidad);$i++)
    echo 
"<pre>Producto $i:".str_pad('$'.number_format($cantidad[$i],2,'.',','),15,'.',STR_PAD_LEFT)."</pre>\n";
?>
Imprime lo siguiente:
Código:
Producto 0:........$458.02
Producto 1:.....$45,852.30
Producto 2:..........$5.00
Producto 3:..$1,000,000.00
El formateado numérico se lo puse a parte para que se viera más elegante la función, =)
__________________
"Di no al Internet Explorer" -Proverbio Chino-
  #18 (permalink)  
Antiguo 29/04/2006, 08:13
Avatar de tonymontana  
Fecha de Ingreso: abril-2006
Mensajes: 27
Antigüedad: 18 años
Puntos: 0
Uamistad:
Entiendo mas o menos como funciona srt_pad, pero lo que no logro entender es como incorporar la nueva variable cantidad a lo que estoy haciendo.
Puedes incluirla en lo que ya tengo?
Mira:

Código PHP:
<?
function parseadora($entrada){
    
//Consideraciones:
    //Te ayudo con la primera parte, lo que sigue es seguir fabricando
    //la expresión regular correcta.

    //para ahorrar código, meteré esto que se usa con frecuencia en $nl
    //la parte de las letras la metí por la F que aparece en tu ejemplo
    
$nl "[0-9a-zA-Z]+";

    
//La siguiente línea comentada muestra qué es lo que estaría extrayendo la expr.reg.
    //                       "1;    1;   4010.   39.   00.   000F;     0,   1916;  9999,  99;      1;   9,58;     7;  0,00"
    
$expresion_regular "^($nl);($nl);($nl)\.($nl)\.($nl)\.($nl);($nl)\,($nl);($nl)\,($nl);($nl);($nl)\,($nl);.*";

    
//nos ayudará a separar los pedazos en $pedazos[1], $pedazos[2]...
    
ereg($expresion_regular,$entrada,$pedazos);
    
    
//CONSTRUYENDO POCO A POCO LA EXPRESIÓN 'RESULTADO'

    //concatenamos los primeros tres pedazos
    
$resultado $pedazos[1].$pedazos[2].$pedazos[3];

    
//ahora se rellenan con ceros a la izquierda hasta tener un número de 11 dígitos
    
$resultado str_pad($resultado,11,0,STR_PAD_LEFT);
    

    
//bien, ahora los siguientes tres pedazos nada más se concatenan con puntos...
    
$resultado .= '.'.$pedazos[4].'.'.$pedazos[5].'.'.$pedazos[6].'_____'.$pedazos[7];
    
    
//ahora se rellenan con ceros a la derecha hasta tener un número de 39 dígitos
    
$resultado str_pad($resultado,39,0,STR_PAD_RIGHT);
    
     
//bien, sigo insertando los pedazos.
    
$resultado .= ','.$pedazos[8];
    
    
//ahora se rellenan con ceros a la derecha hasta tener un número de 70 dígitos
    
$resultado str_pad($resultado,50,0,STR_PAD_RIGHT);
    
    
//bien, sigo insertando los pedazos.
    
$resultado .= ''.$pedazos[9];
    
$resultado .= ','.$pedazos[10];
    
$resultado .= ''.$pedazos[11];

    
    
//ahora se rellenan con ceros a la derecha hasta tener un número de 70 dígitos
    
$resultado str_pad($resultado,70,0,STR_PAD_RIGHT);
    
$resultado .= ''.$pedazos[12];

    
$resultado .= ','.$pedazos[13];
    return 
$resultado;
    }
//end function

?>
Aquí una muestra de como va quedando:
w w w.pellegrinioscarv.com.ar/control/operaciones-leo.php

Última edición por tonymontana; 29/04/2006 a las 08:25
  #19 (permalink)  
Antiguo 29/04/2006, 08:16
 
Fecha de Ingreso: abril-2006
Mensajes: 5
Antigüedad: 18 años
Puntos: 0
muy bueno, gracias
  #20 (permalink)  
Antiguo 29/04/2006, 09:01
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 4 meses
Puntos: 1
Cita:
pero lo que no logro entender es como incorporar la nueva variable cantidad a lo que estoy haciendo.
Mmm... eso no te entendí, ¿podrías ponerlo de otra forma?
__________________
"Di no al Internet Explorer" -Proverbio Chino-
  #21 (permalink)  
Antiguo 29/04/2006, 10:34
Avatar de tonymontana  
Fecha de Ingreso: abril-2006
Mensajes: 27
Antigüedad: 18 años
Puntos: 0
explicacion de la duda

uamistad:
Según lo que me enseñaste, tengo que utilizar:
$resultado = str_pad($resultado,15,0,STR_PAD_RIGHT);
o tambien para insertar desde la deracha:
$resultado = str_pad($resultado,15,0,STR_PAD_LEFT);

Sin embargo, esto me sirve cuando una linea tiene número fijo de datos. Porque cuando pongo números de varios dígitos los ceros "se corren". Siguiendo el mismo ejemplo, si quiero agregar 15 ceros de la izquierda pasa esto:

000000000000000878458.02
00000000000000058.02
00000000000000079874584.02

en vez de esto, que es lo que quiero:
000000000878458.02
000000000000058.02
000000079874584.02

Tu me dices que con el último código que me pasaste soluciono esto?
¿como lo integro a lo que ya tengo hecho?
  #22 (permalink)  
Antiguo 29/04/2006, 11:07
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 4 meses
Puntos: 1
Cita:
en vez de esto, que es lo que quiero:
000000000878458.02
000000000000058.02
000000079874584.02
Pues con la misma función.

Si tu número 878458 lo rescataste en la variable $var01...

y luego lo metes en un str_pad($var01,15,0,STR_PAD_LEFT);

te daría un "000000000878458"

y luego lo concatenas con el ".02" y te quedaría como en tu ejemplo, ¿no?

O bueno, eso fue lo que entendí de:

Cita:
si quiero agregar 15 ceros de la izquierda pasa esto:

000000000000000878458.02
00000000000000058.02
00000000000000079874584.02

en vez de esto, que es lo que quiero:
000000000878458.02
000000000000058.02
000000079874584.02
Si quieres agregar 15 ceros, pues nada más concatenas con una cadena de 15 ceros.

Pero si quieres que la línea te quede de un número fijo de caracteres y nada más rellenar con ceros hasta el tope, pues con str_pad.
__________________
"Di no al Internet Explorer" -Proverbio Chino-
  #23 (permalink)  
Antiguo 02/05/2006, 07:15
Avatar de tonymontana  
Fecha de Ingreso: abril-2006
Mensajes: 27
Antigüedad: 18 años
Puntos: 0
Uamistad:
Casi he terminado el código, algunos caracteres tendré que modificarlos a mano.
Mi duda ahora es, ¿como hago para convertir TODA la base de datos completa? Porque ahora solo trabajo con una línea. ¿Tengo que copiar todo el CSV dentro del código?

Muchas gracias.

Antonio
  #24 (permalink)  
Antiguo 02/05/2006, 07:53
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 4 meses
Puntos: 1
Claro que no, man.

No sé si tus líneas estén separadas por algún caracter o por un salto de línea.

Casi estoy oliendo que están separadas por salto de línea, así que la función file() te ayudará a convertir abrir el archivo en donde tienes tu CSV en un array en memoria que puedes manejar.

Lo que tendrías que hacer es recorrer ese array con un bucle y aplicarles a todas el mismo proceso.

En caso de que no estén separadas las líneas por un salto, sino por algún otro caracter (o combinación de ellos), abre el archivo en donde tienes tu base de datos con la función file_get_contents() y luego podrás obtener ese array con la función explode().
__________________
"Di no al Internet Explorer" -Proverbio Chino-
  #25 (permalink)  
Antiguo 02/05/2006, 08:04
Avatar de tonymontana  
Fecha de Ingreso: abril-2006
Mensajes: 27
Antigüedad: 18 años
Puntos: 0
Uamistad:
Querido! Creo que me estás subestimando demasiado! JA JA. Realmente piensas que yo se tanto?
¿me puedes escribir la línea de lo que tu estás diciendo? porque sinceramente no sé hacerlo o no te he entendido bien.

Agradecido..
Creo que tendré que enviarte chocolates como forma de pago. JE JE.
  #26 (permalink)  
Antiguo 02/05/2006, 10:20
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 4 meses
Puntos: 1
Jeje, no bronks, man, 'tons me voy más despacio. Es que luego pasa que la gente se ofende si explicas muchos detalles.

Mira, ahorita estás trabajando con una línea de código, ¿vale?

Esa línea de código la estás copiando de tu CSV y la estas pegando en algún procesador de texto. Luego ese texto es pasado al intérprete de PHP que se encarga de hacer 'la magia', jeje.

Ok, en este momento tienes tres opciones:

1) Copiar cada una de las 3,000 líneas de tu CSV en tu procesador de texto (una por una) para que PHP te arroje la cadena convertida y luego ésta cadena convertida la copias y la pegas en un documento nuevo en donde almacenes puras cadenas convertidas. Al finalizar de hacer lo mismo 3,000 veces, estará listo.

2) Como lo anterior no es eficiente, ahora puedes elegir entre copiar todas tus cadenas desde el CSV al procesador de texto (todas) y meterlas en un array así:

$arreglito[0] = "esta es la cadena CSV número 0";
$arreglito[1] = "esta es la cadena CSV número 1";
$arreglito[2] = "esta es la cadena CSV número 2";
$arreglito[3] = "esta es la cadena CSV número 3";
$arreglito[4] = "esta es la cadena CSV número 4";
... (etcétera)

Hay muchas formas de inicializar arreglos, esta no es la más fácil pero es la más clara (este renglón lo pongo por si llega alguien más y opina que no estoy inicializando el array de la forma más fácil, saliéndose por tanto del tema principal, ¿vale?)

Ok, seguimos.

Ahora, como puedes ver, eso tendrías que hacerlo 3,000 veces y también es algo cansado, aburrido y propenso a errores humanos.

3) Abre ese CSV con alguna función, tienes muchas para lograrlo (fopen, file, file_get_contents, ...)

Si por ejemplo abres tu archivo con la función file() tendrás lo mismo que en la opción #2 que hace un momento puse. Pero esto se generará dinámicamente, mira, sería así:

Código PHP:
<?
$arreglito 
file("tu_archivo_de_lineas.csv");
?>
Ahora ya tienes un arreglito de 3,000 líneas y puedes hacer lo que sea con ellas.

Para asegurarte que abriste bien tu archivo, mejor tomar precauciones:

Código PHP:
<?
$arreglito 
file("tu_archivo_de_lineas.csv");

if( !
$arreglito ) {echo "Archivo no se encontró"; exit;}
?>
Ahora, imprime en pantalla tus líneas para verlas todas (nada más para tus pruebas de cabecera):

Código PHP:
<?
$arreglito 
file("tu_archivo_de_lineas.csv");
if( !
$arreglito ) {echo "Archivo no se encontró"; exit;}

foreach(
$arreglito as $linea)
    echo 
$linea."<br/>\n";
?>
con eso deberías ver todas tus líneas en pantalla, ¿nada útil hasta ahora, cierto?

Ahora con un cambio minúsculo, deberías poder ver tus líneas a parseadas:

Código PHP:
<?
$arreglito 
file("tu_archivo_de_lineas.csv");
if( !
$arreglito ) {echo "Archivo no se encontró"; exit;}

foreach(
$arreglito as $linea)
    echo 
parseadora($linea)."<br/>\n";
?>
... pues ya has construido esa función "parseadora".

Bueno y ahora que ya puedes ver todas tus líneas en pantalla, ya las puedes copiar y pegar en algún nuevo archivo.

O bien, ya que puedes ver todas tus líneas parseaditas en pantalla, desde el mismo script puedes guardarlas en algún archivo destino. Ya es al gusto, jeje.

Prueba con eso, man. Suerte.
__________________
"Di no al Internet Explorer" -Proverbio Chino-
  #27 (permalink)  
Antiguo 02/05/2006, 13:17
Avatar de tonymontana  
Fecha de Ingreso: abril-2006
Mensajes: 27
Antigüedad: 18 años
Puntos: 0
Uamistad!
Realmente no sé como agradecerte "MAN" JE JE!! El código funcionó a la perfección! Excelente!. Quiero agradecerte la paciencia y el aguante que has puesto conmigo.
Bárbaro! Pienso que hasta un niño de 7 años puede entender lo que explicaste. Reaccionarios abtenerse.
EL trabajo está terminado, solo restan pulir algunos defectos que hace excel con el CSV, pero anda de maravilla. Sin tu ayuda imposible haberlo hecho.

Un fuerte abrazo.
Y ya sabes, cuando precises un Diseñador Gráfico o Maquetador WEB en CSS me llamas, ok?

Antonio
  #28 (permalink)  
Antiguo 02/05/2006, 13:29
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 4 meses
Puntos: 1
Cool man, de luxe. Qué bueno que te fue útil la explicación.

Cita:
Y ya sabes, cuando precises un Diseñador Gráfico o Maquetador WEB en CSS me llamas, ok?
Sure man! Si tienes Corel avisa, uno de los Cd's de Corel trae mapas y me interesa uno de un globo terráqueo en donde se ve México. Son en blanco y negro, sin nombres.

Saludos, buen día !
__________________
"Di no al Internet Explorer" -Proverbio Chino-
  #29 (permalink)  
Antiguo 03/05/2006, 12:17
Avatar de tonymontana  
Fecha de Ingreso: abril-2006
Mensajes: 27
Antigüedad: 18 años
Puntos: 0
Uamistad:
No tengo los CDS de corel, pero te puedo conseguir sin problemas imágenes:
http://cache.corbis.com/CorbisImage/...2-15539174.jpg
http://cache.corbis.com/CorbisImage/...B-025-0175.jpg
http://cache.corbis.com/CorbisImage/...I-099-0002.jpg
http://cache.corbis.com/CorbisImage/...2/BXP35326.jpg
http://cache.corbis.com/CorbisImage/...I-099-0004.jpg
http://cache.corbis.com/CorbisImage/...11/SF27970.jpg

Si te sirven, elige alguna y te la envío en buena calidad.

Saludos!!
Dime algo.

Antonio
  #30 (permalink)  
Antiguo 03/05/2006, 14:15
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 4 meses
Puntos: 1
Cool bro !

Esa http://cache.corbis.com/CorbisImage/...11/SF27970.jpg me gustó bastante y queda muy bien sobre el fondo negro que tengo mi header del sitio que ando haciendo.

Si me pudieras mandar esa pic sería mega cool, really.

Mmm... cómo le hacemos... te paso mi email.

Es [email protected], cambiando MISEUDONIMO por uamistad.

Thanks, =)
__________________
"Di no al Internet Explorer" -Proverbio Chino-
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:57.