copy com pos

Delphi

26/11/2010

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

Pjava

Curtidas 0

Respostas

Wilson Junior

Wilson Junior

26/11/2010

Tente assim:
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

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

Wilson Junior

26/11/2010

Ah, você quer separado por Hífen...agora entendi.
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

Pjava

26/11/2010

Fiz assim e funcionou.
GOSTEI 0
Pjava

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

Leandro

26/11/2010

Outra solucao simples

Trim(Copy(Texto,1,Pos('-',Texto)-1))
GOSTEI 0
POSTAR