[Include] bCini2 (Cache Include File) - Tуpico Oficial
#1

BY BIEL_COP ~>

O projeto da bCini comeзou quando eu nao tinha muito conhecimento em manuseiar arquivos.

Porйm de uns tempos para cб eu venho me aprofundando nisto, eu nao sou o melhor (e nunca serei), porйm o meu esforзo foi recompensado com a criaзao da bCini2!

Agora totalmente em cachк, a bCini2 estб 970x mais rбpida que a Dini e 2x mais rбpida que a DOF2 (em alguns casos), tambйm podendo competir com a bIni.

Obs: A include й muito leve, puxa muito pouco processamento de Amx (eu acho que й isto) e realmente dб um tom diferente, principalmente para iniciantes que querem comeзar aprendendo pelo prуprio portuguкs.

bCini2_Criar


A funзao й usada para criar arquivos.

Exemplo de Uso:

pawn Код:
main()
{
      bCini2_Criar("Biel_COP.ini");
}
bCini2_Existe


A funзao й usada como um fexist, ou seja, para verificar se o tal arquivo existe.

Exemplo de Uso:

pawn Код:
main()
{
      if(bCini2_Existe("Biel_COP.ini"))
      {
           return 1;
      }
}
bCini2_Remover


A funзao й usada para remover um arquivo jб criado.

Exemplo de Uso:

pawn Код:
main()
{
      bCini2_Remover("Biel_COP.ini");
}
bCini2_SetarInt


A funзao й usada para setar em um arquivo as ints, ou seja: valores de alguma variбvel, etc.

Exemplo de Uso:

pawn Код:
main()
{
      bCini2_SetarInt("Biel_COP.ini","Olб",1);
}
bCini2_SetarBool


A funзao й usada para setar em um arquivo as variбveis booleanas em um arquivo.

Exemplo de Uso:

pawn Код:
main()
{
      bCini2_SetarBool("Biel_COP.ini","Olб",false);
}
bCini2_SetarFloat


A funзao й usada para setar em um arquivo as floats, ou seja: posiзoes, vida de um jogador, etc.

Exemplo de Uso:

pawn Код:
main()
{
      bCini2_SetarFloat("Biel_COP.ini","Olб",0.0);
}
bCini2_SetarTexto


A funзao й usada para setar em um arquivo algum texto.

Exemplo de Uso:

pawn Код:
main()
{
      bCini2_SetarTexto("Biel_COP.ini","Olб","Como vocк vai ?");
}
bCini2_GetarInt


A funзao й usada para ler em um arquivo uma int jб setada.

Exemplo de Uso:

pawn Код:
main()
{
      printf("%d",bCini2_GetarInt("Biel_COP.ini","Olб"));
}
bCini2_GetarBool


A funзao й usada para ler em um arquivo uma booleana jб setada.

Exemplo de Uso:

pawn Код:
main()
{
      printf("%d",bCini2_GetarBool("Biel_COP.ini","Olб"));
}
bCini2_GetarFloat


A funзao й usada para ler em um arquivo um float jб setado.

Exemplo de Uso:

pawn Код:
main()
{
      printf("%f",bCini2_GetarFloat("Biel_COP.ini","Olб")) ;
}
bCini2_GetarTexto


A funзao й usada para ler em um arquivo um texto jб setado.

Exemplo de Uso:

pawn Код:
main()
{
      printf("%s",bCini2_GetarTexto("Biel_COP.ini","Olб")) ;
}
bCini2_Copiar


Em algumas includes .ini, esta funзao tem um uso prуprio para copiar arquivos.

Na bCini vocк nao gasta muitas linhas!

Com uma lуgica bem simples, ao invйs de usar isto:

pawn Код:
main()
{
      DOF2_CopyFile("Biel_COP.ini","Biel_COP2.ini");
      DOF2_RemoveFile("Biel_COP.ini");
}
Vocк pode usar isto para copiar e logo apуs deletar o arquivo:

pawn Код:
main()
{
      bCini2_Copiar("Biel_COP.ini","Biel_COP2.ini",true);
}
Para apenas copiar, use isto:

pawn Код:
main()
{
      bCini2_Copiar("Biel_COP.ini","Biel_COP2.ini",false);
}
Entenderam ? Simples, nao ?

bCini2_Console


A funзao й usada para mostrar todas as configuraзoes (Linha e Valor) de um arquivo no console.

Exemplo de uso:

pawn Код:
main()
{
      bCini2_Console("Biel_COP.ini");
}
Resultado:



Cуdigo usado:

pawn Код:
main()
{
      bCini2_Criar("Biel_COP.ini");
      bCini2_SetarTexto("Biel_COP.ini","Admin","Fundador" );
      bCini2_SetarTexto("Biel_COP.ini","Gosta","De Pepecas");
      bCini2_SetarInt("Biel_COP.ini","Faleceu",0);
      bCini2_Console("Biel_COP.ini");
}
bCini2_LimparArquivo


Como o prуprio nome diz, esta funзao faz a limpa de todo o conteъdo do arquivo especificado.

Exemplo de Uso:

pawn Код:
main()
{
      bCini2_LimparArquivo("Biel_COP.ini");
}
bCini2_Setado


Com esta funзao, vocк pode verificar se existe tal linha no arquivo especificado.

Exemplo de Uso:

pawn Код:
main()
{
      if(bCini2_Setado("Biel_COP.ini","Admin"))
      {
             return 1;
      }
      return 0;
}
bCini2_Desescrever


A funзao й usada para desescrever alguma linha do arquivo especificado.

Exemplo de Uso:

pawn Код:
main()
{
      bCini2_Desescrever("Biel_COP.ini","Admin");
}
A include tambйm possui vбrias 'funзoes redirecionadoras', que sao elas ~>

pawn Код:
#define bCini2_Abrir fopen
#define bCini2_Existe fexist
#define bCini2_Escrever fwrite
#define bCini2_Ler fread
#define bCini2_Fechar fclose
Tambйm й possнvel editб-la para que fique mais leve (ou mais pesada), de acordo com o seu gamemode:

pawn Код:
#define bCini2_Linhas 100
#define bCini2_Capacidade1 128
#define bCini2_Capacidade2 1280
#define bCini2_Separador "="
Obs: Й Recomendбvel que vocк mude de acordo com o seu gamemode, pois caso nao mude, complicaзoes ocorrerao.

Obs І: Caso estas definiзoes sejam suficientes para suprir as nescessidades do seu gamemode, deixe como estб.

bCini e bCini2


Quais sao as mudanзas ?

Bom, mais funзoes, mais leveza, mais rapidez e um cуdigo mais limpo e menos pesado.

Eu fiz alguns testes de velocidade com a bCini e a bCini2, criando / setando / lendo e fechando 1000 arquivos e o resultado foi este:



Como podem ver, ela realmente estб muito mais rбpida.

Download e Crйditos


IpsBruno: Ajudou na primeira Include (bCini), muito obrigado mano!
zSuYaNw: Ajudou na funзao de criar arquivos, valeu gato!
Willian_Luigi: Ajudou na funзao de Setar Textos, й nуis!
DracoBlue: Propфs uma lуgica melhor em questao da bCini2_GetarTexto, й nois gringo dlз!
Biel_COP: Idealizador da bCini e programador total da bCini2.


pawn Код:
// bCini2

#define bCini2_Linhas 100
#define bCini2_Capacidade1 128
#define bCini2_Capacidade2 1280
#define bCini2_Separador "="

// Arquivos 1

#define bCini2_Abrir fopen
#define bCini2_Existe fexist
#define bCini2_Escrever fwrite
#define bCini2_Ler fread
#define bCini2_Fechar fclose

// Arquivos 2

#define bCini2_Criar(%0) if(!bCini2_Existe(%0)) bCini2_Fechar(bCini2_Abrir(%0,io_write))
#define bCini2_Remover(%0) if(bCini2_Existe(%0)) fremove(%0)

stock Include_Texto_bCini2[bCini2_Capacidade1];

#define bCini2_SetarInt(%0,%1,%2) format(Include_Texto_bCini2,sizeof(Include_Texto_bCini2),"%d",%2) && bCini2_SetarTexto(%0,%1,Include_Texto_bCini2)
#define bCini2_SetarBool(%0,%1,%2) format(Include_Texto_bCini2,sizeof(Include_Texto_bCini2),"%d",%2) && bCini2_SetarTexto(%0,%1,Include_Texto_bCini2)
#define bCini2_SetarFloat(%0,%1,%2) format(Include_Texto_bCini2,sizeof(Include_Texto_bCini2),"%f",%2) && bCini2_SetarTexto(%0,%1,Include_Texto_bCini2)

#define bCini2_GetarInt(%0,%1) strval(bCini2_GetarTexto(%0,%1))
#define bCini2_GetarBool(%0,%1) bool:strval(bCini2_GetarTexto(%0,%1))
#define bCini2_GetarFloat(%0,%1) floatstr(bCini2_GetarTexto(%0,%1))

// Variбveis

stock bCini2_Cache_Linha_Valor[bCini2_Linhas][bCini2_Capacidade1];
stock bCini2_Nome_Arquivo[bCini2_Capacidade1];
stock bCini2_Linhas_Arquivo;

// Funзхes Usadas

stock bCini2_SetarTexto(arquivo[],linha[],valor[])
{
    SetarTexto:

    if(bCini2_Existe(arquivo))
    {
        if(!strlen(linha))
        {
            strmid(linha,"(null)",0,6,bCini2_Capacidade1);
        }
        if(!strlen(valor))
        {
            strmid(valor,"(null)",0,6,bCini2_Capacidade1);
        }
        bCini2_AbrirArquivo(arquivo);

        new Linha_Valor[bCini2_Capacidade1]; format(Linha_Valor,sizeof(Linha_Valor),"%s%s%s\r\n",linha,bCini2_Separador,valor);

        for(new i; i<bCini2_Linhas_Arquivo; i++)
        {
            if(strlen(bCini2_Cache_Linha_Valor[i]) >= 1)
            {
                if(strfind(bCini2_Cache_Linha_Valor[i],linha,true) != -1)
                {
                    strmid(bCini2_Cache_Linha_Valor[i],Linha_Valor,0,strlen(Linha_Valor),bCini2_Capacidade1);
                    return 1;
                }
            }
        }
        strmid(bCini2_Cache_Linha_Valor[bCini2_Linhas_Arquivo],Linha_Valor,0,strlen(Linha_Valor),bCini2_Capacidade1);
        bCini2_Linhas_Arquivo++;
    }
    else
    {
        goto SetarTexto;
    }
    return 1;
}
stock bCini2_GetarTexto(arquivo[],linha[])
{
    if(bCini2_Existe(arquivo))
    {
        bCini2_AbrirArquivo(arquivo);

        if(strlen(linha) != 0)
        {
            if(strlen(linha)+2 < bCini2_Capacidade1)
            {
                new bCini2_Texto_Arquivo[bCini2_Capacidade1];

                for(new i; i<bCini2_Linhas_Arquivo; i++)
                {
                    if(strlen(bCini2_Cache_Linha_Valor[i]) >= 1)
                    {
                        if(strfind(bCini2_Cache_Linha_Valor[i],linha,true) != -1)
                        {
                            strmid(bCini2_Texto_Arquivo,bCini2_Cache_Linha_Valor[i],0,strlen(bCini2_Cache_Linha_Valor[i]),bCini2_Capacidade1);

                            bCini2_rn(bCini2_Texto_Arquivo);
                            strmid(bCini2_Texto_Arquivo,bCini2_Texto_Arquivo,strlen(linha)+1,strlen(bCini2_Texto_Arquivo),bCini2_Capacidade1);

                            return bCini2_Texto_Arquivo;
                        }
                    }
                }
            }
        }
    }
    new bCini2_Texto_Arquivo_Final[bCini2_Capacidade1];
    return bCini2_Texto_Arquivo_Final;
}
stock bCini2_Copiar(arquivo[],arquivo2[],bool:remover)
{
    if(bCini2_Existe(arquivo))
    {
        if(!bCini2_Existe(arquivo2))
        {
            bCini2_AbrirArquivo(arquivo);

            new bCini2_Texto_Arquivo[bCini2_Capacidade2],File:bCini2_Files;

            for(new i; i<bCini2_Linhas_Arquivo; i++)
            {
                if(strlen(bCini2_Cache_Linha_Valor[i]) >= 1)
                {
                    format(bCini2_Texto_Arquivo,sizeof(bCini2_Texto_Arquivo),"%s%s",bCini2_Texto_Arquivo,bCini2_Cache_Linha_Valor[i]);
                }
            }
            bCini2_Files = bCini2_Abrir(arquivo2,io_write);
            bCini2_Escrever(bCini2_Files,bCini2_Texto_Arquivo);
            bCini2_Fechar(bCini2_Files);

            if(remover == true)
            {
                bCini2_FecharArquivo();
                bCini2_Remover(arquivo);
            }
        }
    }
    return 1;
}
stock bCini2_Setado(arquivo[],linha[])
{
    if(bCini2_Existe(arquivo))
    {
        bCini2_AbrirArquivo(arquivo);

        for(new i; i<bCini2_Linhas_Arquivo; i++)
        {
            if(strlen(bCini2_Cache_Linha_Valor[i]) >= 1)
            {
                if(strfind(bCini2_Cache_Linha_Valor[i],linha,true) != -1)
                {
                    return 1;
                }
            }
        }
    }
    return 0;
}
stock bCini2_Desescrever(arquivo[],linha[])
{
    if(bCini2_Existe(arquivo))
    {
        bCini2_AbrirArquivo(arquivo);

        for(new i; i<bCini2_Linhas_Arquivo; i++)
        {
            if(strlen(bCini2_Cache_Linha_Valor[i]) >= 1)
            {
                if(strfind(bCini2_Cache_Linha_Valor[i],linha,true) != -1)
                {
                    strmid(bCini2_Cache_Linha_Valor[i],"",0,strlen(""),bCini2_Capacidade1);
                    bCini2_Linhas_Arquivo--;

                    break;
                }
            }
        }
    }
    return 1;
}
stock bCini2_LimparArquivo(arquivo[])
{
    if(bCini2_Existe(arquivo))
    {
        bCini2_AbrirArquivo(arquivo);

        for(new i; i<bCini2_Linhas_Arquivo; i++)
        {
            if(strlen(bCini2_Cache_Linha_Valor[i]) >= 1)
            {
                strmid(bCini2_Cache_Linha_Valor[i],"",0,strlen(""),bCini2_Capacidade1);
                bCini2_Linhas_Arquivo--;
            }
        }
    }
    return 1;
}
stock bCini2_Console(arquivo[])
{
    if(bCini2_Existe(arquivo))
    {
        bCini2_AbrirArquivo(arquivo);
        printf("Console do Arquivo %s:\r\n",arquivo);

        for(new i; i<bCini2_Linhas_Arquivo; i++)
        {
            if(strlen(bCini2_Cache_Linha_Valor[i]) >= 1)
            {
                print(bCini2_Cache_Linha_Valor[i]);
            }
        }
    }
    return 1;
}
// Funзхes Inusadas

stock bCini2_AbrirArquivo(arquivo[])
{
    if(bCini2_Existe(arquivo))
    {
        if(strlen(bCini2_Nome_Arquivo))
        {
            if(strcmp(bCini2_Nome_Arquivo,arquivo,true) == 0)
            {
                return 1;
            }
            else
            {
                bCini2_FecharArquivo();
            }
        }
        new bCini2_Files[bCini2_Capacidade2],File:bCini2_Texto_Arquivo = bCini2_Abrir(arquivo,io_read);

        while(bCini2_Ler(bCini2_Texto_Arquivo,bCini2_Files))
        {
            if(strlen(bCini2_Files))
            {
                strmid(bCini2_Cache_Linha_Valor[bCini2_Linhas_Arquivo],bCini2_Files,0,strlen(bCini2_Files),bCini2_Capacidade1);
                bCini2_Linhas_Arquivo++;
            }
        }
        bCini2_Linhas_Arquivo = bCini2_Linhas_Arquivo+1;
        bCini2_Fechar(bCini2_Texto_Arquivo);

        strmid(bCini2_Nome_Arquivo,arquivo,0,strlen(arquivo),bCini2_Capacidade1);
    }
    return 1;
}
stock bCini2_FecharArquivo()
{
    if(strlen(bCini2_Nome_Arquivo))
    {
        if(bCini2_Existe(bCini2_Nome_Arquivo))
        {
            new bCini2_Variavel[bCini2_Capacidade2],File:bCini2_Texto_Arquivo;

            if(bCini2_Linhas_Arquivo >= 1)
            {
                for(new i; i<bCini2_Linhas_Arquivo; i++)
                {
                    if(strlen(bCini2_Cache_Linha_Valor[i]))
                    {
                        format(bCini2_Variavel,sizeof(bCini2_Variavel),"%s%s",bCini2_Variavel,bCini2_Cache_Linha_Valor[i]);
                        strmid(bCini2_Cache_Linha_Valor[i],"",0,strlen(""),bCini2_Capacidade1);
                    }
                }
                bCini2_Texto_Arquivo = bCini2_Abrir(bCini2_Nome_Arquivo,io_write);
                bCini2_Escrever(bCini2_Texto_Arquivo,bCini2_Variavel);
                bCini2_Fechar(bCini2_Texto_Arquivo);
                bCini2_Linhas_Arquivo = 0;

                strmid(bCini2_Nome_Arquivo,"",0,strlen(""),bCini2_Capacidade1);
            }
        }
    }
    return 1;
}
stock bCini2_rn(rn[]) // By DracoBlue
{
    new Len_rn = strlen(rn);

    if(rn[0] != 0)
    {
        if(rn[Len_rn-1] == '\r' || rn[Len_rn-1] == '\n')
        {
            rn[Len_rn-1] = 0;
        }
        if(rn[0] != 0)
        {
            if(rn[Len_rn-2] == '\r' || rn[Len_rn-2] == '\n')
            {
                rn[Len_rn-2] = 0;
            }
        }
    }
    return 1;
}

// Fim bCini2
Obs: Adicione bCini2_FecharArquivo(); no OnGameModeExit();

Obs 2: A definiзao bCini2_Separador й a definiзao responsбvel pelo Set dos Arquivos, exemplo:

Linha bCini2_Separador Valor

Se o bCini2_Separador for :, o arquivo Ficarб assim:

Linha:Valor
Reply
#2

Show jб vou atualizar meu game mode *--*
Reply
#3

Esta de parabйns Biel, Irei usa-la sу nas prуximas atualizaзхes.
Reply
#4

Essa incluide sim tб mais rбpida que a outra. Curti mano.
Reply
#5

Nao se esqueзam de adicionar bCini2_FecharArquivo(); no OnGameModeExit();.

Quote:
Originally Posted by GabrielRibeiro
Show jб vou atualizar meu game mode *--*
Muito obrigado mano, eu espero que goste de usar a mesma! Logo mais ela estarб mais rбpida!

Quote:
Originally Posted by petrick_schoba
Esta de parabйns Biel, Irei usa-la sу nas prуximas atualizaзхes.
E aн maninho, firmeza ?

Entao petrick, jб jб a bCini2 estarб mais rбpida com lуgicas mais velozes e funзoes mais satisfatуrias que serao usadas em uma Include de Salvamento.

Entao й isso, vlw!

Quote:
Originally Posted by [BPW]Wesley
Essa incluide sim tб mais rбpida que a outra. Curti mano.
Poxa Wesley, obrigado aew parceiro!
Reply
#6

Ta bom trabalho, dps analisarei melhor a include.

mesmo assim prefiro o MySQL mt melhor xD
Reply
#7

Bem legal, sу nгo gostei da sintax, e tem algumas coisas que podem ser melhoradas, fazendo o uso do menor nъmero de funзхes possнveis.
E aliбs, olhe na Stock AbrirArquivo, tem 2 condiзхes iguais
pawn Код:
if(bCini2_Existe(arquivo))
    {
        if(bCini2_Existe(arquivo))
        {
Abraзos.
Reply
#8

Quote:
Originally Posted by PT
Посмотреть сообщение
Ta bom trabalho, dps analisarei melhor a include.

mesmo assim prefiro o MySQL mt melhor xD
Um banco de dados realmente й melhor do que uma Include Ini, porйm eu chuto que apenas 5% dos programadores usam MYSql (no SA-MP).

Jб no MTA, eu nao posso dizer o mesmo.

Obrigado PT!

Quote:
Originally Posted by Dolby
Посмотреть сообщение
Bem legal, sу nгo gostei da sintax, e tem algumas coisas que podem ser melhoradas, fazendo o uso do menor nъmero de funзхes possнveis.
E aliбs, olhe na Stock AbrirArquivo, tem 2 condiзхes iguais
pawn Код:
if(bCini2_Existe(arquivo))
    {
        if(bCini2_Existe(arquivo))
        {
Abraзos.
Oush, realmente passou despercebido.

Obrigado Dolby, eu jб arrumei ali no tуpico.
Reply
#9

Estб bem mais rбpida que a antiga.

Faz alguns testes com DOF2, Dini, bIni e posta a diferenзa

Enfim, Parabйns +2
Reply
#10

Pelo que vi... isso ainda estб realmente lento. De qualquer maneira parabйns.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)