Foros del Web » Programando para Internet » PHP »

Rescatar datos de una cadena.

Estas en el tema de Rescatar datos de una cadena. en el foro de PHP en Foros del Web. Tengo una duda dudosa que no he podido saber cómo hacer en casi todo el día. Tengo una cadena de texto, por ejemplo. Cita: [04:32:04] ...
  #1 (permalink)  
Antiguo 19/08/2010, 02:51
 
Fecha de Ingreso: octubre-2008
Mensajes: 102
Antigüedad: 15 años, 5 meses
Puntos: 0
Rescatar datos de una cadena.

Tengo una duda dudosa que no he podido saber cómo hacer en casi todo el día.

Tengo una cadena de texto, por ejemplo.

Cita:
[04:32:04] You receive money: 12 Gold, 25 Silver, 3 Copper (Auction of Luminous Monarch Topaz)
[04:32:05] You receive money: 12 Gold, 25 Silver, 3 Copper (Auction of Luminous Monarch Topaz)
[04:32:05] You receive money: 12 Gold, 25 Silver, 3 Copper (Auction of Luminous Monarch Topaz)
[04:32:05] You receive money: 6 Gold, 99 Silver, 25 Copper (Auction of Mysterious Twilight Opal)
[04:32:06] You receive money: 6 Gold, 99 Silver, 25 Copper (Auction of Mysterious Twilight Opal)
Cómo puedo hacer que tome la cantidad de Gold y el Item respectivo, y cuántas veces se vendió y las guarde en una DB?.

Por ejemplo:
Luminous Monarch Topaz se vendió 3 veces en 12g 25s 3c (Si varia el precio hacer un promedio), recaudando un total de 36g 75s 9c.

Y al final hacer la suma total del Gold rescatado de esa cadena.


Muchas gracias.
  #2 (permalink)  
Antiguo 19/08/2010, 04:50
Avatar de OsSk4R  
Fecha de Ingreso: octubre-2006
Ubicación: $this->home
Mensajes: 824
Antigüedad: 17 años, 6 meses
Puntos: 74
Respuesta: Rescatar datos de una cadena.

¿Pero como recibes esos datos? O sea, ¿esos datos los pones tú manualmente?, ¿los envias desde un form?

Lo digo por que dependiendo de eso se puede intentar hacer de una manera u otra.

¿No sería mejor intentarlo con arrays?

Por eso te digo, sería bueno que pusieras de donde y como vienen esos datos.

A bote pronto se me ocurre que para calcular el total de Auction of Luminous Monarch Topaz podrías usar por ejemplo substr_count()

Ejemplo:
Código PHP:
Ver original
  1. $variable = '[04:32:04] You receive money: 12 Gold, 25 Silver, 3 Copper (Auction of Luminous Monarch Topaz)
  2.        [04:32:05] You receive money: 12 Gold, 25 Silver, 3 Copper (Auction of Luminous Monarch Topaz)
  3.        [04:32:05] You receive money: 12 Gold, 25 Silver, 3 Copper (Auction of Luminous Monarch Topaz)
  4.        [04:32:05] You receive money: 6 Gold, 99 Silver, 25 Copper (Auction of Mysterious Twilight Opal)
  5.        [04:32:06] You receive money: 6 Gold, 99 Silver, 25 Copper (Auction of Mysterious Twilight Opal)';
  6.         $contador = substr_count($variable, 'Auction of Luminous Monarch Topaz');
  7.         echo "Luminous Monarch Topaz se vendió $contador veces";

Pero claro, esto no cumple lo que quieres... Porque luego con 12 Gold, 25 Silver, 3 Copper no te vale, puesto que no quieres saber cuantas veces esta... sino calcular el total

Bueno, lo que te comenté... si me dices de donde y como vienen esos datos creo que te podre ayudar mejor.

Saludos,
  #3 (permalink)  
Antiguo 19/08/2010, 13:18
 
Fecha de Ingreso: octubre-2008
Mensajes: 102
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Rescatar datos de una cadena.

Gracias por responder.
Esos datos lo pongo yo manualmente, los envio a través de un form. Y a partir de eso rescato los datos que quiero D:
  #4 (permalink)  
Antiguo 19/08/2010, 15:59
 
Fecha de Ingreso: agosto-2010
Mensajes: 79
Antigüedad: 13 años, 8 meses
Puntos: 2
Respuesta: Rescatar datos de una cadena.

seria bueno usar expresiones regulares con backreferees
  #5 (permalink)  
Antiguo 19/08/2010, 17:46
 
Fecha de Ingreso: octubre-2008
Mensajes: 102
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Rescatar datos de una cadena.

Lo mismo pensé... Traté de utilizar el preg_match pero no logré hacer lo que quería.

Y disculpa, pero qué es "backreferees"?
  #6 (permalink)  
Antiguo 19/08/2010, 18:49
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Rescatar datos de una cadena.

Hice esto, quizá te sirva, solo toma los valores de gold, silver y copper. Habría que hacerlo más complejo para que tome el resto :

Código PHP:
Ver original
  1. $str = 'You receive money: 6 Gold, 99 Silver, 25 Copper (Auction of Mysterious Twilight Opal)';
  2. $expr = '/\d{1,}\s(?:Gold|Silver|Copper)/i';
  3. if(preg_match_all($expr, $str, $matches)) {
  4.     print_r($matches);
  5. }

PD : Foro Powers?
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #7 (permalink)  
Antiguo 20/08/2010, 17:08
 
Fecha de Ingreso: octubre-2008
Mensajes: 102
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Rescatar datos de una cadena.

Grax!...
Con ese código logre hacer que sume el Gold/silver/copper total de todos.

Pero como podría rescatar que X Gold es de Y Item?. Trate de rescatar lo de Paréntesis (por separado, con el patron "/\((.+)\)/")

Como podría juntar ambas?... Nunca he entendido bien sobre las expresiones regulares, sólo sé lo básico u.u!

PD: Sip, hace caletaaa que no entro xD
  #8 (permalink)  
Antiguo 20/08/2010, 18:51
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Rescatar datos de una cadena.

Código PHP:
Ver original
  1. $expr = '/(([\d]+,*\s(?:Gold|Silver|Copper))\s*(?:\(Auction of ([a-zA-Z\s]+)\))*)/i';
  2. if(preg_match_all($expr, $str, $matches)) {
  3.     echo "<pre>";
  4.     print_r($matches);
  5.     echo "</pre>";
  6. }

Eso me funcionó, pero está horrible, me da vergüenza postearlo, pero sería como el pie para comenzar a hacerlo mejorar, y honestamente, no sé como mejorarlo. Me devuelve todos los datos requeridos, pero están desparramados por todas partes, algunos valores en blanco, otros se repiten .

Bueno, espero te sirva xD. Nos vemos.
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #9 (permalink)  
Antiguo 20/08/2010, 20:02
 
Fecha de Ingreso: octubre-2008
Mensajes: 102
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Rescatar datos de una cadena.

Parecido, pero no me sirve >.<... Y yo tampoco no tengo idea como hacerlo jaja
Siempre las expresiones regulares me complicaron. Tengo una forma de hacerlo, que ir cortando la cadena y sacar los datos, pero me podría sacar problemas con muchos datos.

Lo ideal es que me quede asi:
Cita:
Array
(
[0] => Array
(
[0] => 12 Gold
[1] => 25 Silver
[2] => 3 Copper
[3] => Luminous Monarch Topaz
)

[1] => Array
(
[0] => 12 Gold
[1] => 25 Silver
[2] => 3 Copper
[3] => Luminous Monarch Topaz
)
)
$array[0][] = Primera línea
$array[1][] = Segunda línea

Si alguien me ayuda o me guía de cómo lo podría hacer, lo agradecería mucho. A partir de eso, puedo hacer todo lo otro ^^.

Gracias
  #10 (permalink)  
Antiguo 21/08/2010, 10:39
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Rescatar datos de una cadena.

Ya, ahora sí, esto me funcionó xd :

Código PHP:
Ver original
  1. $expr = '/(?|(\d+,*\s(?:Gold|Silver|Copper))|(?:\(Auction of ([a-zA-Z\s]+)\)))/i';
  2. if(preg_match_all($expr, $str, $matches)) {
  3.     echo "<pre>";
  4.     print_r($matches);
  5.     echo "</pre>";
  6. }

Solo lo probé con una línea de texto, no sé como funcionará para todo el texto que mostraste en un inicio.

Nos vemos .
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #11 (permalink)  
Antiguo 21/08/2010, 13:45
 
Fecha de Ingreso: octubre-2008
Mensajes: 102
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Rescatar datos de una cadena.

Grax :)... Con eso puedo hacer lo otro que necesito! :D

Etiquetas: cadenas
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 06:43.