SA-MP Forums Archive
[Ajuda] Dividir string, scanff - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Português/Portuguese (https://sampforum.blast.hk/forumdisplay.php?fid=34)
+---- Thread: [Ajuda] Dividir string, scanff (/showthread.php?tid=518429)



Dividir string, scanff - Stronda xD - 09.06.2014

Eu tenho a seguinte linha: Stronda_xD/09-06-2014 19:10:20/0/8
e Queria dividi-la assim:
Stronda_xD
09
06
2014
19
10
20
0
8

Usando o scanff, peзo desculpa por um tуpico com uma dъvida tгo simples, mas nгo encontrei uma forma de dividi-la de uma vez, eu tentei entende olhando a wiki da scanff mas estб em inglкs e nгo tem nenhum caso parecido.


Re: Dividir string, scanff - MultiKill - 09.06.2014

Nгo entendi sua duvida vocк quer dividir a linha para que?


Re: Dividir string, scanff - WLSF - 09.06.2014

Sempre que eu queria usar algo relacionado a isso eu olhava a wiki tambйm, tem uns exemplos lб que salvam bastante...

https://github.com/Y-Less/sscanf/wik...ced-Delimiters

No seu caso, й isso que vocк estб procurando.

Vocк pode usar algo do gкnero:

pawn Код:
new string[128] = "Stronda_xD/09-06-2014";
new nome[MAX_PLAYER_NAME];
new dia, mes, ano;
sscanf(string, "p</->s[128]iii", nome, dia, mes, ano);
Onde o p</-> significa os delimitadores que vocк utilizarб para quebrar a string.
E os demais parвmetros, sгo do sscanf normal, que vocк utilizarб para armazenar nas variбveis.
S - para string, I - para inteiros.

Sу um exemplo bбsico, nгo sei se estб certo, mas partindo do exemplo que ele disponobilizou ali na wiki, seria assim.

Faзa seus testes, e tente montar um que atenda a sua necessidade...

Abraзos.


Re: Dividir string, scanff - Stronda xD - 09.06.2014

Quote:
Originally Posted by Willian_Luigi
Посмотреть сообщение
Sempre que eu queria usar algo relacionado a isso eu olhava a wiki tambйm, tem uns exemplos lб que salvam bastante...

https://github.com/Y-Less/sscanf/wik...ced-Delimiters

No seu caso, й isso que vocк estб procurando.

Vocк pode usar algo do gкnero:

pawn Код:
new string[128] = "Stronda_xD/09-06-2014";
new nome[MAX_PLAYER_NAME];
new dia, mes, ano;
sscanf(string, "p</->s[128]iii", nome, dia, mes, ano);
Onde o p</-> significa os delimitadores que vocк utilizarб para quebrar a string.
E os demais parвmetros, sгo do sscanf normal, que vocк utilizarб para armazenar nas variбveis.
S - para string, I - para inteiros.

Sу um exemplo bбsico, nгo sei se estб certo, mas partindo do exemplo que ele disponobilizou ali na wiki, seria assim.

Faзa seus testes, e tente montar um que atenda a sua necessidade...

Abraзos.
Eu tentei, mas tentei dividindo tudo de uma vez logo, usando (p</-:> e p</- :/>) porem dava erros

Quote:
Originally Posted by MultiKill
Посмотреть сообщение
Nгo entendi sua duvida vocк quer dividir a linha para que?
Preciso trabalhar com cada Valor separado

@Edit

Eu tentei usando:
pawn Код:
sscanf("Stronda_xD/16-02-2014", "p</->s[128]iii", str, dia, mes, ano); printf("%s\n%d\n%d\n%d", str, dia, mes, ano);
e Deu:
Код HTML:
[19:56:15] sscanf warning: Unclosed specifier parameter, assuming '<', consider using something like p<<>.
[19:56:15] sscanf warning: Unknown format specifier '/', skipping.
[19:56:15] sscanf warning: Unknown format specifier '-', skipping.
[19:56:15] sscanf warning: Unknown format specifier '>', skipping.
[19:56:15] Stronda_xD/16-02-2014



Re: Dividir string, scanff - WLSF - 09.06.2014

pawn Код:
public OnGameModeInit()
{
    new nome[24],
        dia, mes, ano;

    sscanf("Stronda_xD/09-06-2014", "p</>s[24]p<->ip<->ip<->i", nome, dia, mes, ano);

    printf("%s, %02d/%02d/%04d", nome, dia, mes, ano);
}
p</>s[24] - Pra separar o nome, pela barra "/"
p<->i - Pra separar o dia, e os outros valores inteiros, pelo traзo "-"

Oque eu fiz foi escolher um delimitador para cada variбvel.

Poderia ser feito da seguinte forme tambйm:
pawn Код:
sscanf("Stronda_xD/09-06-2014", "p</>s[24]p<->iii", nome, dia, mes, ano);
Onde vocк iria escolher "/" como delimitador para a string e "-" para os prуximos 3 valores inteiros localizados com o traзo.

a 2є forma tб simplificada perto da primeira, mas й bom conhecer todas as formas, caso vocк precise delas algum dia.

Agora tб testado e funcionando, como eu falei, й sу questгo de analisar os exemplos que ele deu, e ir montando o seu de acordo com a sua necessidade...

Do jeito que eu fiz, ele tб separando o nome, dia, mкs e ano.
Sу falta vocк mandar ele separar o tempo.

Abraзos.


Re: Dividir string, scanff - Stronda xD - 09.06.2014

Quote:
Originally Posted by Willian_Luigi
Посмотреть сообщение
pawn Код:
public OnGameModeInit()
{
    new nome[24],
        dia, mes, ano;

    sscanf("Stronda_xD/09-06-2014", "p</>s[24]p<->ip<->ip<->i", nome, dia, mes, ano);

    printf("%s, %02d/%02d/%04d", nome, dia, mes, ano);
}
p</>s[24] - Pra separar o nome, pela barra "/"
p<->i - Pra separar o dia, e os outros valores inteiros, pelo traзo "-"

Oque eu fiz foi escolher um delimitador para cada variбvel.

Poderia ser feito da seguinte forme tambйm:
pawn Код:
sscanf("Stronda_xD/09-06-2014", "p</>s[24]p<->iii", nome, dia, mes, ano);
Onde vocк iria escolher "/" como delimitador para a string e "-" para os prуximos 3 valores inteiros localizados com o traзo.

a 2є forma tб simplificada perto da primeira, mas й bom conhecer todas as formas, caso vocк precise delas algum dia.

Agora tб testado e funcionando, como eu falei, й sу questгo de analisar os exemplos que ele deu, e ir montando o seu de acordo com a sua necessidade...

Do jeito que eu fiz, ele tб separando o nome, dia, mкs e ano.
Sу falta vocк mandar ele separar o tempo.

Abraзos.
Sim sim, eu nгo postei aqui mas jб tinha descobrido isso com seu primeiro post, e jб consegui a parte da hora:

pawn Код:
sscanf("Stronda_xD/16-02-1999 18:32:99", "p</>s[128]p<->iiip<:>iii", str, dia, mes, ano, hora, minutos, segundos); printf("%s\n%d\n%d\n%d\n%d\n%d\n%d", str, dia, mes, ano, hora, minutos, segundos);
@Resolvido