¿Como extraer cadenas especificas de un perfil wireless xml?

Iniciado por Romualdo23, 24 Abril 2015, 04:45 AM

0 Miembros y 1 Visitante están viendo este tema.

ivancea96

Son de la librería <iostream>.

Cuando tengas esas dudas, te es más cómodo escribir "cout" en Google, y ya obtienes la solución :/

Romualdo23

#11
Vale, vamos avanzando, habia que añadir esto:

Código (cpp) [Seleccionar]
using std::string;
using std::cout;
using std::endl;


Ahora si me devuelve la posicion con:

Código (cpp) [Seleccionar]
cout << endl << L"INFO: begin_pos: " << begin_pos;
cout << endl << L"INFO: end_pos: " << end_pos;




Ahora solo falta extraer la cadena, he probado con

Código (cpp) [Seleccionar]
wprintf(L"\nINFO: Nombre del perfil: ", extract);

Pero no devuelve nada.

Edito:

Bueno, esto va mejorando.. Ahora ya me muestra algo, pero parece que por algun motivo, no se selecciona bien la longitud de los datos que tiene que extraer y me muestra mas caracteres de los que deberia:



El comienzo lo hace bien ya que se puede ver que comienza a extraer desde "MiRed", pero como digo, la longiud de los datos que captura no es la correcta, deberia capturar solo hasta "</name>", quedando en consola solamente "MiRed"

Este es el codigo que utilizo:

   
Código (cpp) [Seleccionar]
int size = 1000;

   std::string text(profBuffer, profBuffer+ size);

   std::string begin_text("<name>");
   std::string end_text("</name>");

   size_t begin_pos = text.find(begin_text) + begin_text.length();
   size_t end_pos = text.find(end_text);

   std::string extract = text.substr(begin_pos,end_pos);

   const char* NombrePerfil = extract.c_str();

   std::cout << NombrePerfil << std::endl;


Edito de nuevo:

Pues ya esta resuelto, con tantos cambios habia olvidado reemplazar otra vez la linea que me dijiste ayer:

Código (cpp) [Seleccionar]
std::string extract = text.substr(begin_pos,end_pos);

                                                                         Por

Código (cpp) [Seleccionar]
std::string extract = text.substr(begin_pos,end_pos-begin_pos);


Una ultima pregunta..

Es posible guardar los datos extraidos en una variable, para utilizar posteriormente esos datos sin tener que volver a consultar el perfil xml?

ivancea96

Cita de: Romualdo23 en 25 Abril 2015, 17:51 PM
Vale, vamos avanzando, habia que añadir esto:

Código (cpp) [Seleccionar]
using std::string;
using std::cout;
using std::endl;


Si quieres puedes poner solo:
Código (cpp) [Seleccionar]
using namespace std;


Los datos extraidos ya los tienes en extract, no?

Romualdo23

Si, pero me refiero a si quiero utilizar los datos en otra funcion. Primero habria que crear una variable global para pasarle los datos extraidos y luego esa variable poder usarla en cualquier parte del codigo.

En vb.net se hacerlo, pero no en C++


ivancea96

Código (cpp) [Seleccionar]
std::string text(profBuffer, profBuffer+ size)
Esa variable haces con ella lo que quieras.

Romualdo23

Pero ilustrame un poco hombre, que nunca he tocado este lenguaje de programacion..

Un pequeño ejemplo o algo, no se..

ivancea96

Como en VB, son variables. No hay mucho no obvio que decir de ellas. En VB son paredicas. Con esa string haces lo que quieras, se la mandas a funciones, la copias en otra variable, lo que sea.