ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Ajuda com for no memo [MUITO RESOLVIDO]

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
MarlonDelphi
Aprendiz
Aprendiz


Registrado: Domingo, 5 de Janeiro de 2014
Mensagens: 117

MensagemEnviada: Ter Jan 27, 2015 2:08 pm    Assunto: Ajuda com for no memo [MUITO RESOLVIDO] Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Ter Jan 27, 2015 2:32 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
MarlonDelphi
Aprendiz
Aprendiz


Registrado: Domingo, 5 de Janeiro de 2014
Mensagens: 117

MensagemEnviada: Ter Jan 27, 2015 2:36 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Ter Jan 27, 2015 3:05 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
MarlonDelphi
Aprendiz
Aprendiz


Registrado: Domingo, 5 de Janeiro de 2014
Mensagens: 117

MensagemEnviada: Ter Jan 27, 2015 3:08 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
strak2012
Colaborador
Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014
Mensagens: 1518
Localização: Maceió - AL

MensagemEnviada: Ter Jan 27, 2015 3:22 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Ter Jan 27, 2015 3:24 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
MarlonDelphi
Aprendiz
Aprendiz


Registrado: Domingo, 5 de Janeiro de 2014
Mensagens: 117

MensagemEnviada: Ter Jan 27, 2015 4:01 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB