como capturar todos os cpf de um texto em um memo?

Delphi

21/09/2012

boa noite pessoal!

gostaria de saber como capturar todos os cpfs de um texto, nesse texto te muita coisa, queria extrair somente os cpfs, e possível? como se faz?

desde já agradeço,


Adriano Fonseca.
Adriano Pereira

Adriano Pereira

Curtidas 0

Respostas

Deivison Melo

Deivison Melo

21/09/2012

Poderia fazer isso com a utilização dos comandos: POS e Copy...

Onde poderia fazer da seguinte forma:

A função Copy(str : string, i, j : integer) : string copia caracteres de uma dada string.
onde :

str é a string de onde se deseja copiar os caracteres.

i é posição de onde vai começar a cópia.
j é quantidade de caracteres a copiar.

exemplo :

s : string;
s := Copy('Clube delphi', 3, 7);

após a execução dessa linha a variável s conteria : 'ube del'

já a função Pos(str, subStr : string) : integer retorna a posição inicial de uma determinada sequência de caracteres dentro de uma string.

onde :

str é a string de onde se deseja verificar.
subStr é a sequência de caracteres que se deseja encontrar dentro de str.

exemplo:

i : integer;
i := Pos('Clube delphi', 'delphi');

após a execução dessa linha i receberia 7, pois a substring 'delphi' tem seu primeiro caracter na posição 7.

caso subStr não for encontrada em str, a função str retorna -1.

obs.: a posição inicial em tipos de dados strings é 1.

Espero ter ajudado!!!
GOSTEI 0
Singular Ti

Singular Ti

21/09/2012

Isso ae Deivison, ótima explicação.. Ficou bem claro eu tb faria dessa forma!!
Fica ae a dica!!!
GOSTEI 0
Marco Salles

Marco Salles

21/09/2012

Uma outra forma de fazer , a que eu prefiro é utilizar Expressões Regulares nativo no delphi se não me
engando a partir do DelphiXe
qualquer coisa eu posto o código
[]sds
GOSTEI 0
Jose Guedes

Jose Guedes

21/09/2012

Olá! Corroborando o que o Marcos Salles disse o ideal para este tipo de problema é a Expressão Regular.

Acredito que a solução já tenha sido dada porém deixo aqui minha sugestão de resolução.


program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils, System.RegularExpressions;

const
C_FRASE_EXEMPLO = 'Fulano de tal com o CPF 999.999.358-32 e Senhor Cicrano com o CPF 000.000.000-89';
C_REGEX = '(\d\.?)-\d';
var
_cpf : TMatch;
begin

  _cpf := TRegEx.Match(C_FRASE_EXEMPLO,C_REGEX,[]);
  while (_cpf.Success) do
  begin
    Writeln('CPF encontrado: ' + _cpf.Value);
    _cpf := _cpf.NextMatch;
  end;

  Readln;
end.



Obviamente é um exemplo bobo sem considerar alguns problemas do seu cenário.

[url]http://eugostododelphi.blogspot.com.br/p/expressao-regular.html[/url]

É isto,
GOSTEI 0
Marco Salles

Marco Salles

21/09/2012

Como é bom o amigo Mario comparecer por aqui e nos trazer esta maravilha de solução limpa com o uso de Expressão Regular
apareça mais vezes Mario e nos presentei com esta facilidade que vc tem em utilizar esta biblioteca

[]sds
GOSTEI 0
POSTAR