Função Pos() Como encontrar a posição da primeira substring e não da última
12/04/2015
0
Uma string tem 2 ou 3 espaços, que encontrar a posição só do primeiro espaço.
var
s, textL:string
nL, vpos2: integer;
Procedure:
textL:= memo1.lines[nL];
vpos2:=1;
vpos2:=(Pos(' ',textL));
memo3.lines.add(s);
Acho que descobri o motivo de não está dando certo:
É o problema do TAB que parece ser espaço, mas não é. O primeiro espaço é um TAB(codigo 9, segundo fontes daqui), e o segundo tembém é, mas o terceiro é espaço, e o POS detecta espaço ' '.
Como vou posicionar POS num TAB?
Joao
Post mais votado
12/04/2015
A função Pos() do delphi retorna o índice da primeira string encontrada e caso não encontre retorna zero, se tiver mais de um irá ter que ir quebrando a string para chegar na última.
Exemplo
Sintaxe : function Pos(Substr: string; S: string): Integer; var sNome: String; nPos1: Byte; nPos2: Byte; nPos3: Byte; begin sNome := \'Antonio Celio Morais\'; nPos1 := Pos(\'A\', sNome); // nPos1 será 1 nPos2 := Pos(\'Mor\', sNome); // nPos2 será 15 nPos3 := Pos(\'Marco\', sNome); // nPos3 sera 0 end;
Lucas Ramos
Mais Posts
12/04/2015
Joao
A função Pos() do delphi retorna o índice da primeira string encontrada e caso não encontre retorna zero, se tiver mais de um irá ter que ir quebrando a string para chegar na última.
Exemplo
Sintaxe : function Pos(Substr: string; S: string): Integer; var sNome: String; nPos1: Byte; nPos2: Byte; nPos3: Byte; begin sNome := \'Antonio Celio Morais\'; nPos1 := Pos(\'A\', sNome); // nPos1 será 1 nPos2 := Pos(\'Mor\', sNome); // nPos2 será 15 nPos3 := Pos(\'Marco\', sNome); // nPos3 sera 0 end;
12/04/2015
Lucas Ramos
Atribua o #9 em uma string e tente usar o Pos() caso deseje a posição do TAB, se não funcionar faça um for percorrendo todos os caracteres até achar a posição que deseja
function RetornaPosicao(pTexto: string;pChar: string): integer; var lCont: integer; begin result := 0; for lCont := 1 to Length(pTexto) do begin if (pTexto[lCont] = pChar) then begin result := lCont; break; end; end; end;
Basicamente essa função vai percorrer toda a string caracter a caracter e retornar a posição desejada, caso não encontre retorna zero, basicamente a mesma coisa que o Pos() só que com 1 caractere, verifica se é isso que você precisa?
12/04/2015
Joao
Atribua o #9 em uma string e tente usar o Pos() caso deseje a posição do TAB, se não funcionar faça um for percorrendo todos os caracteres até achar a posição que deseja
function RetornaPosicao(pTexto: string;pChar: string): integer; var lCont: integer; begin result := 0; for lCont := 1 to Length(pTexto) do begin if (pTexto[lCont] = pChar) then begin result := lCont; break; end; end; end;
Basicamente essa função vai percorrer toda a string caracter a caracter e retornar a posição desejada, caso não encontre retorna zero, basicamente a mesma coisa que o Pos() só que com 1 caractere, verifica se é isso que você precisa?
De jeito que eu fiz, até compilou, mas na hora de executar o procedure, dá erro justamente na linha que testa o codico ASC e exibe esta mensagem.
[img:descricao=Erro Delphi]http://arquivo.devmedia.com.br/forum/imagem/424085-20150412-201839.jpg[/img]
Você quer que eu joque esta rotina dentro de um for percorrendo cada caracter da string? Você quer que eu atribua o #9 a uma string? Eu não entendi.
Assim?
vstring:=#9;
13/04/2015
Lucas Ramos
No caso de atribuir o #9 numa string é para achar a posição do TAB com a função POS(), caso não funcione tente usar percorrendo em um for, caso não deseje o TAB tente usar um replace e depois usar o POS com a string que desejar.
15/04/2015
Emerson Nascimento
s, textL:string
nL, vpos, vpostab: integer;
Procedure:
textL:= memo1.lines[nL];
vpostab := Pos(#9,textL); // posição do tab
vpos := Pos(' ',textL); // posição do espaço
// avalia se encontrou o tab e se o tab está antes do espaço
if (vpos09 > 0) and (vpos > vpos09) then
vpos := vpos09;
// a partir daqui você trabalha com o conteúdo de vpos
memo3.lines.add(s);
17/04/2015
Joao
Antes eu olhei no help do Delphi e hoje eu pude testar outras alternativas.
Vejam o que eu fiz:
Teste1: Funcionou
c:= textL[i];
if (Ord(c)= 9) then
Teste2: Funcionou também.
c:= textL[i];
if (c = #9) then
O problema não era na função, mas sim no cálculo da posição do tab. Acho que eu estava somando uma caracter ao invés de um número. Depois que corrigir, funcionou.
A sua dica ajudeu também. Eu nunca havia usado # para trabalhar com caracter.
17/04/2015
Joao
Atribua o #9 em uma string e tente usar o Pos() caso deseje a posição do TAB, se não funcionar faça um for percorrendo todos os caracteres até achar a posição que deseja
function RetornaPosicao(pTexto: string;pChar: string): integer; var lCont: integer; begin result := 0; for lCont := 1 to Length(pTexto) do begin if (pTexto[lCont] = pChar) then begin result := lCont; break; end; end; end;
Basicamente essa função vai percorrer toda a string caracter a caracter e retornar a posição desejada, caso não encontre retorna zero, basicamente a mesma coisa que o Pos() só que com 1 caractere, verifica se é isso que você precisa?
Bom, neste caso eu usei um While para percorrer a string. Veja:
lim:= Length(textL);
i:=0;
while i<lim do
begin
c:= textL[i];
if (c = #9) then
end;
Eu resumi, mas é basicamente isso.
Clique aqui para fazer login e interagir na Comunidade :)