[Ajuda] Escrever linha, caso exista apaga-la e escrevк-la de novo..
#1

Boas, tenho o seguinte cуdigo:

pawn Код:
stock RT_setText(rt_lang[], rt_key[], rt_text[])
{
    new File:rt_file, rt_Trans[128], text[250];
    rt_file = fopen(formatDirectory(rt_lang));
    while(fread(rt_file, rt_Trans)){
        if(strfind(rt_Trans, rt_key, true) == 0){
            fdeleteline(formatDirectory(rt_lang), rt_Trans);
        }
    }
    format(text, sizeof text, "%s = %s\r\n", rt_key, rt_text);
    fwrite(rt_file, text);
    fclose(rt_file);
}
// Retirado da wiki ( Fdelete was made by Sacky. )
stock fdeleteline(filename[], line[]){
    if(fexist(filename)){
        new temp[256];
        new File:fhandle = fopen(filename,io_read);
        fread(fhandle,temp,sizeof(temp),false);
        if(strfind(temp,line,true)==-1){return 0;}
        else{
            fclose(fhandle);
            fremove(filename);
            for(new i=0;i<strlen(temp);i++){
                new templine[256];
                strmid(templine,temp,i,i+strlen(line));
                if(strcmp(templine,line,true)){
                    strdel(temp,i-1,i+strlen(line)-1);
                    fcreate(filename);
                    fhandle = fopen(filename,io_write);
                    fwrite(fhandle,temp);
                    fclose(fhandle);
                    return 1;
                }
            }
        }
    }
    return 0;
}

stock fcreate(filename[])
{
    if (fexist(filename)){return false;}
    new File:fhandle = fopen(filename,io_write);
    fclose(fhandle);
    return true;
}
Se eu usar assim:

pawn Код:
RT_setText("pt",    "CHAT_SAY", "%s (%d) diz:");
O ficheiro escreve assim:
(caso o ficheiro nao exista..
Код:
                                                            HELLO = OlГЎ, %s!
CHAT_SAY = %s (%d) diz:
Caso exista o ficheiro fica assim:
Код:
                                                            HELLO = OlГЎ, %s!
CHAT_SAY = %s (%d) diz:
HELLO = OlГЎ, %s!
CHAT_SAY = %s (%d) diz:
Repete em vez de apagar a linha..
Reply
#2

fopen(formatDirectory(rt_lang),io_write); < isto reescreve todo o ficheiro, ou seja apaga o que existe e escreve de novo, acho que era isto que precisavas.

Se for para substituir uma linha apenas tens que reescrever o ficheiro todo ou seja les o ficheiro todo e escreves tudo denovo excepto essa linha.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)