Foros del Web » Programando para Internet » PHP »

Automatizacion, lectura de txt y escritura en DB

Estas en el tema de Automatizacion, lectura de txt y escritura en DB en el foro de PHP en Foros del Web. Buenas!!! bien, les comento el proceso, a ver si es posible. Tengo una aplicacion. Esta tiene que leer cada media hora un archivo TXT e ...
  #1 (permalink)  
Antiguo 04/11/2005, 06:59
 
Fecha de Ingreso: diciembre-2004
Mensajes: 197
Antigüedad: 13 años
Puntos: 1
Automatizacion, lectura de txt y escritura en DB

Buenas!!!

bien, les comento el proceso, a ver si es posible.
Tengo una aplicacion. Esta tiene que leer cada media hora un archivo TXT e interpretarlo para tomar sus datos y subirlos a una base de datos, para que luego sean vistos por usuarios en el site. Se que se puede hacer en JSP, pero que me dicen de PHP??

Sera posible que el PHP interprete el archivo .txt??

Gracias desde ya1!!!!


Ariel.-
__________________
Diseñador y Desarrolador en Proyecto81 WebStudio
  #2 (permalink)  
Antiguo 04/11/2005, 07:37
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pues si .. se puede con PHP ..

En principio PHP puede leer un archivo -en el servidor- vía funciones:

file() y afines
www.php.net/file

El hecho de que ese script PHP se ejecute cada cierto tiempo de forma desatendida podrías usar un "Cron Job" (linux) para lanzar dicha ejecución (o una "Tarea programada" de Windows).

Un saludo,
  #3 (permalink)  
Antiguo 04/11/2005, 09:51
 
Fecha de Ingreso: noviembre-2005
Mensajes: 4
Antigüedad: 12 años, 1 mes
Puntos: 0
Pregunta

Para la aplicacion que yo estoy programando tengo que recoger los datos de un txt, mis datos estan separados por comas, pongo un ejemplo para que puedas ver como los tengo:

Cita:
50,19,1,0,23/04/2004
51,7,1,0,23/04/2004
52,4,1,1,23/04/2004
52,15,1,1,23/04/2004
53,20,1,1,21/04/2004
53,20,1,1,14/04/2004
54,19,1,1,13/04/2004
55,19,1,1,13/04/2004
56,3,1,0,15/04/2004
57,19,1,1,14/04/2004
Y lo que hago es crar una tabla en una base de datos, separarlos e introducirlos en mysql, te pongo un trozo de codigo para que veas como lo hago.

Código PHP:
$NombreTabla2="StocksPruebas";


mysql_select_db($NombreTabla2);

$query="CREATE table $NombreTabla2 (id INT 
UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, IdCliente2 VARCHAR(200), IdGas TEXT(200), NumBotellasEntregadas TEXT(200), NumBotellasDevueltas TEXT(200), FechaEntrega TEXT(200))"

 
/* Comprobamos que efectivamente se ha creado bien */

if(mysql_query ($query )) {
    
    
/*print ("");*/

} else  {    
    print (
"La tabla no se ha podido crear.<br>");



/* Extraemos los datos de Stocks.txt */


$TheFile2="stocks.txt";

$Open2=fopen($TheFile2"r");

if (
$Open2) {
    
    
$Data2file ($TheFile2);
    
    
$NumFil2=count($Data2);
    
/*print ("<br><br>Numero de filas es: $NumFil2<br><br>");*/
    

        
     
for ($n=0;$n<$NumFil2;$n++){
                
        
/* convertimos string que hay dentro de data en un array */
/* hacemos un explode con "," para separar los campos*/
        
        
$GetLine2=explode(",",$Data2[$n]);
        
        
$IdCliente2[]=$GetLine2[0];
        
$IdGas[]=$GetLine2[1];        
        
$NumBotellasEntregadas[]=$GetLine2[2];
        
$NumBotellasDevueltas[]=$GetLine2[3];
                 
$FechaEntrega[]=$GetLine2[4];
    }

$j=0;

for (
$n=0$ncount($IdCliente2);$n++){
            
                
$query2 =" insert into $NombreTabla2 values
('','$IdCliente2[$j]','$IdGas[$j]','$NumBotellasEntregadas[$j]','$NumBotellasDevueltas[$j]','$FechaEntrega[$j]')"
;


$result2=mysql_query ($query2);

if (
$result2) {
    
/*    print ("se ha creado la tabla<br><br><br>");*/
    
} else {
    
    print (
"Algo ha fallado<br><br>");
    
    }
        
        
$j++;
    }

        


Eso es lo que yo hago y me va perfectamente, no se si es lo que necesitas, pero espero que te sirva de ayuda.

Un saludo
  #4 (permalink)  
Antiguo 04/11/2005, 11:44
 
Fecha de Ingreso: diciembre-2004
Mensajes: 197
Antigüedad: 13 años
Puntos: 1
Buenisimo!!!

La verdad pense que era mucho mas complejo... mucho mas

igual no tengo mucha idea de como programar eso, vere de ponerme a investigar.

Por otro lado, yo tengo que tranajar con archivos planos de archo fijo, mas que con comas. Tengo un programa que los genera asi.

Buenisimo de todas formas magarca85 y Cluster, gracias por la ayudita!!!!

Igual sigo revisando este topic por si cae algo nuevo, hasta unos ratos!!!
__________________
Diseñador y Desarrolador en Proyecto81 WebStudio
  #5 (permalink)  
Antiguo 04/11/2005, 11:53
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si quieres alguna orientación más atinada deberías de indicar el formato que tiene los datos que trabajas y que es lo que deseas hacer exactamente ..

Un saludo,
  #6 (permalink)  
Antiguo 04/11/2005, 12:35
 
Fecha de Ingreso: diciembre-2004
Mensajes: 197
Antigüedad: 13 años
Puntos: 1
A ver como viene la cosa...

ups...

no se a que te refieres con el formato, mil perdones...

a ver... lo poco que se de esta aplicacion es que estos archivos son organizados a traves de un XLS que indica los anchos que tienen que tener las columnas, luego, por ejemplo el PHP deberia leer desde la columna 1 a la 8 para ciertos datos, de la 9 a la 12 para otros y asi...
esa info seria enviada luego a la base para ser levantada por el usuario...

palabras de mi superior:
"hay que usar esas funciones fopen, crear un cursor y luego usa esa funcion explode, pero ahi hay que ver de leer el archivo por secciones, del character 1 al 10, del 11 al 20, etc, etc"

algo asi seria el funcionamiento de la aplicacion.

Agradezco y sigo en contacto!!
__________________
Diseñador y Desarrolador en Proyecto81 WebStudio
  #7 (permalink)  
Antiguo 05/11/2005, 10:12
 
Fecha de Ingreso: noviembre-2005
Mensajes: 4
Antigüedad: 12 años, 1 mes
Puntos: 0
Cuando se dice el formato supongo que se refiere a la forma en que tienes que guardar el los txt, en mi caso yo los tengo que recuperar y como los tengo separados por comas como ya puse en el ejemplo utilizo un explode por comas

Código PHP:
$GetLine=explode(",",$Data[$n]); 
"," -> para mi caso como estan separados por comas , lo pongo asi, si fueran ; por ejemplo lo pondrías ";" asi te separa los datos que estan separados por punto y coma, si quisieras un null pues pondrias " " ....etc

En tu caso creo que se trata de escribir en un txt, entonces lo que tendrias que hacer es un:

Código PHP:
$Open=fopen($TheFile"r"); /* como yo lo que hago es leer no escribir 
                                          tengo una r*/


$Open=fopen($TheFile"w"); /*este seria tu caso por que es para 
                                          escribir, w*/ 
Y para introducir en el txt varios datos relacionados entre si lo que deberias hacer es un implodey separarlos de la forma que quieras:

Código PHP:
$GetLine=implode(",",$Data[$n]); 
O como tu quieras organizartelos.Si ya te genera lo que tienes que introducir con un tamaño determinado no tengas ningun problrma ala hora de introducirlos, puedes hacerlo como quieras.
No se si te servira de algo la verdad es que no se si te he comprendido bien.
Espero que te sirva.
Un beso

Última edición por magarca85; 05/11/2005 a las 10:23
  #8 (permalink)  
Antiguo 05/11/2005, 16:23
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cuando hablo de "formato" .. es que pongas aquí exactamente un extracto de ese archivo de texto plano que contiene los datos y que expliques que es lo que contiene .. como se indentifican los datos en el mismo.

Algo de esto ya lo has medio comentado cuando dices cosas como:
"ver de leer el archivo por secciones, del character 1 al 10, del 11 al 20, e"

pero .. si bien eso sería una solución para un formato "rigido" de esos datos .. tal vez exista algún patrón en el mismo tipo "campos separados por comas u otro caracter ..." o cosas así que facilitaría mucho el proceso "(parseado)" de ese archivo para su proceso.

Un saludo,
  #9 (permalink)  
Antiguo 07/11/2005, 07:35
 
Fecha de Ingreso: diciembre-2004
Mensajes: 197
Antigüedad: 13 años
Puntos: 1
Buenas buenas...
Bien. Estos son los archivos.
El primero y segundo, son los crados TXT por el programa donde se insertan los datos.
El tercero es una estructura que se le da al webmaster para que entienda como estan "cifrados" los datos. Este XLS es una guia unicamente, no lo usa ninguna aplicacion o base de datos.

(recomiendo "click derecho, guardar destio como...")
http://www.freewebs.com/daerion/items.TXT
http://www.freewebs.com/daerion/cabezal.TXT
http://www.freewebs.com/daerion/estructuras.xls

El sistema funciona asi (genere unos archivos en otra aplicacion similar para que se hagan una idea):

- En un programa que hay en funcionamiento un proveedor se cargan datos de ordenes de venta y demas cosas por el estilo para un cliente. Estos archivos salen en forma de archivos planos seccionados, como habia dicho antes, por columnas. Esto es algo que no puedo cambiar, pues es externo a mi aplicacion PHP.
- Una aplicacion automatica del programa exporta esos datos en dos archivos TXT (cabezas e Items) al servidor de la web.
(y aca entra en juego nuestro sistema PHP)
- Una aplicacion web automatica registra cada 10 o 20 minutos si hay cambios en los TXT almacenados en el server, si los hay, sigue con...
- Se insertan los datos nuevos en la base de datos del servidor
- el cliente entra a la web y lee a traves de una consulta los datos ingresados por su proveedor de servicios.

Eso es todito...

:0)

Espero haber sido bastante claro... byebyebye!!!

Ariel.-
__________________
Diseñador y Desarrolador en Proyecto81 WebStudio
  #10 (permalink)  
Antiguo 07/11/2005, 10:07
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Ahora .. concretando un poco más ..

¿El separador de "campos" de esos archivos de texto plano que caracter es? .. Parece un "tabulador" (\t) ..

Con ese dato concreto conocido .. podrás aplicar los file() (para leer el archivo "linea a linea") .. los explode() para tomar los "campos" de ese "registro" encontrado y así ir creando tus sentencia SQL (INSERT?) en tu BD para ir creando registros ..

Es cosa ya que te pongas a trabajar tu ahora ..y con algún problema más concreto lo veamos por aquí.

Un saludo,
  #11 (permalink)  
Antiguo 07/11/2005, 11:47
 
Fecha de Ingreso: diciembre-2004
Mensajes: 197
Antigüedad: 13 años
Puntos: 1
Okis...

ok, os agradezco.
Vere que sale de todo esto... lo masticare un poco hasta entenderlo bien, asi puedo largarme a trabajar...
les agradezco nuevamente y nos vemos prontito!!!

Ariel.-
__________________
Diseñador y Desarrolador en Proyecto81 WebStudio
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 05:26.