Foros del Web » Programando para Internet » PHP »

Transformar salida

Estas en el tema de Transformar salida en el foro de PHP en Foros del Web. bueno estoy ejecutando un comando por shell_exec(); la salida es asi: Cita: 27183 208.77.17.36,27015,27015,1 89.44.246.50,27015,27015,4 80.248.217.78,27033,27033,3 80.96.216.51,27015,27015,5 77.220.185.29,27179,27179,5 124.9.3.228,27015,27015,6 84.38.95.197,27015,27015,7 83.222.97.78,27015,27015,8 77.220.185.30,27015,27015,9 217.26.212.28,27015,27015,10 ahora necesito ...
  #1 (permalink)  
Antiguo 04/01/2010, 16:18
Avatar de xalupeao  
Fecha de Ingreso: mayo-2008
Ubicación: Santiago, Chile
Mensajes: 749
Antigüedad: 16 años, 7 meses
Puntos: 12
Transformar salida

bueno estoy ejecutando un comando por shell_exec();

la salida es asi:

Cita:
27183
208.77.17.36,27015,27015,1
89.44.246.50,27015,27015,4
80.248.217.78,27033,27033,3
80.96.216.51,27015,27015,5
77.220.185.29,27179,27179,5
124.9.3.228,27015,27015,6
84.38.95.197,27015,27015,7
83.222.97.78,27015,27015,8
77.220.185.30,27015,27015,9
217.26.212.28,27015,27015,10
ahora necesito que esa salida quede asi
Cita:

208.77.17.36:27015
89.44.246.50:27015
80.248.217.78:27033
80.96.216.51:27015
77.220.185.29:27179
124.9.3.228:27015
84.38.95.197:27015
83.222.97.78:27015
77.220.185.30:27015
217.26.212.28:27015
• que la primera linea se borre
• que se borre todo desde la segunda coma
• que la coma sea reemplazada por :

esto lo guardare en un archivo de texto

¿como se puede hacer?

Gracias.
  #2 (permalink)  
Antiguo 04/01/2010, 16:30
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 8 meses
Puntos: 2534
Respuesta: Transformar salida

es simple...

primero creas un array() usando explode() para que cada linea sea un elemento, luego:

• que la primera linea se borre
- borras el primer elemento con unset()

• que se borre todo desde la segunda coma
- con un juego de substr() y strrpos()

• que la coma sea reemplazada por :
- sencillamente usas str_replace()

al final "pegas" todo con la función join() o implode()
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 04/01/2010, 16:46
Avatar de xalupeao  
Fecha de Ingreso: mayo-2008
Ubicación: Santiago, Chile
Mensajes: 749
Antigüedad: 16 años, 7 meses
Puntos: 12
Respuesta: Transformar salida

unset() .. necesita de un valor fijo?, porque la primera linea es variable.
  #4 (permalink)  
Antiguo 04/01/2010, 16:54
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 8 meses
Puntos: 2534
Respuesta: Transformar salida

Cita:
Iniciado por xalupeao Ver Mensaje
unset() .. necesita de un valor fijo?, porque la primera linea es variable.
lee el manual...
http://php.net/unset
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 04/01/2010, 17:14
Avatar de xalupeao  
Fecha de Ingreso: mayo-2008
Ubicación: Santiago, Chile
Mensajes: 749
Antigüedad: 16 años, 7 meses
Puntos: 12
Respuesta: Transformar salida

Código PHP:
<?
#ejecuto el comando
$lista shell_exec($cmd);
list(
$ip,$puerto)=explode(",",$lista);
?>

¿Como lo puedo hacer para trabajarlo en un ciclo, linea por linea que rescate de la variable $lista?
  #6 (permalink)  
Antiguo 04/01/2010, 17:23
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 8 meses
Puntos: 2534
Respuesta: Transformar salida

entonces, según entiendo... la salida la obtenías con echo?? ¿o como llegaste a esa salida que mencionaste en un principio??

puedes usar buffers para capturar el texto, revisa estas funciones:
http://php.net/manual/en/book.outcontrol.php

si no, primer has un var_dump() de tu lista y analiza como es su estructura, reflexiona como está...

y vuelve a pensar tu pregunta....
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 04/01/2010, 23:47
 
Fecha de Ingreso: julio-2008
Mensajes: 85
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: Transformar salida

Código PHP:
Ver original
  1. <?php
  2. $lista = shell_exec($cmd);
  3.  
  4. preg_match_all('#^(\d{1,3}(?:\.\d{1,3}){3}),(\d+).*$#m',$lista,$matches);
  5.  
  6. $lista = ''; $i=0;
  7. foreach($matches[1] as $key=>$ip) {
  8.   if ($i++!=0) $lista .= "\n";
  9.   $lista .= $ip.':'.$matches[2][$key];
  10. }
  11.  
  12. echo $lista;
  13. ?>

La clave reside en la funcion preg_match_all, que usa expresiones regulares. Te recomiendo que busques tutoriales para entenderlas. Si quieres algo más sencillo, ya te han dado una buena propuesta.

Nos vemos en el counter-strike xD
  #8 (permalink)  
Antiguo 01/02/2010, 13:04
Avatar de xalupeao  
Fecha de Ingreso: mayo-2008
Ubicación: Santiago, Chile
Mensajes: 749
Antigüedad: 16 años, 7 meses
Puntos: 12
Respuesta: Transformar salida

Disculpas por volver a subir el tema, las expresiones regulares para mi son muy dificiles.

la salida salio todo okey, pero ahora necesito que el preg_match_all()

tenga 4 variables en su array

que la salida:
208.77.17.36,27015,27015,1

se guarde asi
208.77.17.36 => $matches[1]
27015 => $matches[2]
27015 => $matches[3]

es decir agregar otra expresion regular al preg_match.

y si pueden ... me puede desglosar un poco la expresion regular utilizada.

Etiquetas: salida, transformar
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 00:41.