Foros del Web » Programando para Internet » PHP »

Extraer líneas que incluyan cierto texto

Estas en el tema de Extraer líneas que incluyan cierto texto en el foro de PHP en Foros del Web. Hola, muy buenos dias. Estoy tratando de hacer esto, creo que en PHP se puede hacer, necesito extraer las lineas que incluyan el texto "1.1.0" ...
  #1 (permalink)  
Antiguo 06/10/2011, 11:00
 
Fecha de Ingreso: marzo-2008
Ubicación: Santa Cruz, Argentina
Mensajes: 433
Antigüedad: 16 años, 1 mes
Puntos: 5
Extraer líneas que incluyan cierto texto

Hola, muy buenos dias.


Estoy tratando de hacer esto, creo que en PHP se puede hacer, necesito extraer las lineas que incluyan el texto "1.1.0" de un archivo XML.


El archivo comienza aquí:

Código XML:
Ver original
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <language title="Español (LA)" date_format="j F Y" time_format="H:i" decimal_point="," thousands_separator="." language_code="" addon_id="XenForo">
  3.   <phrase title="1_day_ago" addon_id="XenForo" version_id="1010010" version_string="1.1.0 Alpha"><![CDATA[One day ago]]></phrase>
  4.   <phrase title="1_month_ago" addon_id="XenForo" version_id="1010010" version_string="1.1.0 Alpha"><![CDATA[One month ago]]></phrase>
  5.   <phrase title="about" addon_id="XenForo" version_id="1000031" version_string="1.0.0 Beta 1"><![CDATA[Acerca]]></phrase>


Y por ejemplo, quiero que se extraigan solamente las lineas que tengan el 1.1.0, por ende tendria que mostrar algo asi:

Código XML:
Ver original
  1. <phrase title="1_day_ago" addon_id="XenForo" version_id="1010010" version_string="1.1.0 Alpha"><![CDATA[One day ago]]></phrase>
  2.   <phrase title="1_month_ago" addon_id="XenForo" version_id="1010010" version_string="1.1.0 Alpha"><![CDATA[One month ago]]></phrase>


¿Como lo podría hacer?
¿Se puede hacer?


Desde ya, muchas gracias!!
  #2 (permalink)  
Antiguo 06/10/2011, 11:13
Avatar de h2swider  
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 16 años, 9 meses
Puntos: 194
Respuesta: Extraer líneas que incluyan cierto texto

Si se puede, es bastante simple.

Código PHP:
Ver original
  1. <?php
  2.  
  3. $archivo = file("data.csv");
  4.  
  5. $i = 0;
  6. foreach ($archivo as $fila) {
  7.  
  8.     if (preg_match('/1\.1\.0/', $fila)) {
  9.         //esta fila tiene el 1.1.0 , entonces la agrego a un array
  10.         $filas_deseables[] = $fila;
  11.     }
  12. }
  13.  
  14. var_dump($filas_deseables);
  15. ?>
__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives
  #3 (permalink)  
Antiguo 06/10/2011, 11:21
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: Extraer líneas que incluyan cierto texto

Para eso es mucho mejor usar clases como DOMDocument o SimpleXML. Lees los atributos y haces lo que quieras con esa información.

http://www.forosdelweb.com/f18/aport...ml-dom-792348/

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
  #4 (permalink)  
Antiguo 06/10/2011, 11:27
Avatar de h2swider  
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 16 años, 9 meses
Puntos: 194
Respuesta: Extraer líneas que incluyan cierto texto

Cita:
Iniciado por andresdzphp Ver Mensaje
Para eso es mucho mejor usar clases como DOMDocument o SimpleXML. Lees los atributos y haces lo que quieras con esa información.

http://www.forosdelweb.com/f18/aport...ml-dom-792348/

Saludos.
En mi opinión lo mas optimo seria utilizar xsl, pero trate de darle una opción, sin que tenga la necesidad de implementar otro lenguaje, o una clase que no conoce.
__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives
  #5 (permalink)  
Antiguo 06/10/2011, 11:44
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: Extraer líneas que incluyan cierto texto

No discutiré algo sin sentido, es problema de las personas si quieren aprender o no algo tan sencillo. Dejo un ejemplo como siempre...

Código PHP:
Ver original
  1. <?php
  2. $xml = '<?xml version="1.0" encoding="utf-8" ?>
  3. <language title="Español (LA)" date_format="j F Y" time_format="H:i" decimal_point="," thousands_separator="." language_code="" addon_id="XenForo">
  4.  <phrase title="1_day_ago" addon_id="XenForo" version_id="1010010" version_string="1.1.0 Alpha"><![CDATA[One day ago]]></phrase>
  5.  <phrase title="1_month_ago" addon_id="XenForo" version_id="1010010" version_string="1.1.0 Alpha"><![CDATA[One month ago]]></phrase>
  6.  <phrase title="about" addon_id="XenForo" version_id="1000031" version_string="1.0.0 Beta 1"><![CDATA[Acerca]]></phrase></language>';
  7.  
  8. $doc = new DOMDocument();
  9. $doc->loadXML($xml);
  10. $phrases = $doc->getElementsByTagName('phrase');
  11.  
  12. for ($i = 0; $i < $phrases->length; $i++) {
  13.     if ($phrases->item($i)->hasAttributes()) {
  14.         if ($phrases->item($i)->attributes->getNamedItem('version_string')->value == '1.1.0 Alpha') {
  15.             foreach ($phrases->item($i)->attributes as $att => $value) {
  16.                 echo $value->nodeValue . ' ';
  17.             }
  18.         }
  19.     }
  20.     echo '<br />';
  21. }

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
  #6 (permalink)  
Antiguo 06/10/2011, 13:27
 
Fecha de Ingreso: marzo-2008
Ubicación: Santa Cruz, Argentina
Mensajes: 433
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: Extraer líneas que incluyan cierto texto

Cita:
Iniciado por h2swider Ver Mensaje
Si se puede, es bastante simple.

Código PHP:
Ver original
  1. <?php
  2.  
  3. $archivo = file("data.csv");
  4.  
  5. $i = 0;
  6. foreach ($archivo as $fila) {
  7.  
  8.     if (preg_match('/1\.1\.0/', $fila)) {
  9.         //esta fila tiene el 1.1.0 , entonces la agrego a un array
  10.         $filas_deseables[] = $fila;
  11.     }
  12. }
  13.  
  14. var_dump($filas_deseables);
  15. ?>
En cuanto a este código, me aparece todo así mirá:


Código:
array(568) {
  [0]=>
  string(130) "  <phrase title="1_day_ago" addon_id="XenForo" version_id="1010010" version_string="1.1.0 Alpha"><![CDATA[Hace un dia]]></phrase>
"
  [1]=>
  string(132) "  <phrase title="1_month_ago" addon_id="XenForo" version_id="1010010" version_string="1.1.0 Alpha"><![CDATA[Hace un mes]]></phrase>
"
  [2]=>
  string(135) "  <phrase title="1_week_ago" addon_id="XenForo" version_id="1010010" version_string="1.1.0 Alpha"><![CDATA[Hace una semana]]></phrase>
"
  [3]=>
  string(132) "  <phrase title="1_year_ago" addon_id="XenForo" version_id="1010010" version_string="1.1.0 Alpha"><![CDATA[Hace un año]]></phrase>
"
  [4]=>
  string(133) "  <phrase title="2_weeks_ago" addon_id="XenForo" version_id="1010010" version_string="1.1.0 Alpha"><![CDATA[Hace 2 meses]]></phrase>
"
  [5]=>
  string(133) "  <phrase title="2_years_ago" addon_id="XenForo" version_id="1010010" version_string="1.1.0 Alpha"><![CDATA[Hace 2 años]]></phrase>
"

Como se puede hacer que aparezca bien?

Realmente me gustaría después de hacer esto, algo con SimpleXML para poder editar las las phrase desde ahi y que las guarde, pero necesito esto rápido primero..


Muchas gracias a los dos!
  #7 (permalink)  
Antiguo 06/10/2011, 13:43
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: Extraer líneas que incluyan cierto texto

Una forma rápida de obtener esas líneas. Pero igual sigo pensando que no es la mejor forma de hacerlo, sabiendo que con DOMDocument puedes manipular ese XML muy fácilmente.

Código PHP:
Ver original
  1. <?php
  2. $data = array();
  3. $lineas = file('pruebas.xml');
  4. foreach ($lineas as $l) {
  5.     if (strpos($l, 'version_string="1.1.0 Alpha"')) {
  6.         $data[] = $l;
  7.     }
  8. }
  9.  
  10. echo '<pre>';
  11. print_r($data);
  12. echo '</pre>';

Array
(
[0] => <phrase title="1_day_ago" addon_id="XenForo" version_id="1010010" version_string="1.1.0 Alpha"><![CDATA[One day ago]]></phrase>

[1] => <phrase title="1_month_ago" addon_id="XenForo" version_id="1010010" version_string="1.1.0 Alpha"><![CDATA[One month ago]]></phrase>
)

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
  #8 (permalink)  
Antiguo 06/10/2011, 13:49
 
Fecha de Ingreso: marzo-2008
Ubicación: Santa Cruz, Argentina
Mensajes: 433
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: Extraer líneas que incluyan cierto texto

Primero necesito sacar el codigo, ahora probare eso que me pasaste, me gustaria con simplexml poder obtener el contenido (cdata), el titulo de la variable y la version, para poder editar y me gustaria saber como despues puedo guardar el xml ya editado?

Hay algun manual donde leer eso? Desde ya muchas gracias.

Estoy conectado desde el celular por eso no puedo probar el codigo ya.
  #9 (permalink)  
Antiguo 06/10/2011, 13:56
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: Extraer líneas que incluyan cierto texto

DOMDocument y sus vecinas tienen métodos para guardar, cargar, manipular nodos, manipular atributos y cambiar el contenido del XML (muchas cosas más). Puedes empezar leyendo el manual y este aporte. En google hay mucha información sobre el tema y en el mismo foro yo he dejado varios aportes.
__________________
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
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:15.