[AJUDA] Deletar Linha
#1

Galera eu tava fazendo aqui um sistema de catalogaзгo de mъsicas para a minha nova versгo do "MusicDialog"... Que terб comandos como /addmusic e /delmusic onde as linhas adicionadas serгo lidas e interpretadas para se encaixar em dialogs...

Bom ai o /addmusic ta perfeito... Mas me deparei com o problema do /delmusic...

O cуdigo estб assim:

pawn Код:
#include <a_samp>

#define MENUMUSICS      800

stock token_by_delim(const string[], return_str[], delim, start_index)
{
    new x=0;
    while(string[start_index] != EOS && string[start_index] != delim) {
        return_str[x] = string[start_index];
        x++;
        start_index++;
    }
    return_str[x] = EOS;
    if(string[start_index] == EOS) start_index = (-1);
    return start_index;
}

stock dellinha(filename[], line)
{
    new count, string[256], File:file, File:temp;

    file = fopen(filename, io_read);
    temp = fopen("tmpfile.tmp", io_write);

    while (fread(file, string))
        if (++count != line)
            fwrite(temp, string);

    fclose(file);
    fclose(temp);

    file = fopen(filename, io_write);
    temp = fopen("tmpfile.tmp", io_read);

    while (fread(temp, string))
        fwrite(file, string);

    fclose(file);
    fclose(temp);
    fremove("tmpfile.tmp");
}

stock PosMusicDeletar(const filename[], musicnome)
{
    new File:file_ptr;
    new line[2000];
    new var_from_line[100];

    new nome[100];
    new index;
    new musics_loaded, linha;

    file_ptr = fopen(filename,filemode:io_read);
    if(!file_ptr) return 0;
    musics_loaded = 0; linha = 65535;

    while(fread(file_ptr,line,2000) > 0)
    {
        musics_loaded++;
        index = 0;
        index = token_by_delim(line,var_from_line,',',index);
        if(index == (-1)) continue;  

        nome[100] = var_from_line;   // Linha do Erro   032 e 006      
       
        if (musicnome == nome[100]) // Linha do Erro 032
        {
            linha = musics_loaded;
        }
    }
    fclose(file_ptr);
    return linha;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
    if(strcmp(cmdtext,"/addmusic",true) == 0)
    {
        ShowPlayerDialog(playerid, MENUMUSICS, DIALOG_STYLE_MSGBOX , "ADD MUSIC", "Para adicionar uma nova musica ao dialog\npreencha todos os dados pedidos a seguir.", "Continuar", "Cancelar");
        PlayerPlaySound(playerid,1057,0.0,0.0,0.0); return 1;
    }
   
    if(strcmp(cmdtext,"/delmusic",true) == 0)
    {
        ShowPlayerDialog(playerid, MENUMUSICS+4, DIALOG_STYLE_MSGBOX , "DEL MUSIC", "Digite o nome da mъsica a ser deletada:", "Deletar", "Cancelar");
        PlayerPlaySound(playerid,1057,0.0,0.0,0.0); return 1;      
    }
    return 0;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    static musica[2000], genero[100], nome[100], url[1800];
    if(dialogid == MENUMUSICS)
    {
        if (response)        
        {
            ShowPlayerDialog(playerid, MENUMUSICS+1, DIALOG_STYLE_INPUT, "ADD MUSIC", "Digite o gкnero da mъsica.", "Continuar", "Cancelar");        
        }
    }    
    if(dialogid == MENUMUSICS+1)
    {
        if (response)        
        {
            format(genero, 100, "%s", inputtext);
            ShowPlayerDialog(playerid, MENUMUSICS+2, DIALOG_STYLE_INPUT, "ADD MUSIC", "Digite o nome da mъsica.", "Continuar", "Cancelar");        
        }
    }    
    if(dialogid == MENUMUSICS+2)
    {
        if (response)        
        {
            format(nome, 100, "%s", inputtext);
            ShowPlayerDialog(playerid, MENUMUSICS+3, DIALOG_STYLE_INPUT, "ADD MUSIC", "Digite a URL da musica", "Finalizar", "Cancelar");        
        }
    }    
    if(dialogid == MENUMUSICS+3)
    {
        if (response)        
        {
            format(url, 1800, "%s", inputtext);
            SendClientMessage(playerid, -1, "Mъsica adicionada com sucesso!");
           
            format (musica, sizeof(musica), "%s,%s,%s", nome, genero, url);
            new File:ArqMusica; ArqMusica = fopen("controle/musicas.reg", io_append);
            fwrite(ArqMusica, musica); fwrite(ArqMusica, "\r\n"); fclose(ArqMusica);        
        }
    }
    if(dialogid == MENUMUSICS+4)
    {
        if (response)        
        {
            new linha = 65535, delnome[100];            
            format(delnome, 100, "%s", inputtext);
            linha = PosMusicDeletar("controle/musicas.reg", delnome); // Linha do Erro 035
            dellinha("controle/musicas.reg", linha);               
        }
    }    
}
E o Pawn retorna os seguintes erros:

Код:
error: 032: array index out of bounds (variable "nome")
error: 006: must be assigned to an array
error: 032: array index out of bounds (variable "nome")
error: 035: argument type mismatch (argument 2)
A idйia й a seguinte: apуs adicionadas mъsicas o musicas.reg fica mais ou menos assim:

Код:
Nome,Genero,URL
Brasil WarZone,Eletronica,http://dc202.4shared.com/img/1009090064/cfc505e6/dlink__2Fdownload_2F2p4cbzEb_3Ftsid_3D20111210-005221-d251eec1/preview.mp3
Ou seja a idйia do /delmusic й que abra um dialog em que se for colocado "Brasil WarZone" a linha inteira:

Код:
Brasil WarZone,Eletronica,http://dc202.4shared.com/img/1009090064/cfc505e6/dlink__2Fdownload_2F2p4cbzEb_3Ftsid_3D20111210-005221-d251eec1/preview.mp3"
deve ser deletada...



Estou fazendo inapropriedamente? Existe outra forma de fazer esse del? Como ficaria ajeitado esse sistema de deletar?
Reply
#2

Alguem?
Reply
#3

Mattos, estou fazendo um sistema pra vocк, aguarde. Vou levar minha mгe na rodoviбria e tomar um banho e jб posto.
Reply
#4

Oxi brigado los! E sobre a mensagem que postei no seu mural de madrugada era sobre isso, pra vc ter seus creditos no fs tambem... E se der certinho tera com certeza...

@EDIT

Olha que bizarro, as visualizacoes desse topico tavam em 38 a poucos minutos e pulos pra mais de 1000 do nada... Maior bug
Reply
#5

Quote:
Originally Posted by Mattos
Посмотреть сообщение
Oxi brigado los! E sobre a mensagem que postei no seu mural de madrugada era sobre isso, pra vc ter seus creditos no fs tambem... E se der certinho tera com certeza...

@EDIT

Olha que bizarro, as visualizacoes desse topico tavam em 38 a poucos minutos e pulos pra mais de 1000 do nada... Maior bug
LOOOOOOOOL, agora vocк tem um tуpico criado com mais de 1000 vizualizaзхes!!!!! Parabйns. (sarcasmo)

kkkkkkk
Reply
#6

Quote:
Originally Posted by Los
Посмотреть сообщение
LOOOOOOOOL, agora vocк tem um tуpico criado com mais de 1000 vizualizaзхes!!!!! Parabйns. (sarcasmo)

kkkkkkk

Hahaha hahahahahahah
Reply
#7

Quais gкneros musicais vocк quer?
Reply
#8

Nao quero generos certos los... Quero justamente fazer ese sistema de banco de daods para as musicas poderem ser adicionadas e excluidas no proprio sv... Depois eu crio um sistema pra interpretar esses dados e criar o dialog... Quero so saber como deletar a linha da musica, dando o nome dela, e se nao existir aquele nome mandar um aviso que a musica nao existe...

So isso... Lembrando que so adm vai poder usar esse negocio, ou nao ne, to fazendo de forma geral... Ai a pessoa escolhe, pq ae adm colocaria genero cerrinho e taus...

Edit: pode ver que o add music ja ta funcionando certinho... Quero saber agora como deletar a linha inteira dando somente o nome da musica no dialog do /delmusic
Reply
#9

Quote:
Originally Posted by Mattos
Посмотреть сообщение
Nao quero generos certos los... Quero justamente fazer ese sistema de banco de daods para as musicas poderem ser adicionadas e excluidas no proprio sv... Depois eu crio um sistema pra interpretar esses dados e criar o dialog... Quero so saber como deletar a linha da musica, dando o nome dela, e se nao existir aquele nome mandar um aviso que a musica nao existe...

So isso... Lembrando que so adm vai poder usar esse negocio, ou nao ne, to fazendo de forma geral... Ai a pessoa escolhe, pq ae adm colocaria genero cerrinho e taus...

Edit: pode ver que o add music ja ta funcionando certinho... Quero saber agora como deletar a linha inteira dando somente o nome da musica no dialog do /delmusic
AAAAAAAAAAAAAAAAAAA, agora entendi, calma ae.

@EDIT

Usa isso:

pawn Код:
stock:deletarlinha(Arquivo[], linha)
{
    new count, string[256], File:file, File:temp;
    file= fopen(Arquivo, io_read);
    temp = fopen("tmpfile.tmp", io_write);
    while (fread(file, string))
    if (++count != linha) return fwrite(temp, string);
    fclose(file);
    fclose(temp);
    file= fopen(Arquivo, io_write);
    temp = fopen("tmpfile.tmp", io_read);
    while (fread(temp, string))
    fwrite(file, string);
    fclose(file);
    fclose(temp);
    fremove("tmpfile.tmp");
}
Como usar:

pawn Код:
deletarlinha("Musicas.reg", 3);//3 й o nъmero da linha
Caso nгo for isso que quer, sugiro fazer cada mъsica em arquivos separados, assim й sу usar fremove("Arquivo");
Reply
#10

Tipo isso eu sei, eu quero й dar o nome da musica e ele achar a lonha, sendo que a nome й a primeira variavel...

Se eu for fazer em arquivos separados, como que vou fazer para um dialog interpretar os dados e criar um dialog... Tipo ficaria muito lento a leitura, iria pesar nao?

Tipo los faz o segiinte, me adiciona no msn por favor, mandei por pm, que quero te mostrar o sistema de deletar os carros do banco de dados do meu sv, foi apartir dele que tentei fazer...
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)