GARANTIR DESCONTO

Fórum Delphi - Function Procurar palavra entre posições #616818

30/09/2021

0

Olá boa tarde Amigos. Preciso de uma ajuda de vocês , sou estudante em delphi e não sei fazer uma function para resolver meu problema , agradeço desde já se puderem me ajudar neste problemas:

Tenho vários códigos que segue um determinado padrão de códigos separados por - (traço) , onde sua estrutura é :
primeiro traço código vendedor
segundo traço código cidade
terceiro traço código cliente
quarto traço código produto
exemplo:
1980-147-15775000-12
45-1-14785-14589
1-99-189-1658
Vejam , que embora segue um padrao obedecendo os traços, mas não segue um padrao na quantidade de caracteres entre traços.
o que eu preciso é de uma função que pegue todos valores entre o segundo e terceiro traço encontrato na string
o que estou buscando seria + ou - assim

string = '1980-147-15775000-12'
function cliente(string,CaracterProcurado,PosicaoInicio,PosicaoFim)
resultado da function >>> 15775000


string = 1-99-189-1658
function cliente(string,CaracterProcurado,PosicaoInicio,PosicaoFim)
resultado da function >>> 189

ou seja , ele me retornaria o que esta entre a Segunda posição que encontrou "-" e a terceira posição que encontrou "-"

Agradeço antecipadamente se puderem me ajuda.
Mauricio Gabriel

Mauricio Gabriel

Responder

Post mais votado

30/09/2021

https://www.devmedia.com.br/forum/retornar-string-a-partir-de-um-caracter/247785

https://pt.stackoverflow.com/questions/28223/copiar-parte-de-uma-string

Gxf

Gxf
Responder

Gostei + 1

Mais Posts

30/09/2021

Mauricio Gabriel

https://www.devmedia.com.br/forum/retornar-string-a-partir-de-um-caracter/247785

https://pt.stackoverflow.com/questions/28223/copiar-parte-de-uma-string



Muito obrigado pela ajuda prestada, mas essa solução encontra apenas o primeiro caracter encontrado dentro de uma string, o que estou buscando é algo entre as posições 2 e 3 encontrado ...
Muito obrigado pela ajuda , mas a função Pos( só encontra o primeiro item. precisaria do segundo ao terceiro item encontrado.

Responder

Gostei + 0

30/09/2021

Emerson Nascimento

sugiro usar um stringlist.

var
   slCodigos: TStringList;
   strTeste: string;
begin
   strTeste := '1980-147-15775000-12';

   slCodigos := TStringList.Create;
   slCodigos.Delimiter := '-'; // usado para separar a string
   slCodigos.StrictDelimiter := True; // somente o caractere indicado será usando para separar a string
   slCodigos.DelimitedText := strTeste; // string que será 'dividida'

   MessageBox(
      'Vendedor: ' + slCodigos[0]+#13#10+
      'Cidade: ' + slCodigos[1]+#13#10+
      'Cliente: ' + slCodigos[2]+#13#10+
      'Produto: ' + slCodigos[3],
      'Resultado',
      mb_ok
   );

end;

pode ter algum erro de sintaxe. estou sem Delphi no momento.
Responder

Gostei + 1

30/09/2021

Natanael Ferreira

Criei uma função para o que você precisa:

function Cliente(valores: string): string;
var
  lista: TStringList;
begin
  Result := EmptyStr;

  lista := TStringList.Create;
  try
    lista.StrictDelimiter := True;
    lista.Delimiter := '-';
    lista.DelimitedText := valores;
    if lista.Count >= 3 then
      Result := lista[2];
  finally
    lista.Free;
  end;
end;


Exemplo de uso:

ShowMessage(Cliente('1980-147-15775000-12')); // retorna 15775000
Responder

Gostei + 1

30/09/2021

Mauricio Gabriel

sugiro usar um stringlist.

var
   slCodigos: TStringList;
   strTeste: string;
begin
   strTeste := '1980-147-15775000-12';

   slCodigos := TStringList.Create;
   slCodigos.Delimiter := '-'; // usado para separar a string
   slCodigos.StrictDelimiter := True; // somente o caractere indicado será usando para separar a string
   slCodigos.DelimitedText := strTeste; // string que será 'dividida'

   MessageBox(
      'Vendedor: ' + slCodigos[0]+#13#10+
      'Cidade: ' + slCodigos[1]+#13#10+
      'Cliente: ' + slCodigos[2]+#13#10+
      'Produto: ' + slCodigos[3],
      'Resultado',
      mb_ok
   );

end;

pode ter algum erro de sintaxe. estou sem Delphi no momento.



Boa tarde !!! Emerson Nascimento

Excelente Atendeu o que estava procurando ... e aprendi mais com isso . Muito obrigado por sua ajuda.
Responder

Gostei + 0

30/09/2021

Mauricio Gabriel

Criei uma função para o que você precisa:

function Cliente(valores: string): string;
var
  lista: TStringList;
begin
  Result := EmptyStr;

  lista := TStringList.Create;
  try
    lista.StrictDelimiter := True;
    lista.Delimiter := '-';
    lista.DelimitedText := valores;
    if lista.Count >= 3 then
      Result := lista[2];
  finally
    lista.Free;
  end;
end;


Exemplo de uso:

ShowMessage(Cliente('1980-147-15775000-12')); // retorna 15775000



Boa tarde Natanael Ferreira , Antecipo Agradecimento com sua contribuição , Atendeu em cheio o que eu estava buscando , Graças a vocês aprendi aqui 02 formas de fazer diferentes que trazem o mesmo resultado ... Agradeço grandemente por ter compartilhar seu conhecimento comigo.
Espero poder ajudar outros como vocês fizerem comigo em um futuro próximo ... Obrigado
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar