Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] recorrer un String en php

Estas en el tema de recorrer un String en php en el foro de PHP en Foros del Web. Tengo una duda y quiero saber si me pueden ayudar, actualmente necesito recorre un string, pero necesito sacar solo ciertos campos, me explico, actualmente estoy ...
  #1 (permalink)  
Antiguo 20/06/2013, 10:36
 
Fecha de Ingreso: junio-2013
Ubicación: Santiago
Mensajes: 19
Antigüedad: 10 años, 10 meses
Puntos: 0
Pregunta recorrer un String en php

Tengo una duda y quiero saber si me pueden ayudar, actualmente necesito recorre un string, pero necesito sacar solo ciertos campos, me explico, actualmente estoy utilizando el comando

"Cscript C:\\Windows\\System32\\Printing_Admin_Scripts\\es-ES\\prnmngr.vbs -l"

el cual se utiliza para ver la cantidad de impresoras que hay instaladas en el sistema o equipo (pc), hasta hay todo bien, que es lo que ocurre??, al ejecutarlo por linea de comando sale detallado, ordenado y separado, pero si esto lo ejecuto de php, entrega todos los campos revueltos y juntos, un string, por ende necesito recorrerlo y sacar solo los nombre de la impresoras para después llenar una lista en un combo box.
Se que para recorrer puedo utilizar un foreach, pero como le digo que recorra esa variable sin importar el largo y que solo captura el nombre de la impresora y continué así hasta el final

para que tengan una idea, me entrega esto y necesito solo en nombre de la impresora.
Microsoft (R) Windows Script Host versi�n 5.8 Copyright (C) Microsoft Corporation 1996-2006. Reservados todos los derechos. Nombre de servidor Nombre de impresora HP Photosmart Plus B210 series Class Driver Nombre del recurso compartido Nombre de controlador HP Photosmart Plus B210 series Class Driver Nombre del puerto 10.178.21.8 Comentario Ubicaci�n Procesador de impresi�n winprint Tipo de datos RAW Par�metros Atributos 832 Prioridad 1 Prioridad predeterminada 0 N�mero medio de p�ginas por minuto 0 Estado de la impresora Otros Estado de impresora extendido Pausado Estado de error detectado Otros Estado de error detectado extendido Otros Nombre de servidor Nombre de impresora Microsoft XPS Document Writer Nombre del recurso compartido Nombre de controlador Microsoft XPS Document Writer v4 Nombre del puerto PORTPROMPT: Comentario Ubicaci�n Procesador de impresi�n winprint Tipo de datos RAW Par�metros Atributos 576 Prioridad 1 Prioridad predeterminada 0 N�mero medio de p�ginas por minuto 0 Estado de la impresora Inactivo Estado de impresora extendido Desconocido Estado de error detectado Desconocido Estado de error detectado extendido Desconocido Nombre de servidor Nombre de impresora Fax Nombre del recurso compartido Nombre de controlador Microsoft Shared Fax Driver Nombre del puerto SHRFAX: Comentario Ubicaci�n Procesador de impresi�n winprint Tipo de datos RAW Par�metros Atributos 16448 Prioridad 1 Prioridad predeterminada 0 N�mero medio de p�ginas por minuto 0 Estado de la impresora Inactivo Estado de impresora extendido Desconocido Estado de error detectado Desconocido Estado de error detectado extendido Desconocido N�mero de impresoras y conexiones locales enumeradas 3

solo los nombre resaltados necesito capturar en la lista
  #2 (permalink)  
Antiguo 20/06/2013, 12:27
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: recorrer un String en php

Lo mas sencillo es utilizar expresiones regulares...

Código PHP:
Ver original
  1. <?php
  2. $texto = 'para que tengan una idea, me entrega esto y necesito solo en nombre de la impresora.
  3. Microsoft (R) Windows Script Host versi�n 5.8 Copyright (C) Microsoft Corporation 1996-2006. Reservados todos los derechos. Nombre de servidor Nombre de impresora HP Photosmart Plus B210 series Class Driver Nombre del recurso compartido Nombre de controlador HP Photosmart Plus B210 series Class Driver Nombre del puerto 10.178.21.8 Comentario Ubicaci�n Procesador de impresi�n winprint Tipo de datos RAW Par�metros Atributos 832 Prioridad 1 Prioridad predeterminada 0 N�mero medio de p�ginas por minuto 0 Estado de la impresora Otros Estado de impresora extendido Pausado Estado de error detectado Otros Estado de error detectado extendido Otros Nombre de servidor Nombre de impresora Microsoft XPS Document Writer Nombre del recurso compartido Nombre de controlador Microsoft XPS Document Writer v4 Nombre del puerto PORTPROMPT: Comentario Ubicaci�n Procesador de impresi�n winprint Tipo de datos RAW Par�metros Atributos 576 Prioridad 1 Prioridad predeterminada 0 N�mero medio de p�ginas por minuto 0 Estado de la impresora Inactivo Estado de impresora extendido Desconocido Estado de error detectado Desconocido Estado de error detectado extendido Desconocido Nombre de servidor Nombre de impresora Fax Nombre del recurso compartido Nombre de controlador Microsoft Shared Fax Driver Nombre del puerto SHRFAX: Comentario Ubicaci�n Procesador de impresi�n winprint Tipo de datos RAW Par�metros Atributos 16448 Prioridad 1 Prioridad predeterminada 0 N�mero medio de p�ginas por minuto 0 Estado de la impresora Inactivo Estado de impresora extendido Desconocido Estado de error detectado Desconocido Estado de error detectado extendido Desconocido N�mero de impresoras y conexiones locales enumeradas 3';
  4.  
  5. $resultados = array();
  6. preg_match_all('/Nombre de impresora ([a-zA-Z0-9 ]+) Nombre del recurso/',$texto,$resultados,PREG_SET_ORDER);
  7.  
  8. echo '<pre>';
  9. var_dump($resultados);
  10. echo '</pre>';
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #3 (permalink)  
Antiguo 20/06/2013, 12:49
Avatar de kikerrobles  
Fecha de Ingreso: mayo-2013
Ubicación: Oviedo
Mensajes: 17
Antigüedad: 10 años, 11 meses
Puntos: 2
Respuesta: recorrer un String en php

Puedes utilizar una función con preg_match_all. Te devolverá los resultados que cumplan con una expresión regular.

Así en esa cadena por jemplo, el nombre de la impresora aparece siempre detrás de "Nombre de impresora" y antes de "Nombre del recurso compartido" podrías usar algo como:

$regexp='/Nombre\sde\simpresora\s(.+)\sNombre\sdel/';
$coincidencias=array();
echo preg_match_all($regexp, $cadena, $coincidencias,PREG_PATTERN_ORDER);
print_r($coincidencias[1]);

No lo he probado, mira a ver como funciona preg_match_all y comprueba que la expresión regular sea válida. en $coincidencias[1] debería devolverte todos los nombres de las impresoras.

Siento haber contestado un poco a la carrera, pero ya con esto tienes bastante andado

(Lo siento, estaba ya con el texto medio escrito y le di a enviar una vez finalizado y ya tenías una estupenda respuesta)

Última edición por kikerrobles; 20/06/2013 a las 12:53 Razón: Ya estaba respondido
  #4 (permalink)  
Antiguo 20/06/2013, 13:50
 
Fecha de Ingreso: junio-2013
Ubicación: Santiago
Mensajes: 19
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: recorrer un String en php

Cita:
Iniciado por Nemutagk Ver Mensaje
Lo mas sencillo es utilizar expresiones regulares...

Código PHP:
Ver original
  1. <?php
  2. $texto = 'para que tengan una idea, me entrega esto y necesito solo en nombre de la impresora.
  3. Microsoft (R) Windows Script Host versi�n 5.8 Copyright (C) Microsoft Corporation 1996-2006. Reservados todos los derechos. Nombre de servidor Nombre de impresora HP Photosmart Plus B210 series Class Driver Nombre del recurso compartido Nombre de controlador HP Photosmart Plus B210 series Class Driver Nombre del puerto 10.178.21.8 Comentario Ubicaci�n Procesador de impresi�n winprint Tipo de datos RAW Par�metros Atributos 832 Prioridad 1 Prioridad predeterminada 0 N�mero medio de p�ginas por minuto 0 Estado de la impresora Otros Estado de impresora extendido Pausado Estado de error detectado Otros Estado de error detectado extendido Otros Nombre de servidor Nombre de impresora Microsoft XPS Document Writer Nombre del recurso compartido Nombre de controlador Microsoft XPS Document Writer v4 Nombre del puerto PORTPROMPT: Comentario Ubicaci�n Procesador de impresi�n winprint Tipo de datos RAW Par�metros Atributos 576 Prioridad 1 Prioridad predeterminada 0 N�mero medio de p�ginas por minuto 0 Estado de la impresora Inactivo Estado de impresora extendido Desconocido Estado de error detectado Desconocido Estado de error detectado extendido Desconocido Nombre de servidor Nombre de impresora Fax Nombre del recurso compartido Nombre de controlador Microsoft Shared Fax Driver Nombre del puerto SHRFAX: Comentario Ubicaci�n Procesador de impresi�n winprint Tipo de datos RAW Par�metros Atributos 16448 Prioridad 1 Prioridad predeterminada 0 N�mero medio de p�ginas por minuto 0 Estado de la impresora Inactivo Estado de impresora extendido Desconocido Estado de error detectado Desconocido Estado de error detectado extendido Desconocido N�mero de impresoras y conexiones locales enumeradas 3';
  4.  
  5. $resultados = array();
  6. preg_match_all('/Nombre de impresora ([a-zA-Z0-9 ]+) Nombre del recurso/',$texto,$resultados,PREG_SET_ORDER);
  7.  
  8. echo '<pre>';
  9. var_dump($resultados);
  10. echo '</pre>';


lo aplique de esta forma pero me arroja un error.

private function listarImpresoras(){
$lista ="Cscript C:\\Windows\\System32\\Printing_Admin_Scripts\\es-ES\\prnmngr.vbs -l";
$ejecucion = system($lista, $resultado);
$resultado = array();
preg_match_all('/Nombre de impresora ([a-zA-Z0-9 ]+) Nombre del recurso/',$texto,$resultado,PREG_SET_ORDER);
return $ejecucion;
}

a que apunta la variable $texo??
  #5 (permalink)  
Antiguo 20/06/2013, 13:55
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: recorrer un String en php

la variable $texto es la que contiene el texto donde buscar (el resultado que arroja system), la variable $resultado es donde preg_match_all() guarda las coincidencias encontradas con el patron, en tu caso sería algo así....

Código PHP:
Ver original
  1. private function listarImpresoras(){
  2.     $lista ="Cscript C:\\Windows\\System32\\Printing_Admin_Scripts\\es-ES\\prnmngr.vbs -l";
  3.     $ejecucion = system($lista, $respuesta);
  4.     $resultado = array();
  5.     preg_match_all('/Nombre de impresora ([a-zA-Z0-9 ]+) Nombre del recurso/',$respuesta,$resultado,PREG_SET_ORDER);
  6.  
  7.     /**
  8.      * aquí depende, si quieres las impresoras encontradas sería $resultado,
  9.      * ahora, si quieres la ejecución del comando system pues es $ejecucion,
  10.      * aunque no tendría logica el buscar las impresoras si no vas a hacer nada con ellas...
  11.      */
  12.     return $ejecucion;
  13. }

PD Lee con mas detenimiento el ejemplo que deje, o mejor aún, consulta el manual de PHP que para eso esta!
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #6 (permalink)  
Antiguo 20/06/2013, 14:24
 
Fecha de Ingreso: junio-2013
Ubicación: Santiago
Mensajes: 19
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: recorrer un String en php

Cita:
Iniciado por Nemutagk Ver Mensaje
la variable $texto es la que contiene el texto donde buscar (el resultado que arroja system), la variable $resultado es donde preg_match_all() guarda las coincidencias encontradas con el patron, en tu caso sería algo así....

Código PHP:
Ver original
  1. private function listarImpresoras(){
  2.     $lista ="Cscript C:\\Windows\\System32\\Printing_Admin_Scripts\\es-ES\\prnmngr.vbs -l";
  3.     $ejecucion = system($lista, $respuesta);
  4.     $resultado = array();
  5.     preg_match_all('/Nombre de impresora ([a-zA-Z0-9 ]+) Nombre del recurso/',$respuesta,$resultado,PREG_SET_ORDER);
  6.  
  7.     /**
  8.      * aquí depende, si quieres las impresoras encontradas sería $resultado,
  9.      * ahora, si quieres la ejecución del comando system pues es $ejecucion,
  10.      * aunque no tendría logica el buscar las impresoras si no vas a hacer nada con ellas...
  11.      */
  12.     return $ejecucion;
  13. }

PD Lee con mas detenimiento el ejemplo que deje, o mejor aún, consulta el manual de PHP que para eso esta!
el objetivo de buscar el nombre de las impresoras es crear un listado de las impresoras que estén o sean reconocidas en el sistema, adquirido ese resultado, se lo puedo entregar como parámetro a otra función que creé, la cual puede reconocer el nombre de la impresora y darle las ordenes de impresiones,


PD: si he leído la documentación, pero aun así no doy con el resultado,
  #7 (permalink)  
Antiguo 20/06/2013, 14:29
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: recorrer un String en php

pues entonces en return coloca $resultado y tendrás un array con las impresoras encontradas, ya sería cuestión del otro método leer ese array y obtener la impresora deseada...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #8 (permalink)  
Antiguo 24/06/2013, 13:57
 
Fecha de Ingreso: junio-2013
Ubicación: Santiago
Mensajes: 19
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: recorrer un String en php

Código PHP:
Ver original
  1. private function listarImpresoras(){
  2.         $lista = ruta del .exe";
  3.        $ejecucion = exec($lista);
  4.        $resultado = explode("*", $ejecucion,-1);
  5.        return $resultado;
  6.    }

al final realice algu muy distinto, pero funciona, cree una aplicacion de consola que recorriera el sistema y me capturar los nombres de las impresoras en el sistema y que cada vez que encontrara una la separara con un (*) y eso lo aplique en la siguiente funcion, espero que les sirva de algo, lo que es a mi me funciona de las mil maravillas =)
  #9 (permalink)  
Antiguo 24/06/2013, 20:35
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: recorrer un String en php

Solo como dato, esa solución es "especial", ya que haces uso de un .exe que tu has programado, y que no es publico, por lo cual nadie mas podría implementar tu solución, al menos no sin saber como esta hecho el exe que comentas (ya que tu lo programaste), por lo cual solo es una solución para tu caso, mas no para alguien mas que pueda tener el mismo requerimiento....
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)

Etiquetas: string
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:28.