copy com pos
A dúvida é simples, mas como eu faço para copiar parte de uma string até uma dada posição, tipo assim:
MA4567 - M26112010
Eu quero copiar somente o MA4567. Copiar o M26112010 eu já sei.
Mas não consegui fazer copiar o que vem antes do hífem.
Pjava
Curtidas 0
Respostas
Wilson Junior
26/11/2010
Tente assim:
Obs.: Coloquei um componente TMemo somente para mostrar os valores.
Espero ter colaborado.
procedure TForm1.BitBtn1Click(Sender: TObject); var Texto, Letra: string; De, Ate: integer; begin Memo1.Clear; Texto := 'MA4567 - M26112010 - M19 M198R15Y67T89AJR'; Letra := 'M'; while Pos(Letra, Texto) > 0 do begin De := Pos( Letra, Texto ); Ate := Pos( ' ', Texto ) - 1; if Ate < 0 then Ate := Length( Texto ) ; Memo1.Lines.Add( Copy(Texto, De, Ate) ); Delete( Texto, De, 1 ); Delete( Texto, 1, Pos(Letra, Texto)-1 ); end; end;
Obs.: Coloquei um componente TMemo somente para mostrar os valores.
Espero ter colaborado.
GOSTEI 0
Pjava
26/11/2010
Acho que não vai dar certo, pois nem sempre a letra é 'M', e você fixou as strings, pois elas podem ter várias quebras com Hifem e eu só preciso das primeiras antes do hífem. Já vi fazer com copy e pos tipo assim:
Copy(Texto,Length(Texto),Pos('-',Texto)-2) e etc..
Esse exemplo aí não funciona, mas era algo parecido com isso aí.
GOSTEI 0
Wilson Junior
26/11/2010
Ah, você quer separado por Hífen...agora entendi.
Veja se esta rotina lhe ajuda
Espero ter colaborado.
Veja se esta rotina lhe ajuda
{ Retorna o pedaço da string a partir da esquerda
Campos:
Texto = string de onde será retirado o pedaço;
Delim = Delimitador de pedaços;
Indice = Posição do pedaço, começa em 0 igual a um StringList.
Exemplo:
Texto = 'Maria-Joaquina-da-Silva'
Delim = '-'
Indice = 0 -> Maria
1 -> Joaquina
2 -> da
3 -> Silva }
function PedacoL(Texto: String; const Delim: String; Indice: Integer): String;
var
x, px: Integer;
begin
Result := '';
if Pos( Delim, Texto ) = 0 then
begin
if Indice = 0 then
Result := Texto
else
Result := ''
;
Exit;
end
;
Texto := Texto + Delim;
for x := 0 to Indice - 1 do
begin
if Texto = '' then
Break
;
px := Pos( Delim, Texto + Delim );
Texto := Copy( Texto + Delim, px + Length( Delim ), Length( Texto ) );
end;
px := Pos( Delim, Texto + Delim);
Result := Copy( Texto + Delim, 1, px - 1 );
end;
Espero ter colaborado.
GOSTEI 0
Pjava
26/11/2010
Fiz assim e funcionou.
GOSTEI 0
Pjava
26/11/2010
Fiz assim e funcionou.
var
iPos: Integer;
begin
iPos := Pos(' ', ReverseString(ComboBox1.Text))-1;
if iPos > 0 then
lblOrdem.Caption := LeftStr(ComboBox1.Text, iPos);
end;GOSTEI 0
Leandro
26/11/2010
Outra solucao simples
Trim(Copy(Texto,1,Pos('-',Texto)-1))
Trim(Copy(Texto,1,Pos('-',Texto)-1))
GOSTEI 0