Ver Mensaje Individual
  #11 (permalink)  
Antiguo 18/10/2011, 14:16
Avatar de RAYONEGRO
RAYONEGRO
 
Fecha de Ingreso: enero-2008
Ubicación: Cumaná, Venezuela, Venezuela
Mensajes: 37
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: como puedo parsear un documento de texto con datos como este en php

Cita:
Iniciado por stramin Ver Mensaje
Se que no es la forma más correcta pero yo lo habría hecho así:

Código PHP:
Ver original
  1. //la variable donde esta toda la cadena se llama $cadena
  2. /*[["tipo","id","nombre","carpeta","extra1","extra2","extra3","extra4","public_name","public_desc","extra5","extra6","extra7"],["tipo","id","nombre","carpeta","extra1","extra2","extra3","extra4","public_name","public_desc","extra5","extra6","extra7"]]
  3. [["tipo","id","nombre","carpeta","extra1","extra2","extra3","extra4","public_name","public_desc","extra5","extra6","extra7"]]*/
  4.  
  5. //quito todas las "
  6. $cadena=str_replace('"','',$cadena);
  7. //cambio los ]][[ por ],[ "
  8. $cadena=str_replace(']]
  9. [[','],[',$cadena);
  10.  
  11. /*[[tipo,id,nombre,carpeta,extra1,extra2,extra3,extra4,public_name,public_desc,extra5,extra6,extra7],[tipo,id,nombre,carpeta,extra1,extra2,extra3,extra4,public_name,public_desc,extra5,extra6,extra7]] [[tipo,id,nombre,carpeta,extra1,extra2,extra3,extra4,public_name,public_desc,extra5,extra6,extra7]]*/
  12.  
  13. //Guardo cada registro en un arreglo llamado registros
  14. $registros=explode("],[",substr($cadena,2,-2));
  15.  
  16. /*
  17. tipo,id,nombre,carpeta,extra1,extra2,extra3,extra4,public_name,public_desc,extra5,extra6,extra7
  18. tipo,id,nombre,carpeta,extra1,extra2,extra3,extra4,public_name,public_desc,extra5,extra6,extra7
  19. tipo,id,nombre,carpeta,extra1,extra2,extra3,extra4,public_name,public_desc,extra5,extra6,extra7
  20. */
  21.  
  22. //Luego guardo los datos del cada registro
  23. $x=0;
  24. foreach($registros as $registro){
  25.     $campos[$x]=explode(",",$registro);
  26.     $x++;
  27. }
  28.  
  29. //Para comprobar que estan todos los datos se pueden mostrar así:
  30. for($f=0;$campos[$f][0];$f++){
  31.     echo "MOSTRANDO REGISTRO $f<br>";
  32.     foreach($campos[$f] as $campo) echo "$campo<br>";
  33. }

lo cual me devuelve esto:



Espero que se entienda el método

al final es un explode( de un explode())
justo cuando iba a empezar de nuevo a hacerlo, pero siguiendo los tips de maycolalvarez, me muestras este codigo que me ha ayudado mucho, y aunque al principio me di cuenta que uno de los datos no me lo tomaba bien(extra4) ya que dentro de este se guardan colores separados por comas, el codigo que pusiste, al borrar las comillas tomaba cada color como otro valor mas fuera del campo, pero ya eso es cuestion de modificar un poco y al menos gracias a ti y a maycolalvarez por intentar ayudarme ya puedo leer los datos de este archivo (que tantos dolores de cabeza me ha dado a la hora de intentar parsear) correctamente, ahora ya solo me queda hacerle algunas modificaciones y pasar todos esos datos a una base de datos

mil gracias a los 2, un saludo y si vuelvo a necsitar ayuda ya les avisare