Foros del Web » Programando para Internet » PHP »

Sacar datos desde un texto.

Estas en el tema de Sacar datos desde un texto. en el foro de PHP en Foros del Web. Hola!. He tratado de hacer esto, pero no logro hacerlo. Ni siquiera se me ocurre como. Traté convirtiéndolo en Array, pero cuando se acumulan datos, ...
  #1 (permalink)  
Antiguo 26/08/2010, 23:13
 
Fecha de Ingreso: octubre-2008
Mensajes: 102
Antigüedad: 15 años, 6 meses
Puntos: 0
Sacar datos desde un texto.

Hola!.

He tratado de hacer esto, pero no logro hacerlo. Ni siquiera se me ocurre como.
Traté convirtiéndolo en Array, pero cuando se acumulan datos, No funciona.


Tengo el siguiente archivo, estructurado de la siguiente manera:

Cita:
Datos = {
["Items"] = {
"asdasdasd", -- [1]
},
["Nombre"] = "asdasdasd",
["TotalReceived"] = 1,
["TotalPosts"] = 1,
["Posts"] = {
"asdasdasdasd", -- [1]
},
["TotalItem"] = 0,
["Received"] = {
"dasdasdasdasd", -- [1]

},
}
En donde sale ["items"], ["Posts"], ["Received"] con un "asdasd", -- [1], se van acumulando esos datos.

El "asdasd", -- [1], va un nombre especifico, y el número entre corchetes es el ID.


Yap... Cómo puedo hacer para separar los datos entre Items, Nombre, Totalreceived, TotalPosts, Posts, TotalItem, Received y que esos, tengan subdatos. ?

Ojalá poder convertirlos en un Array (que ni idea cómo), si es posible, de la siguiente manera:

$Datos["Items"][1] = "asdasdasdad";

Alguna idea?.

Grax
  #2 (permalink)  
Antiguo 27/08/2010, 00:14
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Sacar datos desde un texto.

una pregunta... ¿el formato que empleas es inventado o se basa en algo?

porque honestamente se recomienda usar estructuras de datos convencionales, como XML, JSON, YML, etc...

sin embargo si tu intención sigue siendo la misma puedes valerte de expresiones regulares para obtener los datos...

te sugiero entonces leer lo siguiente:
http://www.forosdelweb.com/f18/aport...s-pcre-646110/
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 27/08/2010, 00:25
 
Fecha de Ingreso: marzo-2008
Mensajes: 21
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Sacar datos desde un texto.

Creo que tengo la solucion para tu problema:

Paso1:

Vas a colocar el contenido del archivo en una variable :
$pagecontent = file_get_contents($directory."tuarchivo.txt");

Paso 2:

Despues debes saber que debes saber detectar el patrón que existe en las formas almacenadas en tu archivo. En este caso tienes básicamente 2 tipos:


Genérico:
["namearray"] = {"text1", -- [1]}, : en este caso tienes una estructura que :
-comienza con "[";
-contiene "]", letras,comillasdobles, "=","{"
-y terminas en "}".
["namearray"] = valor,: en este caso tienes
-comienza con "[";
-contiene letras, números,"=","]"
-termina en ,

con esta informacion contruye dos expresiones regules una para cada caso;

Paso 3:


en este punto vas a buscar en $pagecontent todas los elementos de la forma 1
["namearray"] = {"text1", -- [1]}
con esto:
preg_match_all($miexpresionregular1,$pagecontent,$ RESULTADO1);
y luego todos los de la forma 2

["namearray"] = valor,
con esto:
preg_match_all($miexpresionregular2,$pagecontent,$ RESULTADO2);

Paso 4:

Ya tienes en $RESULTADO1 que es un arreglo todas expresiones de la forma 1 y en $RESULTADO1 los de la forma 2

donde por ejemplo $RESULTADO1:

posicion 0 del arreglo tendra esto
["Items"] = {"asdasdasd", -- [1]}
la 1 tendra esto:
["Received"] = {"dasdasdasdasd", -- [1]}

etc....

Paso 5:

En este punto vas recorrer los arreglos extraer cada valor (usando expresiones regulares)


y obtendras de este modo los indices y valores de tu arreglo final


$Datos["Items"][1] = "asdasdasdad";


Suerte!!!!
  #4 (permalink)  
Antiguo 27/08/2010, 02:54
 
Fecha de Ingreso: octubre-2008
Mensajes: 102
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Sacar datos desde un texto.

Cita:
Iniciado por pateketrueke Ver Mensaje
una pregunta... ¿el formato que empleas es inventado o se basa en algo?
Ese archivo se crea a partir de un juego, en donde sus addOn estan programados en Lua (ese está programado por mi), la estructura siempre será la misma o parecida.


Gracias Marietica :), me sirvio mucho esa explicación tan detallada :)
Ahora a ver eso de expresiones regulares que nunca las he entendido xD

Grax.

Última edición por Zidencjb; 27/08/2010 a las 03:02
  #5 (permalink)  
Antiguo 27/08/2010, 17:09
 
Fecha de Ingreso: octubre-2008
Mensajes: 102
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Sacar datos desde un texto.

Bien, ya logre que me muestre, como me dices ahí por medio de un patrón muy sencillo (no me dio para más xD).

Código PHP:
$var2 'Datos = {
["Items"] = {
"asdasdasd", -- [1]
},
["Nombre"] = "asdasdasd",
["TotalReceived"] = 1,
["TotalPosts"] = 1,
["Posts"] = { "asdasdasdasd", -- [1] "qweweretretete", -- [2] },
["TotalItem"] = 0,
["Received"] = {
"dasdasdasdasd", -- [1]

},
}'
;

$preg '/\[\"(Items|Posts|Received)\"\] = \{(.*\s)\}/i';
$preg_1 '/\[\"(Nombre|TotalReceived|TotalPosts|TotalItem)\"\] = (.*)/i';
preg_match_all($preg,$var2,$mat1);
preg_match_all($preg_1,$var2,$mat1_1);
$out print_r($mat1true);
$out_1 print_r($mat1_1true);
echo 
"<pre>$out</pre><br>-------------------<br>";
echo 
"<pre>$out_1</pre>"
Pero no me muestra si hay saltos de líneas... como hago eso? xD
Traté con el "\s" pero no me funcionaba, o no me mostraba nada.


grax xD
  #6 (permalink)  
Antiguo 30/08/2010, 22:54
 
Fecha de Ingreso: marzo-2008
Mensajes: 21
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Sacar datos desde un texto.

Para que juegues con expresiones regulares te recomiendo este site
http://www.quanetic.com/Regex

tiene un probador donde colocas el texto , la expresion regular

Buena suerte!
  #7 (permalink)  
Antiguo 31/08/2010, 06:59
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: Sacar datos desde un texto.

Sin embargo, es mucho más leíble usar json o xml...

Etiquetas: Ninguno
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 05:23.