Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
MarlonDelphi Aprendiz

Registrado: Domingo, 5 de Janeiro de 2014 Mensagens: 117
|
Enviada: Ter Jan 27, 2015 2:08 pm Assunto: Ajuda com for no memo [MUITO RESOLVIDO] |
|
|
Gostaria de saber como faço para pular para uma determinada linha no meu "For" ao encontrar um caracter específico em um memo. Exemplo:
o memo contém as linhas
1
2
3
rsrs
1
2
3
hoho
4
5
6
Gostaria de saber como fazer para o For pular para o numero 4 ao encontrar a palavra "rsrs" no memo. Entenderam?
Editado pela última vez por MarlonDelphi em Ter Jan 27, 2015 4:07 pm, num total de 1 vez |
|
Voltar ao Topo |
|
 |
natanbh1 Colaborador

Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Ter Jan 27, 2015 2:32 pm Assunto: |
|
|
Vê se te ajuda:
Código: | var
i: Integer;
begin
for i := 0 to Memo1.Lines.Count - 1 do
begin
if pos('rsrs', Memo1.Lines[i]) > 0 then
Continue;
ShowMessage(Memo1.Lines[i]);
end;
end; |
No código acima, ele dá um showMessage na tela com o conteúdo de cada linha.
Quando ele encontra a linha com "rsrs" ele pula para próxima. _________________ ''A persistência é o caminho para o êxito.''
Charlie Chaplin |
|
Voltar ao Topo |
|
 |
MarlonDelphi Aprendiz

Registrado: Domingo, 5 de Janeiro de 2014 Mensagens: 117
|
Enviada: Ter Jan 27, 2015 2:36 pm Assunto: |
|
|
natanbh1 escreveu: | Vê se te ajuda:
Código: | var
i: Integer;
begin
for i := 0 to Memo1.Lines.Count - 1 do
begin
if pos('rsrs', Memo1.Lines[i]) > 0 then
Continue;
ShowMessage(Memo1.Lines[i]);
end;
end; |
No código acima, ele dá um showMessage na tela com o conteúdo de cada linha.
Quando ele encontra a linha com "rsrs" ele pula para próxima. |
Eu expliquei um pouco errado. Eu digo o seguinte, quando chegar na linha "rsrs" ele pula para a linha dps do "hoho". Entendeu? ele pula as linhas entre as duas palavras, rsrs e hoho. |
|
Voltar ao Topo |
|
 |
natanbh1 Colaborador

Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Ter Jan 27, 2015 3:05 pm Assunto: |
|
|
As linhas entre as palavras "rsrs" e "hoho" serão fixas (mesma quantidade no intervalo) ?
Se sim, utilize o While:
Código: | var
i: Integer;
begin
i := 0;
while i < Memo1.Lines.Count do
begin
if pos('rsrs', Memo1.Lines[i]) > 0 then // compara se a linha atual é 'rsrs'
Begin
Inc(i, 5); // incrementa 5 na variavel i
Continue;
End;
ShowMessage(Memo1.Lines[i]);
Inc(i, 1); // incrementa 1 na variavel i
end;
end; |
_________________ ''A persistência é o caminho para o êxito.''
Charlie Chaplin |
|
Voltar ao Topo |
|
 |
MarlonDelphi Aprendiz

Registrado: Domingo, 5 de Janeiro de 2014 Mensagens: 117
|
Enviada: Ter Jan 27, 2015 3:08 pm Assunto: |
|
|
natanbh1 escreveu: | As linhas entre as palavras "rsrs" e "hoho" serão fixas (mesma quantidade no intervalo) ?
Se sim, utilize o While:
Código: | var
i: Integer;
begin
i := 0;
while i <Memo1> 0 then // compara se a linha atual é 'rsrs'
Begin
Inc(i, 5); // incrementa 5 na variavel i
Continue;
End;
ShowMessage(Memo1.Lines[i]);
Inc(i, 1); // incrementa 1 na variavel i
end;
end; |
|
Não necessariamente serão fixas. As tags rsrs e hoho sempre serão as mesmas, porém o intervalo pode mudar. |
|
Voltar ao Topo |
|
 |
strak2012 Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014 Mensagens: 1518 Localização: Maceió - AL
|
Enviada: Ter Jan 27, 2015 3:22 pm Assunto: |
|
|
Código: | var
i: Integer;
ok: boolean;
begin
ok := true;
for i := 0 to Memo1.Lines.Count - 1 do
begin
if pos('rsrs', Memo1.Lines[i]) > 0 then
ok := false;
if pos('hoho', Memo1.Lines[i]) > 0 then
ok := true;
if ok = true then
begin
// faça o quer quer aqui.
end;
end;
end; |
_________________ Tudo podemos quando tudo sabemos! |
|
Voltar ao Topo |
|
 |
natanbh1 Colaborador

Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Ter Jan 27, 2015 3:24 pm Assunto: |
|
|
As tags "rsrs" e "hoho" irão se repetir no memo?
E se puder explicar melhor o objetivo do código talvez fique mais fácil ajudarmos. _________________ ''A persistência é o caminho para o êxito.''
Charlie Chaplin |
|
Voltar ao Topo |
|
 |
MarlonDelphi Aprendiz

Registrado: Domingo, 5 de Janeiro de 2014 Mensagens: 117
|
Enviada: Ter Jan 27, 2015 4:01 pm Assunto: |
|
|
Deu certo galera. Usei um pouco da ajuda de cada um e consegui encontrar a solução. Para explicar melhor, isso que estou fazendo é um projeto para executar Scripts no banco.
Ficou assim para se alguém quiser utilizar:
Código: |
For i := 0 To memo1.Lines.Count - 1 Do
Begin
if Pos('<proc>', Memo1.Lines.Strings[i]) > 0 then
begin
ExecutaScript := True;
For i2 := i+1 To Memo1.Lines.Count - 1 do
begin
if not Pos('</proc>', Memo1.Lines.Strings[i2]) > 0 then
Break
else
procedimento := procedimento + #13 + Memo1.Lines.Strings[i2];
end;
end;
if Pos('<proc>', Memo1.Lines.Strings[i]) > 0 then
Executa := False;
if Pos('</proc>', Memo1.Lines.Strings[i]) > 0 then
begin
Executa := True;
Continue; //Se encontrar o final do procedimento, pula a linha para pegar o proximo script
end;
if Executa = True then
begin
If pos('SET TERM ', UpperCase(memo1.Lines.Strings[i])) > 0 Then
Begin
term := copy(UpperCase(memo1.Lines.Strings[i]), pos('SET TERM', UpperCase(memo1.Lines.Strings[i])) + 9, 1);
If (TERM <> '#') AND (TERM <Then> 0 Then
Begin
s := s + copy(memo1.Lines.Strings[i], 1, pos(TERM, memo1.Lines.Strings[i]) - 1) + ' ';
// Roda o script
If s <> '' Then
Begin
rodascript(s);
s := '';
End;
End Else
Begin
If pos('/*', memo1.Lines.Strings[i]) = 0 Then
s := s + memo1.Lines.Strings[i] + ' ';
End;
end;
linha := linha+1;
End;
if ExecutaScript = True then
begin
ScriptExecutive.Script.Text := procedimento;
ScriptExecutive.ExecuteScript;
end;
|
|
|
Voltar ao Topo |
|
 |
|