Hacred Sall
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.



 
InícioProcurarÚltimas imagensRegistarEntrar

Compartilhe | 
 

 Usando o sprintf

Ver o tópico anterior Ver o tópico seguinte Ir para baixo 
AutorMensagem
Bnezinho
Soldado
Soldado
Bnezinho

Peixes Ocupação : Programador

Usando o sprintf Empty
MensagemAssunto: Usando o sprintf   Usando o sprintf Icon_minitimeDom Jul 12, 2009 12:44 am

O comando sprintf é originário da linguagem C+ de programação.
Foi importado pelo Ruby e consequentemente pelo RGSS e pode ser encontrado em classes como: Window_Playtime(RGSS1), Window_InputNumber(RGSS1~2), Window_SaveFile(RGSS1~2), etc, etc...
Sua principal função é substituir expressões dentro das strings por códigos externos. Essa função se assemelha ao nosso prático bloco de código #{ } do Ruby. Exemplo:

- Criei uma string, e quero que ela mostre o nome do herói. Como posso fazê-lo sem ao menos ter conhecimento desse dado?
- Ora, isto é simples. Sabendo que a variável que carrega tal dado é a:
Código:
$game_party.members[id].name (RGSS2)
$game_party.actors[id].name (RGSS1)
Basta colocá-lo dentro de um bloco de código dentro da sua string:
Código:
str = "O nome do herói é: #{$game_party.actors[id].name}"

Revisando apenas esse conteúdo, vamos adentrar mais um pouco sobre sprintf, que é um pouco mais complexo.
Uma sprintf é formado por: sprintf(String, código externo)
Esse código externo é justamente o caractere que irá substituir os respectivos blocos dentro da string.
É imprecedível saber que "blocos de códigos" do sprintf começam com o sinal de porcentagem % + uma letra qualquer.
Essa letra será substítuida de acordo com o tipo de objeto do código externo. Exemplo: Quero substituir a expressão por um número qualquer. Nesse caso, usaríamos:
Código:
#%d = Usado em número inteiros
sprintf("Meu número favorito é o: %d", 13)
#Retorno: Meu número favorito é o: 13
Hmm... Okay! Olhando assim, nem é tão complicado, né? XD

Agora nosso desafio é criar uma string que dê 5 espaços até escrever um número qualquer.
Código:
#%nd => Onde n é o número de caracteres em brancos
sprintf("%5d", 8)
#Retorno =>      8

Hmm... Mas aí, e se eu quiser pôr alguma coisa no lugar desses caractéres em branco. Posso?
Depende. O único caráctere que pode substituí-lo é justamente o 0, e perceba que é usado na contagem de tempo da classe Window_PlayTime! ^^
Código:
#%0nd => Onde 0 é o caráctere que irá substituir os espaços em branco e n é o número de espaços.
sprintf("%02d", 2)
#Retorno: 02. Por quê? Porque criei uma string de coisas carácteres e apenas um foi substítuido. O que deveria ser espaço em branco foi preenchido pelo 0, saca? ^^
sprintf("%03d", 20)
#Retorno: 020
Ufa! Agora você não precisa criar mais infinitas condições para adicionar ou retirar zeros! XD
Código:
  def draw_playtime(x, y, width, align)
    hour = @total_sec / 60 / 60
    min = @total_sec / 60 % 60
    sec = @total_sec % 60
    time_string = sprintf("%02d:%02d:%02d", hour, min, sec)
    self.contents.font.color = normal_color
    self.contents.draw_text(x, y, width, WLH, time_string, 2)
  end

Agora e com números fracionais (floats)?
Amigos, neste caso usaríamos:
Código:
#%f = Usado em números fracionais
sprintf("%f", 12)
#Retorno: 12.000000
Olha quantos zeros! O_O
Não tem como controlar isso não? Justamente tem, olhe:
Código:
#%ezf, onde => 'e' é o número de espaços em branco e z é o número de zeros. f é o comando padrão.
sprintf("%2.1f", 12)
#Retorno: 12.0
Bem melhor, não é mesmo? ^^

Bom, mas e quanto as strings? Posso usá-las?
Claro que pode! Estava guardando o melhor para o final! <hehe>
Código:
#%s => s = String
sprintf("Olá! Meu nome é %s", "Abner")
#Retorno: Olá! Meu nome é Abner
E não se esquecendo: Colocando um número qualquer na frente do s, esse número corresponderá ao número de espaços em branco!

Bem legal, não é?
Hoje nós conhecemos esse comando que todos julgam complicado do C+ mas que na verdade, é mais simples do que parece!
Espero que tenham gostado da aula pessoal, depois a gente se vê!
Até!

CURIOSIDADES:
Em alguns lugares por aí, talvez você possa encontrar um %i, ele justamente possui a mesma função do %d.
O %e é usado para representar números de notação científica. Como sprintf já é raro, imagina esse! O_O
Não coloquei pois julgo você nunca topar com um desses! XD
%o representa números octais, de Química lembra? Raríssimo também...
%x representa números hexadecimais.
#--------------------------------------------
Em grandes espaços em branco, às vezes nos é necessário alinhar o texto. Éis aqui alguns códigos. Antes, indicá-los onde pô-los:
Código:
%<aqui><numero de caracteres em branco><código>
-- Alinha o texto à esquerda. Exemplo:
Código:
sprintf("%--20d", 1)
#Retorno: 1                    .
Ir para o topo Ir para baixo
 

Usando o sprintf

Ver o tópico anterior Ver o tópico seguinte Ir para o topo 
Página 1 de 1

Permissões neste sub-fórumNão podes responder a tópicos
Hacred Sall :: Centro de Operações :: Armazém :: Scripts :: Ajuda e tutoriais-
Ir para: