Como le harнan para almacenar un arreglo en MYSQL???
#1

Mi pregunta duda o consulta es:
ustedes como le harнan para almacenar un arreglo de variables en un campo de un registro en mysql por medio de un script en pawn

por ejemplo:
new arreglo[5] = {9, 128, 15, 81, 512};

como almacenarнan ese arreglo en un solo campo de un registro
Reply
#2

Quote:
Originally Posted by Miguel_Leopold
Посмотреть сообщение
Mi pregunta duda o consulta es:
ustedes como le harнan para almacenar un arreglo de variables en un campo de un registro en mysql por medio de un script en pawn

por ejemplo:
new arreglo[5] = {9, 128, 15, 81, 512};

como almacenarнan ese arreglo en un solo campo de un registro
no entiendo muy bien tu pregunta pero que es lo que quieres en realidad hacer ??
Reply
#3

Ps facilmente, juntas todos los valores en un string, algo asн
pawn Код:
new arreglo[5] ={9, 128, 15, 81, 512};
new tmp[32];
format(tmp, 32, "%d %d %d %d %d", arrreglo[0], arreglo[1], arreglo[2], arreglo[3], arreglo[4]]);
//  Lo que guardaras es el tmp
y lo subes como string, a la hora de usarlo lo "desformateas" o lo "spliteas", puedes usar sscanf

pawn Код:
new arreglo[5];

if(sscanf(retdata, "ddddd", arreglo[0], arreglo[1], arreglo[2], arreglo[3], arreglo[4])) return print("No se pudo desformatear!");

// Ya tienes el arreglo exactamente igual!
Donde retdata es el dato que retornу la columna de donde lo guardaste como string
Reply
#4

Muy buen mйtodo, gracias

Pero acabo de hacer algo diferente, cree dos funciones para codificar y decodificar un arreglo de forma binaria, y a decir verdad resulto mбs rбpido y utiliza menos memoria para cuando los nъmeros tienen mбs de 5 dнgitos ( >= 10000) y aparte no necesito usar sscanf.

pawn Код:
stock codificar(arreglo[], resultado[], length) //en length ponen el tamaсo del array que deseen codificar
{
    new indexS = 0;
    new num[4][2] = {
        {127, 128},
        {32512, 32768},
        {8323072, 8388608},
        {2130706432, -2147483648}
    };
    for(new i = 0; i < length; i++)
    {
        new errata = 0;
        for(new j = 0; j < 4; j++)
        {
            resultado[indexS + j] = (arreglo[i] & num[j][0]) >>> (j * 8);
            errata |= (arreglo[i] & num[j][1])?(1 << j):(0);
            if(resultado[indexS + j] == 0) resultado[indexS + j] = 128;
        }
        if(errata == 0) errata = 128;
        resultado[indexS + 4] = errata;
        indexS += 5;
    }
    return 1;
}

stock decodificar(arreglo[], resultado[])
{
    new indexR = 0;
    new idx = 0;
    for(new i = 0; arreglo[i] != 0; i++)
    {
        if(idx == 32)
        {
            if(arreglo[i] != 128)
            {
                if(arreglo[i] & 1) resultado[indexR] |= 128;
                if(arreglo[i] & 2) resultado[indexR] |= 32768;
                if(arreglo[i] & 4) resultado[indexR] |= 8388608;
                if(arreglo[i] & 8) resultado[indexR] |= -2147483648;
            }
            idx = 0;
            indexR++;
            continue;
        }
        if(arreglo[i] != 128)
        {
            resultado[indexR] |= (arreglo[i] << idx);
        }
        idx += 8;
    }
    return 1;
}

Y considerando todas las posibilidades se puede decir que es mejor, ya que por ejemplo un arreglo de tamaсo 63 en el peor de los casos en todos los slots el numero serнa de -2147483648 (11 caracteres) e incluyendo el caracter separador se necesitarнa un string de tamaсo 756 y con las funciones de codificar y decodificar se reducirнa a un string de tamaсo 315 (se reduce mбs de la mitad).

En cuestiones de probabilidad en 10000^63 posibilidades, el mйtodo que jovanny posteo utiliza menos espacio que mi mйtodo. Y con mi mйtodo existen 4294957295^63 posibles casos en que mi mйtodo utiliza menos espacio.

En cuestiones de tiempo de procesamiento no estoy seguro, despuйs harй las pruebas para saber cual es el que corra mбs rбpido.

Sй que parece una tonterнa el estar calculando todo eso, pero a mi me parece algo increнble para admirar xd.
Reply
#5

Dije que podнas usar sscanf, no obligatoriamente, aun no me manejo mucho con binario.. pero en eso ando, aprendiendo..
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)