Foros del Web » Programando para Internet » PHP »

como puedo parsear un documento de texto con datos como este en php

Estas en el tema de como puedo parsear un documento de texto con datos como este en php en el foro de PHP en Foros del Web. bueno, primero que nada un saludo a todos escribo porque llevo varios dias rompiendome el coco con un problema que tengo en php y es ...
  #1 (permalink)  
Antiguo 18/10/2011, 12:15
Avatar de RAYONEGRO  
Fecha de Ingreso: enero-2008
Ubicación: Cumaná, Venezuela, Venezuela
Mensajes: 37
Antigüedad: 16 años, 3 meses
Puntos: 0
como puedo parsear un documento de texto con datos como este en php

bueno, primero que nada un saludo a todos

escribo porque llevo varios dias rompiendome el coco con un problema que tengo en php y es que no tengo ni idea de como cojer datos de un archivo de texto, cuyos datos se guardan de la siguiente manera:

Nota: esto es solo un ejemplo de como se guardan los datos en el archivo original
Código:
[["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"]]
la idea de poder leer los datos de este archivo en php, ya sea mediante arrays, foreach, o no sea q se pueda hacer, es pasar todos estos datos a una base de datos y asi poder editarlo de manera mas facil desde una web y ahorrarme el tener que editarlo a mano y subirlo al host cada ves que le haga una actualizacion.

alguna idea de como se podria hacer? llevo dias tratando como hacerlo y no se me ocurre nada :L
  #2 (permalink)  
Antiguo 18/10/2011, 12:20
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: como puedo parsear un documento de texto con datos como este en php

consulta en el manual de PHP las funciones de cadenas, como explode e implode.

el formato de ese archivo parece JSON, podrias intentar con json_decode, digo "parece", porque le falta para ser un json funcional
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 18/10/2011, 12:28
Avatar de RAYONEGRO  
Fecha de Ingreso: enero-2008
Ubicación: Cumaná, Venezuela, Venezuela
Mensajes: 37
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: como puedo parsear un documento de texto con datos como este en php

ya se como funciona el explode y el implode y ya lo he intentado pero no se como hacer con dichas funciones sacar tantos datos al mismo tiempo ["dato1","dato2"...], solamente se como parsear un .ini usando el explode pero de la manera q necesito me hago un 8 :L
  #4 (permalink)  
Antiguo 18/10/2011, 12:32
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: como puedo parsear un documento de texto con datos como este en php

con explode puede hacerse, no veo tu inconveniente
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #5 (permalink)  
Antiguo 18/10/2011, 12:34
Avatar de RAYONEGRO  
Fecha de Ingreso: enero-2008
Ubicación: Cumaná, Venezuela, Venezuela
Mensajes: 37
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: como puedo parsear un documento de texto con datos como este en php

Cita:
Iniciado por maycolalvarez Ver Mensaje
con explode puede hacerse, no veo tu inconveniente
que se que con explode se puede pero que llevo dias tratando de hacerlo y aun no lo consigo
  #6 (permalink)  
Antiguo 18/10/2011, 12:36
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: como puedo parsear un documento de texto con datos como este en php

entonces, muestra tú código, así es más fácil, porque esa estructura tan simple yo la puedo hacer incluso con json_decode linea por línea !
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #7 (permalink)  
Antiguo 18/10/2011, 12:44
Avatar de RAYONEGRO  
Fecha de Ingreso: enero-2008
Ubicación: Cumaná, Venezuela, Venezuela
Mensajes: 37
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: como puedo parsear un documento de texto con datos como este en php

y mas o menos como lo harias? porque estoy viendo en el manual de php la funcion json_decode y no veo que se paresca mucho a los datos que intento parsear, y tristemente no puedo colocar codigo porque cada ves q lo intento hacr no llego ni a la 4 linea porque no tengo idea de como hacerlo para un tipo de datos como este :L
  #8 (permalink)  
Antiguo 18/10/2011, 12:50
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: como puedo parsear un documento de texto con datos como este en php

no, claro, como te dije se "parece" a un json, mi idea es separar primero las líneas en un array, quitar los [] extra y allí poder aplicar json_decode, pero tambien podría aplicar otro explode con las comas (,)

la idea general es realizar un ciclo por linea, e ir separando línea por linea, en un ciclo
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #9 (permalink)  
Antiguo 18/10/2011, 13:31
Avatar de RAYONEGRO  
Fecha de Ingreso: enero-2008
Ubicación: Cumaná, Venezuela, Venezuela
Mensajes: 37
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: como puedo parsear un documento de texto con datos como este en php

bueno no se si sirva de algo pero hechale un ojo al archivo original que quiero parsear.

ahora sabiendo esto, dices que linea por linea podria ser x cada coma "],[" hacer un "\n"
ejemplo:
"],
["

y luego por cada linea leer los datos dentro de los [] separandolos por las comas dentro de los mismos?, y eliminar los [] que estan demas (vease "..."]][["tipo"],...) para evitar errores? mmm podria intentarlo a ver como me va, aunque si tienes algun otro consejo o idea que decir seria demasiado bien (Y)
  #10 (permalink)  
Antiguo 18/10/2011, 13:35
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: como puedo parsear un documento de texto con datos como este en php

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:

Cita:
MOSTRANDO REGISTRO 0
tipo
id
nombre
carpeta
extra1
extra2
extra3
extra4
public_name
public_desc
extra5
extra6
extra7
MOSTRANDO REGISTRO 1
tipo
id
nombre
carpeta
extra1
extra2
extra3
extra4
public_name
public_desc
extra5
extra6
extra7
MOSTRANDO REGISTRO 2
tipo
id
nombre
carpeta
extra1
extra2
extra3
extra4
public_name
public_desc
extra5
extra6
extra7
Espero que se entienda el método

al final es un explode( de un explode())
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #11 (permalink)  
Antiguo 18/10/2011, 14:16
Avatar de RAYONEGRO  
Fecha de Ingreso: enero-2008
Ubicación: Cumaná, Venezuela, Venezuela
Mensajes: 37
Antigüedad: 16 años, 3 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
  #12 (permalink)  
Antiguo 18/10/2011, 23:52
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: como puedo parsear un documento de texto con datos como este en php

Bueno no sé como es todo tu archivo de texto, pero yo lo haría como dice maycolalvarez, algo así rápido para que te de una idea:

Código PHP:
Ver original
  1. <?php
  2. $lineas = file('tuarchivodetexto.txt');
  3. foreach ($lineas as $linea) {
  4.     $data = json_decode($linea);
  5.         foreach ($data as $d) {
  6.             echo implode(', ', $d) . '<br />' . PHP_EOL;
  7.         }
  8. }

Todo depende si se cumple el formato JSON en todo el archivo, ya tocaría validar y solucionar eso con otras formas, nada complicado.

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Etiquetas: parsear
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 22:00.