Alterserv

RaptorCache => Plugins para RaptorCache => Mensaje publicado por: oogie.boogie en Enero 17, 2014, 11:13:46 AM

Título: Consulta ¿?
Publicado por: oogie.boogie en Enero 17, 2014, 11:13:46 AM
Hola: alguien me podria explicar cual es la diferencia entre este codigo ???
string get_filename(string url) {
                vector<string> resultado;
                if (url.find("?") != string::npos) {
                        stringexplode(url, "?", &resultado);
                        stringexplode(resultado.at(resultado.size()-2), "/", &resultado);
                        return resultado.at(resultado.size()-1);           
                } else {
                        stringexplode(url, "/", &resultado);
                        return resultado.at(resultado.size()-1);
                }
}

y este otro  ???
string get_filename(string url) {
        vector<string> resultado;
        if (url.find("?") != string::npos) {
            stringexplode(url, "?", &resultado);
            stringexplode(resultado.at(resultado.size()-2), "/", &resultado);
            return resultado.at(resultado.size()-4) + "_" + resultado.at(resultado.size()-3) + "_" + resultado.at(resultado.size()-2) + "_" +resultado.at(resultado.size()-1);           
        } else {
            stringexplode(url, "/", &resultado);
            return resultado.at(resultado.size()-4) + "_" + resultado.at(resultado.size()-3) + "_" + resultado.at(resultado.size()-2) + "_" +resultado.at(resultado.size()-1); ;
        }
}

o dicho de otra manera, por que en algunos casos se usa el primer codigo en la estructura if...else y en otros el segundo, e incluso, he llegado a ver que a veces ese loop se repite hasta un numero de 6,  ???
string get_filename(string url) {
                vector<string> resultado;
                if (url.find("?") != string::npos) {
                        stringexplode(url, "?", &resultado);
                        stringexplode(resultado.at(resultado.size()-2), "/", &resultado);
                        return resultado.at(resultado.size()-6) + "_" + resultado.at(resultado.size()-5) + "_" + resultado.at(resultado.size()-4) + "_" + resultado.at(resultado.size()-3) + "_" + resultado.at(resultado.size()-2) + "_" +resultado.at(resultado.size()-1);           
                } else {
                        stringexplode(url, "/", &resultado);
                        return resultado.at(resultado.size()-6) + "_" + resultado.at(resultado.size()-5) + "_" + resultado.at(resultado.size()-4) + "_" + resultado.at(resultado.size()-3) + "_" + resultado.at(resultado.size()-2) + "_" +resultado.at(resultado.size()-1); ;
                }
}

ya que me gustaria aprender en que casos se debe usar uno u otro.
Gracias
Título: Re:Consulta ¿?
Publicado por: peguerojs en Enero 17, 2014, 12:20:45 PM
Cita de: oogie.boogie en Enero 17, 2014, 11:13:46 AM
Hola: alguien me podria explicar cual es la diferencia entre este codigo ???
string get_filename(string url) {
                vector<string> resultado;
                if (url.find("?") != string::npos) {
                        stringexplode(url, "?", &resultado);
                        stringexplode(resultado.at(resultado.size()-2), "/", &resultado);
                        return resultado.at(resultado.size()-1);           
                } else {
                        stringexplode(url, "/", &resultado);
                        return resultado.at(resultado.size()-1);
                }
}

y este otro  ???
string get_filename(string url) {
        vector<string> resultado;
        if (url.find("?") != string::npos) {
            stringexplode(url, "?", &resultado);
            stringexplode(resultado.at(resultado.size()-2), "/", &resultado);
            return resultado.at(resultado.size()-4) + "_" + resultado.at(resultado.size()-3) + "_" + resultado.at(resultado.size()-2) + "_" +resultado.at(resultado.size()-1);           
        } else {
            stringexplode(url, "/", &resultado);
            return resultado.at(resultado.size()-4) + "_" + resultado.at(resultado.size()-3) + "_" + resultado.at(resultado.size()-2) + "_" +resultado.at(resultado.size()-1); ;
        }
}

o dicho de otra manera, por que en algunos casos se usa el primer codigo en la estructura if...else y en otros el segundo, e incluso, he llegado a ver que a veces ese loop se repite hasta un numero de 6,  ???
string get_filename(string url) {
                vector<string> resultado;
                if (url.find("?") != string::npos) {
                        stringexplode(url, "?", &resultado);
                        stringexplode(resultado.at(resultado.size()-2), "/", &resultado);
                        return resultado.at(resultado.size()-6) + "_" + resultado.at(resultado.size()-5) + "_" + resultado.at(resultado.size()-4) + "_" + resultado.at(resultado.size()-3) + "_" + resultado.at(resultado.size()-2) + "_" +resultado.at(resultado.size()-1);           
                } else {
                        stringexplode(url, "/", &resultado);
                        return resultado.at(resultado.size()-6) + "_" + resultado.at(resultado.size()-5) + "_" + resultado.at(resultado.size()-4) + "_" + resultado.at(resultado.size()-3) + "_" + resultado.at(resultado.size()-2) + "_" +resultado.at(resultado.size()-1); ;
                }
}

ya que me gustaria aprender en que casos se debe usar uno u otro.
Gracias
esta muy buena tu pregunta esteremos atento a las respuestas de los moderadores ya que yo también tengo esa inquietud
Título: Re:Consulta ¿?
Publicado por: luistec en Enero 20, 2014, 09:49:58 AM
Bueno, para responder esta pregunta lo voy a hacerlo con un ejemplo.

Para este ejemplo utilizare la siguiente url
http://espndeportes-assets.espn.go.com/2003/photos2014/0119/collage134.jpg

1.- Si en el codigo se usa

stringexplode(resultado.at(resultado.size()-2), "/", &resultado);
return resultado.at(resultado.size()-1);

Lo que hará el codigo será buscar desde el final de la línea la cadena "/" y despues de ese valor será el resultado que se grabara en la base de datos, en este caso el resultado sería "collage134.jpg"

2.- Si en el codigo se usa
stringexplode(resultado.at(resultado.size()-2), "/", &resultado);
return resultado.at(resultado.size()-2) + "_" + resultado.at(resultado.size()-1);

Lo que hará el codigo será buscar desde el final de la línea la cadena "/" y el resultado será lo que sigue despues del segundo "/", entonces el resultado que se grabara en la base de datos sera "0119_collage134.jpg"; tambien se puede ver que el "/" que va al medio ha sido remplazado por el "_", si uno observa en la misma linea del codigo puede ver este reemplazo.

Así este proceso se puede hacer sucesivamente, y porque se hace esto? ya que hay ocasiones en que las URLs de algunos contenidos en la parte final son iguales, pero los contenidos son diferentes; uno revisando las urls puede ver en que parte se diferencian y de acuerdo esto emplear el codigo respectivo, ya que si no se hace esto al momento de hacer HIT nos provocará un error o nos mostrara una imagen u otro contenido que no corresponde.

Saludos.
Título: Re:Consulta ¿?
Publicado por: firecold en Enero 20, 2014, 10:42:15 AM
Gracias Luistec, mas claro ni el agua, Saludos
Título: Re:Consulta ¿?
Publicado por: oogie.boogie en Enero 20, 2014, 11:50:56 AM
Muchas gracias por aclararme algo que tenia agarrado con alfileres, ahora esta todo mucho mas claro. :-*
Un cordial saludo !!  :)
PD: amigo firecold, la consulta ya esta contestada por el amigo luistec, cuando te conteste por el foro de thunder, aun no habia leido este mensaje, gracias de todos modos y hasta la proxima.