Entrar
Últimos assuntos
» Retorno da GMBR!!!por theguitarmester Ter 19 Mar 2024, 22:38
» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27
» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30
» Mudar cor de apenas uma palavra
por lunalol Sex 01 Mar 2024, 13:42
» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17
» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18
» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34
» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13
» Servidor de Discord do fórum?
por Lighter Sáb 27 Jan 2024, 17:18
» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12
» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02
» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55
» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42
» Devlogs em vídeos do Block Room
por Joton Seg 15 Jan 2024, 16:56
» Alguém aqui já ganha dinheiro com seus games?
por Joton Seg 15 Jan 2024, 16:49
» ACERVO GMBR MAGAZINE
por Joton Qui 11 Jan 2024, 19:21
» como aumentar o obj sem aumentar a colisão??
por GabrielXavier Qua 10 Jan 2024, 07:21
» Asteroid Core - Early Acesse Update [0.2.0.0]
por JOZ. Seg 08 Jan 2024, 14:39
» Versionamento de código com GitHub
por GabrielXavier Seg 08 Jan 2024, 07:32
» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por kolesovsup Sex 29 Dez 2023, 07:16
» a funçao approach ainda existe?
por PEDRINDEV Ter 26 Dez 2023, 20:05
» Inimigo ataca até por trás! >:(
por saim Sex 22 Dez 2023, 08:55
» [RESOLVIDO]Spawn após morte
por Deception_1999 Dom 17 Dez 2023, 16:39
» Remunerado $$$ - Procuro programador para ajudar a "montar" um jogo
por theguitarmester Sáb 02 Dez 2023, 16:28
» Game maker nao abre
por Cerf Dom 26 Nov 2023, 12:01
[Resolvido]Dúvida com Strings no Delphi 7
3 participantes
Página 1 de 1
[Resolvido]Dúvida com Strings no Delphi 7
Olá criadoes!
Faz tempo que não crio um tópico, agora preciso tirar uma dúvida com vocês...
É que eu comecei a usar Delphi 7 e não sei exatamente como fazer loops e nem tenho certesa se pro que eu to fazendo é preciso, pois não conheço as APIs também. Por isso achei que por a caso exista funções melhores que as do GM.
É o seguinte. Em uma parte do meu programa tem um botão que converte cada string do texto pra outro e eu tentei isso:
Faz tempo que não crio um tópico, agora preciso tirar uma dúvida com vocês...
É que eu comecei a usar Delphi 7 e não sei exatamente como fazer loops e nem tenho certesa se pro que eu to fazendo é preciso, pois não conheço as APIs também. Por isso achei que por a caso exista funções melhores que as do GM.
É o seguinte. Em uma parte do meu programa tem um botão que converte cada string do texto pra outro e eu tentei isso:
- Código:
Tx_Replace := StringReplace(Tx_Input.Text,'a','letra: a',[rfReplaceAll, rfIgnoreCase]);
Tx_Replace := StringReplace(Tx_Input.Text,'b','letra: b',[rfReplaceAll, rfIgnoreCase]);
Tx_Replace := StringReplace(Tx_Input.Text,'c','letra: c',[rfReplaceAll, rfIgnoreCase]);
- Código:
for (pos=0; pos<string_length(global.frase)+1; pos+=1) {
switch(string_char_at(global.frase,pos)){
case "a": global.frase = string_replace(global.frase,string_char_at(global.frase,pos),a); continue;
case "b": global.frase = string_replace(global.frase,string_char_at(global.frase,pos),b); continue;
case "c": global.frase = string_replace(global.frase,string_char_at(global.frase,pos),c); continue;
case "d": global.frase = string_replace(global.frase,string_char_at(global.frase,pos),d); continue;
case "etc..
}
}
Última edição por Super Maker em Sáb 23 Fev 2013, 15:23, editado 4 vez(es)
Super Maker- Data de inscrição : 09/07/2011
Reputação : 6
Número de Mensagens : 646
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Resolvido]Dúvida com Strings no Delphi 7
Você pode fazer um loop de 65 a 90 e dentro desse for você fazer o seguinte:
O porque do loop de 65 a 90 é que 65 é a letra 'A' na tabela ASCII e 90 é a letra 'Z'.
- Código:
VariavelString := StringReplace(Texto, Chr(I), 'Aqui jaz um ' + Chr(I), [rfReplaceAll, rfIgnoreCase]
//Sendo que I é a variável do for
O porque do loop de 65 a 90 é que 65 é a letra 'A' na tabela ASCII e 90 é a letra 'Z'.
L0l-King- Data de inscrição : 04/04/2010
Reputação : 1
Número de Mensagens : 148
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Resolvido]Dúvida com Strings no Delphi 7
Pois é, eu não sei formar esse loop em Dephi e "Chr()" é do GM.
Ou existe alguma API pra prainstalar "Chr()" no Delphi 7?
Eu tentei isso agora:
FOR i := 0 TO ???lenth??? DO
Eu quero fazer como no meu exemplo que eu fiz no GM só que em Delphi.
Quero que o loop pegue a posição do char no texto e faça a alteração.
Eu não to encontrando propriedade lenth pra colocar aí, entende?
Ou existe alguma API pra prainstalar "Chr()" no Delphi 7?
Eu tentei isso agora:
FOR i := 0 TO ???lenth??? DO
Eu quero fazer como no meu exemplo que eu fiz no GM só que em Delphi.
Quero que o loop pegue a posição do char no texto e faça a alteração.
Eu não to encontrando propriedade lenth pra colocar aí, entende?
Super Maker- Data de inscrição : 09/07/2011
Reputação : 6
Número de Mensagens : 646
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Resolvido]Dúvida com Strings no Delphi 7
Chr() é do Delphi, e os primeiros GM foram feitos em Delphi, por isso que CHr tá ali também
o for tem que ficar assim:
Dentro do for execute o código do meu post acima.
o for tem que ficar assim:
- Código:
for I := 65 to 90 do
Dentro do for execute o código do meu post acima.
L0l-King- Data de inscrição : 04/04/2010
Reputação : 1
Número de Mensagens : 148
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Resolvido]Dúvida com Strings no Delphi 7
Verdade, acabei de encontrar o danado, mas eu acho que você ainda não reparou no que eu realmente quero. Por isso as vezes crio vídeos ao invés de escrever e postra imagens.
Acho que sou fraco ao me expressar. E não me leve a mal, eu agradeço muito por estar tentando me ajudar.
Agora deixa eu mostrar pra todos...
Em GML o que eu quero fazer no Delphi:
O loop ta descaradamente mostrando que eu quero pegar a posição atual dentre o texto. Percorrer os caracteres um a um.
Alguém sabe como posso adaptar?
Acho que sou fraco ao me expressar. E não me leve a mal, eu agradeço muito por estar tentando me ajudar.
Agora deixa eu mostrar pra todos...
Em GML o que eu quero fazer no Delphi:
- Código:
for (pos=0; pos<string_length(global.frase)+1; pos+=1) {
switch(string_char_at(global.frase,pos)){
case "a": global.frase = string_replace(global.frase,string_char_at(global.frase,pos),a); continue;
case "b": global.frase = string_replace(global.frase,string_char_at(global.frase,pos),b); continue;
case "c": global.frase = string_replace(global.frase,string_char_at(global.frase,pos),c); continue;
case "d": global.frase = string_replace(global.frase,string_char_at(global.frase,pos),d); continue;
case "etc..
}
}
O loop ta descaradamente mostrando que eu quero pegar a posição atual dentre o texto. Percorrer os caracteres um a um.
Alguém sabe como posso adaptar?
Última edição por Super Maker em Seg 18 Fev 2013, 09:20, editado 2 vez(es)
Super Maker- Data de inscrição : 09/07/2011
Reputação : 6
Número de Mensagens : 646
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Resolvido]Dúvida com Strings no Delphi 7
Delphi não tem nenhuma função que substitua especificadamente uma posição de uma String. Isso porque ela tem um meio de manipular bem bacana que vou mostrar agora:
- Código:
for I := 1 to Lenght(minhaString) do //String em Delphi tem como o seu primeiro índice o 1
begin
case Ord(minhaString[I]) of //Sim, String pode ser acessada como se fosse um array
65: {aqui tem um A, maiúsculo}
..
90: {Aqui tem um Z, maiúsculo}
end;
//E sim, você pode substituir o valor através do acesso por índice, como minhaString[1] := 'A';
L0l-King- Data de inscrição : 04/04/2010
Reputação : 1
Número de Mensagens : 148
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Resolvido]Dúvida com Strings no Delphi 7
Isso foi maravilhoso cara...
Muitíssimo obrigado L0l-King, você não quebrou um galho, derrubou a floresta toda.
Valeu mesmo, mas tem um problema...
Olha como ficou:
Eu não sei onde eu to errando, sei que se eu deixar pra converter pra um só caracter, funciona todas as linhas. Mas quando eu faço do jeito que mostro no código acima, só converte a primeira letra.
O loop para pelo fato de o próximo caracter ser desconhecido (-) pelo script, mas eu quero que mesmo sendo desconhecido continue até checar e converter todas as letras.
Onde ta meu erro?
Muitíssimo obrigado L0l-King, você não quebrou um galho, derrubou a floresta toda.
Valeu mesmo, mas tem um problema...
Olha como ficou:
- Código:
procedure TFrame_Home.Bt_CopyClick(Sender: TObject);
var
I: Integer;
Tx_Replace: String;
begin
Tx_Replace := Tx_Input.Text;
for I := 1 to Length(Tx_Replace) do
case Ord(Tx_Replace[I]) of
Ord(97): Tx_Replace := StringReplace(Tx_Replace,Chr(Ord(Tx_Replace[I])),'--A--',[rfReplaceAll, rfIgnoreCase]);
Ord(98): Tx_Replace := StringReplace(Tx_Replace,Chr(Ord(Tx_Replace[I])),'--B--',[rfReplaceAll, rfIgnoreCase]);
Ord(99): Tx_Replace := StringReplace(Tx_Replace,Chr(Ord(Tx_Replace[I])),'--C--',[rfReplaceAll, rfIgnoreCase]);
end;
Tx_Input.Text := Tx_Replace;
end;
Eu não sei onde eu to errando, sei que se eu deixar pra converter pra um só caracter, funciona todas as linhas. Mas quando eu faço do jeito que mostro no código acima, só converte a primeira letra.
O loop para pelo fato de o próximo caracter ser desconhecido (-) pelo script, mas eu quero que mesmo sendo desconhecido continue até checar e converter todas as letras.
Onde ta meu erro?
Super Maker- Data de inscrição : 09/07/2011
Reputação : 6
Número de Mensagens : 646
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Resolvido]Dúvida com Strings no Delphi 7
Primeira note:
Chr(Ord(Tx_Replace[I])) é meio desnecessário, você pode fazer só Tx_replace[I].
Seja X um integer, Ord de X sempre resulta X, então podes tirar os Ords no seu case.
O motivo dele parar é que quando você entra num For, o limitador vai pra heap(memória de valores) e a função length é executada só no começo por questões de performance, mas você está mudando o tamanho da String, mas ela não é atualizada no For(porque o valor inicial tá na heap e ninguém consegue mexer naquilo). Logo, se a string tinha 8 caracteres, I só vai até 8, por mais que tu mude tanto pra cima quanto pra baixo o tamanho da String no meio do For.
Nessa situação tu é obrigado a usar um while ou um repeat, como mostro abaixo:
Nota: Esse código eu fiz pra funcionar em Console Application, precisa de uns pequenos ajustes pra funcionar em tela
Chr(Ord(Tx_Replace[I])) é meio desnecessário, você pode fazer só Tx_replace[I].
Seja X um integer, Ord de X sempre resulta X, então podes tirar os Ords no seu case.
O motivo dele parar é que quando você entra num For, o limitador vai pra heap(memória de valores) e a função length é executada só no começo por questões de performance, mas você está mudando o tamanho da String, mas ela não é atualizada no For(porque o valor inicial tá na heap e ninguém consegue mexer naquilo). Logo, se a string tinha 8 caracteres, I só vai até 8, por mais que tu mude tanto pra cima quanto pra baixo o tamanho da String no meio do For.
Nessa situação tu é obrigado a usar um while ou um repeat, como mostro abaixo:
- Código:
var
I: Integer;
Tx_Replace, texto: String;
begin
texto := 'zzazzbzzc';
Tx_Replace := texto;
I := 1;
while(I <= Length(Tx_Replace)) do
begin
case Ord(Tx_Replace[I]) of
97: Tx_Replace := StringReplace(Tx_Replace,Chr(Ord(Tx_Replace[I])),'--A--',[rfReplaceAll, rfIgnoreCase]);
98: Tx_Replace := StringReplace(Tx_Replace,Chr(Ord(Tx_Replace[I])),'--B--',[rfReplaceAll, rfIgnoreCase]);
99: Tx_Replace := StringReplace(Tx_Replace,Chr(Ord(Tx_Replace[I])),'--C--',[rfReplaceAll, rfIgnoreCase]);
end;
Inc(I);
end;
texto := Tx_Replace;
writeln(texto);
Readln;
end.
Nota: Esse código eu fiz pra funcionar em Console Application, precisa de uns pequenos ajustes pra funcionar em tela
L0l-King- Data de inscrição : 04/04/2010
Reputação : 1
Número de Mensagens : 148
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Resolvido]Dúvida com Strings no Delphi 7
Só a última linha é executada?
Você começou de novo a cada linha.
Testa novamente com o código acima.
Até mais!
- Código:
Tx_Replace := StringReplace(Tx_Input.Text,'a','letra: a',[rfReplaceAll, rfIgnoreCase]);
Tx_Replace := StringReplace(Tx_Replace,'b','letra: b',[rfReplaceAll, rfIgnoreCase]);
Tx_Replace := StringReplace(Tx_Replace,'c','letra: c',[rfReplaceAll, rfIgnoreCase]);
Você começou de novo a cada linha.
Testa novamente com o código acima.
Até mais!
Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.
Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.
Aprenda a calcular a velocidade de suas animações
Entre para o Clube do Inglês:
Re: [Resolvido]Dúvida com Strings no Delphi 7
@PedroX: Eu sugeri isso, só que ele disse que queria fazer caractere por caractere, por isso postei esse while um tanto quanto grande.
L0l-King- Data de inscrição : 04/04/2010
Reputação : 1
Número de Mensagens : 148
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
[Resolvido] Dúvida com Delphi 7 - Loop de Strings
Eu não sabia como fazer esse incremento, nem imaginava que podia ser assim.
Ficou perfeito agora, olha:
Ficou perfeito agora, olha:
- Código:
procedure TFrame_Home.Bt_CopyClick(Sender: TObject);
var
I: Integer;
Tx_Replace: String;
begin
Tx_Replace := Tx_Input.Text;
I := 1;
while(I <= Length(Tx_Replace)) do
begin
case Ord(Tx_Replace[I]) of
97: Tx_Replace := StringReplace(Tx_Replace,Chr(Ord(Tx_Replace[I])),'--A--',[rfReplaceAll, rfIgnoreCase]);
98: Tx_Replace := StringReplace(Tx_Replace,Chr(Ord(Tx_Replace[I])),'--B--',[rfReplaceAll, rfIgnoreCase]);
99: Tx_Replace := StringReplace(Tx_Replace,Chr(Ord(Tx_Replace[I])),'--C--',[rfReplaceAll, rfIgnoreCase]);
100: Tx_Replace := StringReplace(Tx_Replace,Chr(Ord(Tx_Replace[I])),'--D--',[rfReplaceAll, rfIgnoreCase]);
101: Tx_Replace := StringReplace(Tx_Replace,Chr(Ord(Tx_Replace[I])),'--E--',[rfReplaceAll, rfIgnoreCase]);
102: Tx_Replace := StringReplace(Tx_Replace,Chr(Ord(Tx_Replace[I])),'--F--',[rfReplaceAll, rfIgnoreCase]);
103: Tx_Replace := StringReplace(Tx_Replace,Chr(Ord(Tx_Replace[I])),'--G--',[rfReplaceAll, rfIgnoreCase]);
104: Tx_Replace := StringReplace(Tx_Replace,Chr(Ord(Tx_Replace[I])),'--H--',[rfReplaceAll, rfIgnoreCase]);
105: Tx_Replace := StringReplace(Tx_Replace,Chr(Ord(Tx_Replace[I])),'--I--',[rfReplaceAll, rfIgnoreCase]);
end;
Inc(I);
end;
Tx_Input.Text := Tx_Replace;
end;
Super Maker- Data de inscrição : 09/07/2011
Reputação : 6
Número de Mensagens : 646
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Resolvido]Dúvida com Strings no Delphi 7
Para otimização, só um ponto a tratar:
Ao invés de um case gigante, você pode fazer o seguinte
Ao invés de um case gigante, você pode fazer o seguinte
- Código:
for J := 97 to 132 do //percorre todas as letras minúsculas
if (J = Ord(Tx_Replace)) then
//execute o código de substituição aqui
L0l-King- Data de inscrição : 04/04/2010
Reputação : 1
Número de Mensagens : 148
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Resolvido]Dúvida com Strings no Delphi 7
To com um probleminha chato usando o método numérico pro reconhecimento.
O problema é que o "a" e o "A" estão sendo convertidos pro mesmo valor:
Mas quero que seja: letra a-letra A-
Como eu posso fixar essas diferênças no código?
O problema é que o "a" e o "A" estão sendo convertidos pro mesmo valor:
- Código:
65: Tx_Replace := StringReplace(Tx_Replace,Char(Ord(Tx_Replace[I])),'letra A-',[rfReplaceAll, rfIgnoreCase]);
97: Tx_Replace := StringReplace(Tx_Replace,Char(Ord(Tx_Replace[I])),'letra a-',[rfReplaceAll, rfIgnoreCase]);
Mas quero que seja: letra a-letra A-
Como eu posso fixar essas diferênças no código?
Super Maker- Data de inscrição : 09/07/2011
Reputação : 6
Número de Mensagens : 646
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Resolvido]Dúvida com Strings no Delphi 7
Os números que você está usando são errados, 97 É ONDE COMEÇA AS MINÚSCULAS e 65 É ONDE COMEÇA AS MAIÚSCULAS, por isso que não tá invertendo como você quer
Mas toma um pouco de cuidado, se acontecer o que você quer vai dar um loop infinito meu caro.
Por quê?
Veja, se encontrar um 'a' você coloca um 'A' algumas posições depois, e e se encontrar um 'A' você coloca 'a' algumas posições depois, ou seja, ele vai incrementando isso até dar estouro da memória!
Mas toma um pouco de cuidado, se acontecer o que você quer vai dar um loop infinito meu caro.
Por quê?
Veja, se encontrar um 'a' você coloca um 'A' algumas posições depois, e e se encontrar um 'A' você coloca 'a' algumas posições depois, ou seja, ele vai incrementando isso até dar estouro da memória!
L0l-King- Data de inscrição : 04/04/2010
Reputação : 1
Número de Mensagens : 148
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Resolvido]Dúvida com Strings no Delphi 7
Não, eu to mostrando um destino figurativo, eu não pretendo converter pra letras. Vai ser pra outra coisa.
Eu fiz nessa ordem por que achei que fosse dar outro tipo de erro dexando maiúscula pra baixo.
Agora eu tentei assim:
Eu escrevi Aa e o resultado foi 6565.
Não é o que eu quero, sabe onde eu errei?
Eu fiz nessa ordem por que achei que fosse dar outro tipo de erro dexando maiúscula pra baixo.
Agora eu tentei assim:
- Código:
97: Tx_Replace := StringReplace(Tx_Replace,Char(Ord(Tx_Replace[I])),'97',[rfReplaceAll, rfIgnoreCase]);
65: Tx_Replace := StringReplace(Tx_Replace,Char(Ord(Tx_Replace[I])),'65',[rfReplaceAll, rfIgnoreCase]);
Eu escrevi Aa e o resultado foi 6565.
Não é o que eu quero, sabe onde eu errei?
Super Maker- Data de inscrição : 09/07/2011
Reputação : 6
Número de Mensagens : 646
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Resolvido]Dúvida com Strings no Delphi 7
Tira o parâmetro rfIgnoreCase e vê se resolve.
L0l-King- Data de inscrição : 04/04/2010
Reputação : 1
Número de Mensagens : 148
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Resolvido]Dúvida com Strings no Delphi 7
Resolvido!
Deus te abençoe cara XD
Deu certo agora. Muitíssimo obrigado!!!
Deus te abençoe cara XD
Deu certo agora. Muitíssimo obrigado!!!
Super Maker- Data de inscrição : 09/07/2011
Reputação : 6
Número de Mensagens : 646
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Resolvido]Dúvida com Strings no Delphi 7
Haha
De nada kra
To a alguns anos programando em Delphi, qualquer coisa é só dar um toque xP
De nada kra
To a alguns anos programando em Delphi, qualquer coisa é só dar um toque xP
L0l-King- Data de inscrição : 04/04/2010
Reputação : 1
Número de Mensagens : 148
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Tópicos semelhantes
» [Resolvido][Dúvida] Como fazer o GM procurar por strings dentro de variáveis ?
» Dúvida em strings e arquivos!!
» DÚVIDA: Strings e nomes de variaveis
» Dúvida sobre strings, lendo txt
» [RESOLVIDO]Dúvidas com textos e strings...
» Dúvida em strings e arquivos!!
» DÚVIDA: Strings e nomes de variaveis
» Dúvida sobre strings, lendo txt
» [RESOLVIDO]Dúvidas com textos e strings...
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos