How to find all '>' characters of a memo and store in an array using Delphi?

Asked

Viewed 520 times

3

I have a field edit in the Delphi and need to travel it in search of the character > and store the position of all characters > in a vector. By doing this I can only get the position of the first character > in the memo, but I must take the position of all.

Texto := memdsformapreparo.Text;
posicao := memdsformapreparo.SelStart; //pega posição do clique
posicaofinal := memdsformapreparo.SelLength; //pega posição final do mouse
posicaoabre := AnsiPos('<', Texto); //pega posição do caractere maior
posicaofecha:= AnsiPos('>', Texto); //pega posição do caractere menor

{if ((posicaoabre <= posicao) and (posicaofecha > posicao)) or ((posicaofinal >= posicaoabre) or (posicaofinal <= posicaofecha)) then
begin
  memdsformapreparo.SelStart := posicaofecha;
end;}

2 answers

3

To get the position of all characters > in string and store in a array, would be so:

var
  posicao: Integer;
  posicoes: Array of Integer;
  texto: String;
begin
  while (Pos('>', texto) > 0) do // Verifica se tem '>' na variável texto
  begin
    SetLength(posicoes, Length(posicoes) + 1); // Aumenta um espaço no array
    posicao := Pos('>', texto); // Pega a posição do primeiro >
    posicoes[High(posicoes)] := posicao; // Armazena a posição no ultimo espaço do array
    texto[posicao] := ' '; // Substitui o > por espaço
  end;

  // Neste ponto você terá todas as posições dos '>' dentro do array posicoes
end;

See more about the function POS here.

See working on Ideone.

2


You can do it like this:

var
  i, len: integer;
  posicoes: array of integer;
  texto: string;
begin
  texto := 'conteúdo > do > texto';
  SetLength(posicoes, 0);        //esvaziar array na inicialização
  for i := 1 to length(texto) do
    if texto[i] = '>' then
    begin
      len := Length(posicoes);
      SetLength(posicoes, len + 1);
      posicoes[len] := i;
    end;
end;
  • To be less verbose in If would do so Setlength(positions, Length(positions) + 1); positions[Length(positions) - 1] := i;

  • could do as follows: while(a <= Length(Text)) of Begin c := copy(Text, a, 1); if (c = '>') then Begin larger[nmaior] := a; nmaior := nmaior+1; end; if (c = '<') then Begin minor[nmenor] := a; nmenor := nmenor+1; end; a := a+1; end;

Browser other questions tagged

You are not signed in. Login or sign up in order to post.