Avatar billede vallemanden Nybegynder
03. juni 2010 - 11:00 Der er 6 kommentarer og
1 løsning

find tlf nr

hej experter

er der nogle af jer der ligge inde med et script der kan fange telefon nr i en tekst
Avatar billede mbsnet Nybegynder
03. juni 2010 - 18:07 #1
hvilken tekst, kan du give et eksempel
Avatar billede vallemanden Nybegynder
03. juni 2010 - 19:45 #2
øhh er teksten ikke lige gyldig? da det er en dymanisk tekst, det kan f.eks. ære en mail
hvis det er en statisk tekst er det jo nemt at finde så skal programmet jo bare kigge fra char nrXX til nr XX
Avatar billede mbsnet Nybegynder
03. juni 2010 - 23:12 #3
ok, har lavet et eksempel som kan finde tal og tegn i en tekst, udfra en "maske". Det skulle være til at ændre i masken, så den kan lede efter forskellige type numre...

unit Unit1;

interface

uses
  Windows, Classes, Graphics, Controls, Forms, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
  private
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

const
NOTHING='';
NULL=#0;
vbcrlf=#13+#10;
tNumbs=['0'..'9'];

function pLen(p:pChar):int64;
begin result:=int64(p);
if p<>nil then while p^<>NULL do inc(p);
result:=int64(p)-result
end;

function pFindByMask(p,pMask:pChar;aRslt:tStringList):boolean;
var pP,mP:pChar;i,aLen,aMaskLen:longInt;bl:boolean;s:string;
begin result:=false;
aLen:=pLen(p);aMaskLen:=pLen(pMask);
if (aMaskLen<1) or (aLen<aMaskLen) then exit;
while aLen>aMaskLen do begin pP:=p;mP:=pMask;bl:=true;
  for i:=1 to aMaskLen do begin
  case mP^ of
    'x','X':if not (pP^ in tNumbs) then begin bl:=false;break end;
  else
    if pP^<>mP^ then begin bl:=false;break end;
  end;inc(pP);inc(mP)
  end;
  if bl then begin result:=true;
  setLength(s,aMaskLen);system.move(p^,pointer(s)^,aMaskLen);aRslt.add(s)
  end;dec(aLen);inc(p)
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var s:string;sl:tStringList;
begin
sl:=tStringList.create;

//EKSEMPEL 1
s:='Navn 1, Adresse 1, +45 29000000, '+vbcrlf
  +'Navn 2, Adresse 2, +45 31000000, '+vbcrlf
  +'Navn 3, Adresse 3, +45 29 00 00 00, '+vbcrlf
  +'Navn 4, Adresse 4, +45 3100 0000, '+vbcrlf;

sl.add('EKSEMPEL');
pFindByMask(pointer(s),'+xx xxxxxxxx',sl);
pFindByMask(pointer(s),'+xx xx xx xx xx',sl);
pFindByMask(pointer(s),'+xx xxxx xxxx',sl);
sl.add(NOTHING);

memo1.text:=sl.text;
sl.free
end;

end.
Avatar billede arne_v Ekspert
04. juni 2010 - 03:34 #4
Jeg vil mene at opgaven ligger lige til regex.

Nu kommer Delphi desværre ikke med indbygger regex support.

Men man kan f.eks. hente og downloade TPerlRegEx.

Demo kode:

program regex;

{$APPTYPE CONSOLE}

uses
  SysUtils, PerlRegEx;

procedure test(s : string);

var
  re : TPerlRegEx;

begin
  re := TPerlRegEx.Create(nil);
  re.RegEx := '(\d{8})|(\d{2} \d{2} \d{2} \d{2})';
  re.Subject := s;
  if re.Match then begin
    repeat
      writeln(re.SubExpressions[0]);
    until not re.MatchAgain;
  end;
  re.Destroy;
end;

begin
  test('Dette er et telefon nummer 12345678 !');
  test('Dette er flere telefon numre 12345678 og 87654321 !');
  test('Dette er et telefon nummer 12 34 56 78 !');
  test('Dette er flere telefon numre 12 34 56 78 og 87 65 43 21 !');
  readln;
end.
Avatar billede vallemanden Nybegynder
04. juni 2010 - 11:45 #5
Mange tak begge to, jeg kigger på det i aften :)
Avatar billede vallemanden Nybegynder
04. juni 2010 - 17:58 #6
jeg kan ikke få  TPerlRegEx installeret
mbsnets kode virker ret godt læg et svar
Avatar billede mbsnet Nybegynder
04. juni 2010 - 18:30 #7
sv:
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester