Foros del Web » Programando para Internet » PHP »

Leer archivo plano de acuerdo a estructura

Estas en el tema de Leer archivo plano de acuerdo a estructura en el foro de PHP en Foros del Web. Saludos. Tengo un archivo que me envian por internet con el siguiente formato: Codigo Char(10) Negocio Char(8) Monto numeric(10) Fecha Char(10) Y el archivo que ...
  #1 (permalink)  
Antiguo 23/01/2006, 07:55
 
Fecha de Ingreso: febrero-2005
Mensajes: 650
Antigüedad: 12 años, 9 meses
Puntos: 2
Pregunta Leer archivo plano de acuerdo a estructura

Saludos.

Tengo un archivo que me envian por internet con el siguiente formato:
Codigo Char(10)
Negocio Char(8)
Monto numeric(10)
Fecha Char(10)

Y el archivo que envian es asi:
Codigo Negocio Monto Fecha
1234 XXXX 1234789 01/01/2006
4321 XYXY 12347 01/05/2006
......

En PHP como hago para leer cada campo y a partir de la segunda fila???
Si estuviera delimitado por coma o algo seria mas facil....

Agradezco la ayuda y sugerencias que me puedan brindar...
  #2 (permalink)  
Antiguo 23/01/2006, 08:51
Avatar de JorgitoAlfajor  
Fecha de Ingreso: enero-2006
Mensajes: 152
Antigüedad: 11 años, 11 meses
Puntos: 1
Creo que deberias utilizar la función file() para recuperar el archivo como una matriz de líneas y luego utilizar explode() en cada linea para separar los campos, considerando que estan separados por un espacio en blanco:

Código PHP:
$archivo file("tu_archivo");

for(
$i=1$i < (sizeof($archivo)); $i++) {
    
$campos explode(" ",$archivo[$i]);
    
$campo1 $campos[0];
    
$campo2 $campos[1];
    
$campo3 $campos[2];
    
$campo4 $campos[3];
    ......

    } 
Espero que te sirva. Saludos
__________________
¿Se me entiende la letra?
  #3 (permalink)  
Antiguo 23/01/2006, 09:55
Avatar de nosoynadie  
Fecha de Ingreso: noviembre-2005
Ubicación: dando vueltas por aquí
Mensajes: 206
Antigüedad: 12 años
Puntos: 1
Hola,

suponiendo que los datos los tienes en el documento 'texto.txt' puedes utilizar algo de esto:
Código PHP:
$arr file("texto.txt");
if(isset(
$arr)){
    foreach(
$arr as $c=>$v){
        
// separamos, mediante 'el espacio en blanco' cada uno de los datos que viene en cada línea y los guardamos en el array $datos
        // CUIDADO con usar como separador de campos el espacio en blanco. Considera la posibilidad de utilizar otro.
        
$datos explode(" "$v);
    }

__________________
http://www.nosoynadie.net/
  #4 (permalink)  
Antiguo 23/01/2006, 10:32
 
Fecha de Ingreso: febrero-2005
Mensajes: 650
Antigüedad: 12 años, 9 meses
Puntos: 2
No me sirve...

Saludos.

Gracias por responder tan rapido, yo no he creado esa estructura asi, es un archivo que envian de otra organización; el explode(" ") no me sirve porque hay otro campo que esta el nombre del afiliado y esta separado por espacios entonces me va a tomar como si fueran n campos ej:
Julian Andres Garavito Tovar....
Son 4 campos mas cuando solo seria 1...

Agradezco la ayuda y sugerencias que me puedan brindar,
  #5 (permalink)  
Antiguo 24/01/2006, 12:59
 
Fecha de Ingreso: febrero-2005
Mensajes: 650
Antigüedad: 12 años, 9 meses
Puntos: 2
Nadie?????

Nadie sabe como hacer esto???
  #6 (permalink)  
Antiguo 24/01/2006, 13:05
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 12 años, 9 meses
Puntos: 33
De acuerdo

¿Las cadenas que te estan enviando viene separadas com algun "simbolo"?, si no te recomendaria que vinieran separadoa para que sea más fácil la manipulación de los datos.
  #7 (permalink)  
Antiguo 24/01/2006, 13:41
 
Fecha de Ingreso: febrero-2005
Mensajes: 650
Antigüedad: 12 años, 9 meses
Puntos: 2
El archivo lo envian de otro lado

Saludos mauled.

El problema es que ese archivo plano lo envian de una entidad que registran los consumos de los afiliados de la cooperativa y ellos no tienen simbolos para diferenciar de un campo a otro; se hablo con ellos pero dijeron que no era posible porque trabajan con el formato que especifique en el post principal.....

Necesito leer esos datos y validarlos...

Agradezco la ayuda que me estan brindando,
  #8 (permalink)  
Antiguo 24/01/2006, 14:53
Avatar de nosoynadie  
Fecha de Ingreso: noviembre-2005
Ubicación: dando vueltas por aquí
Mensajes: 206
Antigüedad: 12 años
Puntos: 1
hola gente,

tattojk creo que el siguiente código te puede ayudar pero OJO, sólo te funcionará si los datos siguen la estructura que nos indicas:

número texto texto ... texto texto número fecha

en cuanto cambie algo, el siguiente script fallará. Lo importante para que funcione es que siempre:

a. el primero campo sea el código
b. el último sea la fecha
c. el anteúltimo sea el monto

lo demás nos da igual porque entederemos que es el nombre.

Este es el código:

Código PHP:
<?php
$arr 
file("texto.txt");
if(isset(
$arr)){
    foreach(
$arr as $c=>$v){
        
$datos[] = explode(" "$v);
    }
    if(
count($datos)>0){
        foreach(
$datos as $c=>$v){
            
$solucion[$c]["codigo"] = trim(array_shift($v));
            
$solucion[$c]["fecha"] = trim(array_pop($v));
            
$solucion[$c]["monto"] = trim(array_pop($v));
            
$solucion[$c]["nombre"] = trim(implode(" "$v));
        }
        
// para mostrar los datos obtenidos
        
echo "<pre>";
            
var_dump($solucion);
        echo 
"</pre>";
    }
}
?>
¿Te vale? Ciao
__________________
http://www.nosoynadie.net/
  #9 (permalink)  
Antiguo 25/01/2006, 16:30
 
Fecha de Ingreso: febrero-2005
Mensajes: 650
Antigüedad: 12 años, 9 meses
Puntos: 2
No hay otra forma???????????

Saludos....

Desafortunadamente son 10 campos con estructura diferente char(8), etc...
Y la entidad se niega a ponerle un simbolo para identificar los campos

No se que hacerrr....

Ayuda.....
  #10 (permalink)  
Antiguo 25/01/2006, 16:33
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 12 años, 9 meses
Puntos: 33
¿No te sirvio el código que te puso nosoynadie?
  #11 (permalink)  
Antiguo 26/01/2006, 02:25
Avatar de nosoynadie  
Fecha de Ingreso: noviembre-2005
Ubicación: dando vueltas por aquí
Mensajes: 206
Antigüedad: 12 años
Puntos: 1
Hola,

creo que siguiendo la lógica utilizada por el ejemplo que te puse podrías solucionar tu problema. Si no te cambian el orden de los campo, cosa que no creo porque sería una guarrada por su parte, lo tienes solventado.

Si no lo vés ponme el listado de los 8 campos con un ejemplo y te preparo el código. Ciao
__________________
http://www.nosoynadie.net/
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 18:59.