Inicio > PHP > davidcortesb > recoleccion de datos de archivo .txt con php

recoleccion de datos de archivo .txt con php

Experto:
Usuario:
Fecha: 06/11/2008
Valoración: (5,00 sobre 5) Categoría: PHP
04/11/2008
marrito, usuario preguntando en PHP
Usuario
Hola amigo, porfa necesito que me ayudes.
Lo que pasa es que anteriormente ya me habias apoyado en la forma de como leer un archivo .txt y guardarlo los datos en un arreglo, que funciona perfectamente.
Ahora lo que pasa es que en mi archivo .txt recibo 5 datos obligatorios que los guarda en una arreglo por que estan en la misma linea.
Pero de ahi vienen bloques de equipos de 4 datos, por ejemplo: nombre, marca, vida util, observaciones, pero es dinamico por que se pueden generar N bloques de equipos, dependiendo de una interfaz anterior que genera la plantilla en html y la platilla genera el archivo .txt.
Ahora el problema que tengo es que necestio guardar los datos de los equipos en un arreglo de variables variables para no generar tanto codigo.
por ejemplo:
$linea = fgets($file);
$equipo = explode(";", $linea);
Eso es lo que hago para leer una linea en el archivo .txt.
Pero como le hago para genera que en el arreglo $equipo se cree otro arreglo con la variable $nombre y ahi se guarden todos los nombre de los equipos depedendiendo de los que hayan sido y luego otra con el nombre $marca que guarde todas las marcas de los equipos y asi de la misma manera con los demas.
Espero me hayas entendido y me puedas ayudar gracias.  
 
04/11/2008
marrito, experto respondiendo en PHP
Experto
Hola,
entiendo que la línea tiene un número indeterminado de grupos de 4 elementos. Si es así, puede hacerse por ejemplo:
$equipo = explode(";", $linea);
for ($i=0, $j=0; $i<count($equipo); $i += 4, j++) {
  $nombre[$j] = $equipo[$i];
  $marca[$j] = $equipo[$i + 1];
  $vidautil[$j] = $equipo[$i + 2];
  $obs[$j] = $equipo[$i + 3];
}
Saludos.
David Cortés Braña
04/11/2008
marrito, usuario preguntando en PHP
Usuario
Hola amigo disculpa que te vuelva a molestar pero es que me marca error mira esto es lo que tengo en archivo .txt las lineas solamente son ejemplo de simbolo de enter:
Patito;25 sur;Puebla;Puebla;México;69004734;Karen Guadalupe;hola@hotmail.com
--------------------
TransPot-5-69-23-350-150/C1-A-A1;Sony;30;30,000;xxxxxxxxxxxxxxxxx;Interruptores-5-69-23-350-150/C1-A-A1;Panasonic;20;20,000;yyyyyyyyyyyyyy;Cuchillas-5-69-23-350-150/C1-A-A1;Vaio;10;10,000;zzzzzzzzzzzzzzzzz
--------------------
60,000
La sugunda fila es la que es dinamica por que pueden ser pocos o muchos equipos con bloques de carcateriticas de 5 datos.
Asi tengo mi codigo:
<?php
// abriendo el archivo de texto que se encuentra en el mismo directorio
//que los archivos html y php
$file = fopen ("c://datos.txt", "r");
$linea = fgets($file);
$datos = explode(";", $linea);
$linea = fgets($file);
$equipo = explode(";", $linea);
for ($i=0,$j=0;$i<count($equipo);$i+=5,j++)
{
$descricpionCorta[$j] = $equipo[$i];
$nombre[$j] = $equipo[$i +1];
$marca[$j] = $equipo[$i + 2];
$vidautil[$j] = $equipo[$i + 3];
$obs[$j] = $equipo[$i + 4];
}
$linea = fgets($file);
$costo = explode(";", $linea);
echo $costo[0];
//obtenido los datos del archivo cerramos el archivo
fclose ($file);
?>
Pero me marca error, porfa ayudame con este probleimita.
Gracias, saludos 
05/11/2008
marrito, usuario preguntando en PHP
Usuario
k onda amigo, nuevamente disculpa que te siga molestando.
Porfa olvida lo anterior por que las cosas ya me las cambiaron un poco, solucione el problema que me marcaba y efectivamente se cumplia lo del problema que te comentaba, pero esta vez tiene que ser alcontrario jeje. checa este ejemplo:
$linea = fgets($file);
$equipo = explode(";", $linea);
$j=0;
$x=0;
$i=0;
$variable[$j][$x] = $equipo[$i];
$x++;
$variable[$j][$x] = $equipo[$i + 1];
$x++;
$variable[$j][$x] = $equipo[$i + 2];
$x++;
$variable[$j][$x] = $equipo[$i + 3];
$x++;
$variable[$j][$x] = $equipo[$i + 4];
echo $variable[0][0];
echo '<br>';
echo $variable[0][1];
echo '<br>';
echo $variable[0][2];
echo '<br>';
echo $variable[0][3];
echo '<br>';
echo '<br>';
echo $variable[0][4];
Esto lo hace pero solamente para el primer equipo y sus caracteristicas osea que ahora en el vector [0] de la posicion [0],[1],[2],[3] y [4] se guarda todo lo del primero, eso si lo hace pero solamente para el primero. como le puedo hacer para los demas y queden de la siguiente forma en el vector [1] de la posicion [0],[1],[2],[3] y [4] y asi dependiendo del numero de equipos que entren, recuerdas que te habia comentado que son dinamicos los bloques.
Gracias y saludos 
05/11/2008
marrito, experto respondiendo en PHP
Experto
Hola,
sólo tienes que adaptar el código original que te dí:
<?php
// abriendo el archivo de texto que se encuentra en el mismo directorio
//que los archivos html y php
$file = fopen ("c://datos.txt", "r");
$linea = fgets($file);
$datos = explode(";", $linea);
$linea = fgets($file);
$equipo = explode(";", $linea);
for ($i=0,$j=0,$k=0;$i<count($equipo);$i+=5,j++,$k=0)
{
$variable[$j][$k++] = $equipo[$i];
$variable[$j][$k++] = $equipo[$i +1];
$variable[$j][$k++] = $equipo[$i + 2];
$variable[$j][$k++] = $equipo[$i + 3];
$variable[$j][$k++] = $equipo[$i + 4];
}
$linea = fgets($file);
$costo = explode(";", $linea);
echo $costo[0];
//obtenido los datos del archivo cerramos el archivo
fclose ($file);
?>
Saludos.
David Cortés Braña
05/11/2008
marrito, usuario preguntando en PHP
Usuario
Hola amigo excelente solucion te lo agradezco, pero una ultima pregunta.
Mira en mi archivo .txt ahora aordeno de esta manera los datos:
Patito;25 sur;Puebla;Puebla;México;69004734;Karen Guadalupe;hola@hotmail.com
TransPot-5-69-23-350-150/C1-A-A1;Sony;30;30,000;xxxxxxxxxxxxxxxxx
Interruptores-5-69-23-350-150/C1-A-A1;Panasonic;20;20,000;yyyyyyyyyyyyyy
Cuchillas-5-69-23-350-150/C1-A-A1;Vaio;10;10,000;zzzzzzzzzzzzzzzzz 
----------
60,000 
 
Y mi codigo esta de esta forma:
 
<?php
$file = fopen ("c://datos.txt", "r");
$linea = fgets($file);
$datos = explode(";", $linea);
$j=0;
$i=0;
while (($linea = fgets($file)) && (fgets($file)!='----------'))
{
$equipo = explode(";", $linea);
$x=0;
$variable[$j][$x] = $equipo[$i];
$x++;
$variable[$j][$x] = $equipo[$i + 1];
$x++;
$variable[$j][$x] = $equipo[$i + 2];
$x++;
$variable[$j][$x] = $equipo[$i + 3];
$x++;
$variable[$j][$x] = $equipo[$i + 4];
$x++;
$variable[$j][$x] = $equipo[$i + 5];
$j++;
}
$costo = explode(";", $linea);
echo $costo[0];
//obtenido los datos del archivo cerramos el archivo
fclose ($file);
?>
Como vez con el while indico que siga leyendo lineas hasta que no se topo con las 10 rayitas(----------) y de ahi se guarde el ultimo dato en un vector diferente.
Si hace lo de leer varias lineas y los va guardando sean los que sean pero no se de tiene al encontrar las 10 rayitas(----------) osea que el otro vector no fuciona por lo mismo del que while no para como le puedo hacer???
Gracias por toda tu ayuda y disculpa tantas preguntas.
Saludos.
05/11/2008
marrito, experto respondiendo en PHP
Experto
Hola,
al final tienes que leer la línea del costo que no la lees, i una vez leída no le tienes que aplicar el explode puesto que la línea sólo tiene un dato. Otro error es que en la línea del while ejecutas fgets dos veces, con lo que pierdes una línea de cada dos:
<?php
$file = fopen ("c://datos.txt", "r");
$linea = fgets($file);
$datos = explode(";", $linea);
$j=0;
$i=0;
$linea = fgets($file);
while ($linea && $linea != '----------')
{
$equipo = explode(";", $linea);
$x=0;
$variable[$j][$x] = $equipo[$i];
$x++;
$variable[$j][$x] = $equipo[$i + 1];
$x++;
$variable[$j][$x] = $equipo[$i + 2];
$x++;
$variable[$j][$x] = $equipo[$i + 3];
$x++;
$variable[$j][$x] = $equipo[$i + 4];
$x++;
$variable[$j][$x] = $equipo[$i + 5];
$j++;
$linea = fgets($file);
}
$costo = fgets($file);
echo $costo;
//obtenido los datos del archivo cerramos el archivo
fclose ($file);
?>

Saludos.
David Cortés Braña
05/11/2008
marrito, usuario preguntando en PHP
Usuario
Hola amigo disculpa que te siga molestando, pero hace lo mismo, no se cierra el while ni por que ya encontro las 10 rayitas(----------). Siguiendo el ejemplo anterior del archivo .txt:
echo $variable[3][0];// Aqui mete las 10 rayitas(----------)
Entonces ahi deberia de acabar el ciclo del while, pero no lo hace por que el ultimo dato lo guarda:
echo $variable[4][0];// Aqui mete el ultimo valor "60,000"
Y pues es dato deberia de entrar en el siguiente vector:
$costo = fgets ($file);
echo $costo;
 
Porfa ayudame ya es lo ultimo, gracias por todo tu apoyo.
Saludos
06/11/2008
marrito, experto respondiendo en PHP
Experto
Hola,
deberías debugar un poco tu código. No puede ser que a cada tropiezo no sepas continuar. Si el bucle no se detiene, es porque la condición no se cumple. Por lo tanto, las rayitas de la condición no són exactamente iguales a las de tu fichero. Deberías averiguar eso y solucionarlo.
Te recomiendaría que no usases un sistema como el de las rayitas que es muy proclive al error. De todas formas, ya que lo usas, te recomendaría que pusiéses una condición más débil. Por ejemplo:
while ($linea && susbstr($linea, 1, 8) != str_repeat("-", 8))
Saludos.
David Cortés Braña
06/11/2008
marrito, usuario preguntando en PHP
Usuario
Gracias por todo, ya le habia encontrado solucion y disculpa por tantas molestias.
Cuidate y de corazon que estes de lo mejor
Saludos.
Más opciones
Enlaces patrocinados