consulta sobre Split o strtok en c++

Iniciado por xkiz ™, 25 Junio 2011, 19:41 PM

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

xkiz ™

bue, antes que nada vale la pena aclarar que busque en google el foro mismo y o no encontre lo que buscaba o no lo supe entender, por eso posteo esto aqui.

cuando arme esto en mi cabeza sonaba mas facil o no tan complicado almenos.

archivo.rc
Código (cpp) [Seleccionar]

STRINGTABLE DISCARDABLE
BEGIN
   201 "a01|a02|a03|a04"
   202 "b01|b02|b03|b04"
   203 "c01|c02|c03|c04"
   204 "d01|d02|d03|d04"
   205 "e01|e02|e03|e04"
   206 "f01|f02|f03|f04"
   207 "g01|g02|g03|g04"
END


necesito cargar esos  valores de StringTable en un ListView, lo que estoy tratando de hacer y no me sale es lo siguiente:

Código (cpp) [Seleccionar]

#include <windows.h>

void Split(char *str){
TCHAR STRING[350];
char * pch;
char * pch2;

pch = strtok(str, ",");
while(pch!=NULL){
LoadString(NULL, atoi(pch), STRING, sizeof(STRING));

pch2 = strtok(STRING, "|");
while(pch2!=NULL){
OutputDebugString((LPCTSTR) pch2);
pch2 = strtok(NULL, "|");
}
pch = strtok(NULL, ",");
}
}

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow){
Split("201,202,203,204,205,206,207");
return 0;
}


osea asi es como se me ocurrio hacerlo a mi, pero aparentemente eso esta mal, y no se realmente como hacer parahacer el split para recorrer todo los valores....


PD: estoy trabajano en VC++ 6.0,  Not using MFC

leogtz

Te dejo un ejemplo:

#include <stdio.h>
#include <string.h>

char txt[] = "201 a01|a02|a03|a04";
int main(void)
{
    char *trozo = strtok(txt, "|");
    while(trozo != NULL)
    {
        printf("Valor : %s\n", trozo);
        trozo = strtok(NULL, "|");
    }
    return 0;
}
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

xkiz ™

#2
mmmmmmmm. me perdi, osea lo que necesito es hacer un strtok dentro de otro, el primero me da el id que uso para cargar con LoadString el stringtable X y a ese stringtable X hacer otro strtok para parsear los "|".

el string de Split() cambia.

Código (cpp) [Seleccionar]

Split("201,202,203,204,205,206,207");
//Split("301,302,303,304,305,306,307");
//Split("401,402,403,404,405,406,407");
// ....
}


xkiz ™

creo que encontre un articulo donde muestra como hacer lo que yo estababuscando como hacer, aqui dejo el link por si a alguien le interesa o.....
Link: Simple string parsing in nested loops (codeproject)

PD: si alguien sabe de alguna forma mas simple de hacer eso, avise, toda sugerencia siempre es bienvenida.