Foros del Web » Programando para Internet » PHP »

Leer Ficheros Hasta Que La Linea Sea...

Estas en el tema de Leer Ficheros Hasta Que La Linea Sea... en el foro de PHP en Foros del Web. Hola a todos!!! Espero que me podais ayudar con un problemilla que tengo con el tratamiento de ficheros... Lo que quiero hacer es lo siguiente: ...
  #1 (permalink)  
Antiguo 10/10/2003, 08:06
 
Fecha de Ingreso: mayo-2003
Mensajes: 64
Antigüedad: 20 años, 10 meses
Puntos: 0
Leer Ficheros Hasta Que La Linea Sea...

Hola a todos!!!
Espero que me podais ayudar con un problemilla que tengo con el tratamiento de ficheros...
Lo que quiero hacer es lo siguiente:
Introducir un comando por teclado, que este comando escribirlo en un fichero, hasta aqui sin problemas...

$entrada=fopen("$Fichero","a+");
fwrite($entrada,$comando."\n");
fclose($entrada);

Posteriormente quiero leer este fichero hasta que una de las lineas sea OK o ERROR. Y lo que voy leyendo lo quiero dejar en una variable para al final sacarlo por pantalla. Los datos del fichero son por jemplo:
1111
2222
3333
OK
4444
5555
ERROR
6666
Total que habro el fichero para leerlo, pero no se como poner la condicion de salida, me explico si pongo while (fgets($entrada)!='OK' or (fgets($entrada)!='ERROR') al hacer esa comprobación me esta leyendo del fichero, y yo solo quiero decir que si eso que entre en el bucle y ya me encargare de leerlo y que lo escriba en la variable...pero claro no puedo decirle en el while que eso que ha leido me lo deje en una variable while($z=fgets($entrada)!='OK')...
Aparte como puede decir que me vaya dejando todo en ese variable??
$z=$z+gets($entrada)?????
Asi no, ya que lo he comprobado y me ha sacado al final un numero muy grande no la cadena de caracteres que quiero....

Siento haberme explicado tan mal....buf!!!
ESpero que me podais ayudar...
Gracias de antemano y saludo
FIss5
  #2 (permalink)  
Antiguo 10/10/2003, 08:22
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

El operador para concatenar cadenas es . (punto).

La solucion para tu while seria:
Código PHP:
$salida='';
while (((
$temp=fgets(..))!='ERROR') || (($temp=fgets(..))!='ERROR')) {
  
$salida=$salida.$temp;
}
$salida=$salida.$temp;
echo 
$salida
Ojo, que no se si funcionara si no hay 'ERROR' o 'OK' en el fichero. Y ahora mismo tampoco recuerdo si lo que devuelve fgets() incluye el retorno de carro. Si lo incluye, posiblemente no funcione la comparacion.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 10/10/2003, 08:41
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Bueno .. aclarar que la lectura de un archivo es secuencial .. DESDE que empieza hasta que termina (EOF) o bien hasta los bytes que indiques.

fgets() obtiene cada \n (línea) y te lo entrega...

Usa condicionales y bucles for() .. de todas formas has de leer el archivo secuencialmente una vez para decidir si existen esas cadenas en el archivo y otra para procesarlo si existen ..así que, mejor hazlo todo en una pasada ..

Código PHP:
<?
$handle 
fopen ("inputfile.txt""r");
while (!
feof ($handle)) {
     
// lees linea a linea tu archivo ..
    
$z fgets($handle4096);

    
// miras su valor ..
    
if ($z=="OK" or $z=="ERROR"){
       
// si encontró OK o ERROR .. sales del bucle (terminas de leer el archivo) y de paso borras de memora tu variable $z
       
unset ($z);
       break;
    } else {
       
// contatenas todo en tu variable .. Son strings (para PHP) así que usa el . (punto) si fuese cosa de "sumatorio" usa + en lugar de .
       
$z .= $z// ¿y .. lo quieres todo junto ..o con algún separador? ..
    
}
 }
fclose ($handle);
?>
Ahora otro detalle .. la función file() lee un archivo y mete su contendio en indices de un array .. siendo cada valor de cada indice una línea de tu archivo (entendiendose como línea a cada \n salto de líena que exista) ..

Por ende .. si file() ya te guarda el archivo en un array .. si quieres ver si tiene un indice de valor "OK" o "ERROR" ..sería cosa de:

Código PHP:
<?
// leer el archivo hacia un array...
$datos_lineas file ('archivo.txt');

// si está ese valor(es) en el array .. termino y elimino la variable (array) del archivo ..
if (in_array($datos_lineas,"OK") or in_array($datos_lineas,"ERROR")){
   unset 
$datos_lineas;
} else {
    
// sino, los concateno (el array sus valore) sobre un string (cadena) con el separador que quiera ... puede ser '' y así no usaría separador ..
   
$datos implode ('separador'$datos_lineas);
}

echo 
$datos;
?>
Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 09:11.