Avatar billede hestetoften Nybegynder
27. august 2008 - 14:28 Der er 11 kommentarer og
1 løsning

find alle time pattern

Jeg har indlæst en txt fil i et memo

Hvordan gennemsøger jeg memoets text og finder frem til alle de steder hvor timeFormatet findes (xx:xx:xx)
og erstatter dem med en anden text
Avatar billede jakobdo Ekspert
27. august 2008 - 14:35 #1
memoets text, er det en streng eller er det i array eller en form for collection ?
Avatar billede jakobdo Ekspert
27. august 2008 - 14:37 #2
Har du styr på hvordan man anvender regexp i delphi ?
Avatar billede hestetoften Nybegynder
27. august 2008 - 14:42 #3
Memoets text er en streng

Jeg har leget lidt med regexp men vil ikke påstå at jeg har styr på det
Avatar billede jakobdo Ekspert
27. august 2008 - 14:50 #4
Jeg kender slet ikke delphi, men hvis dette siger dig noget:

var
    Regex: TPerlRegEx;
    ResultString: string;

Regex := TPerlRegEx.Create(nil);
Regex.RegEx := '\d{2}:\d{2}:\d{2}';
Regex.Options := [preCaseless];
Regex.Subject := SubjectString;
Regex.Replacement := 'TEKST-SOM-BLIVER-INDSÆT-I-STEDET-FOR-XX:XX:XX';
Regex.ReplaceAll;
ResultString := Regex.Subject;
Avatar billede hestetoften Nybegynder
27. august 2008 - 14:52 #5
kikker lige på det
Avatar billede hestetoften Nybegynder
27. august 2008 - 14:59 #6
Desværre virker regexp ikke i delphi uden komponent
Avatar billede stone Forsker
27. august 2008 - 17:56 #7
Prøv at kigge på det her eksempel:

http://www.swissdelphicenter.ch/en/showcode.php?id=1046
Avatar billede hestetoften Nybegynder
28. august 2008 - 12:45 #8
Meget simpelt måske

Find første tidsformat (xx:xx:xx) ??
Avatar billede jakobdo Ekspert
28. august 2008 - 13:26 #9
Jeg tror hellere du skal finde ud af hvordan regular expressions virker i delphi.

http://www.regular-expressions.info/delphi.html
Avatar billede kroning Nybegynder
28. august 2008 - 14:15 #10
Her er den manuelle metode:

procedure ReplaceMemoText(Memo : TMemo;NewStr : string);
var
  i : integer;
  Temp : string;

procedure chk;
var
  t,m,s : integer;
begin
  if Temp[i+3]<>':' then
    exit;
  t:=StrToIntDef(Copy(Temp,i-2,2),-1);
  m:=StrToIntDef(Copy(Temp,i+1,2),-1);
  s:=StrToIntDef(Copy(Temp,i+4,2),-1);
  if (t>-1) and (t<24) and (m>-1) and (m<60) and (s>-1) and (s<60) then
  begin
    Delete(Temp,i-2,8);
    Insert(NewStr,Temp,i-2);
    inc(i,Length(NewStr));
  end;
end;

begin
  Temp:=Memo.Text;
  i:=3;
  while i<Length(Temp) do
  begin
    if Temp[i]=':' then
      Chk;
    inc(i);
  end;
  Memo.Text:=Temp;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ReplaceMemoText(Memo1,'*Ny tekst*');
end;
Avatar billede hestetoften Nybegynder
28. august 2008 - 14:51 #11
Fantastisk kroning, det virker

Læg et svar.

Tak til alle der prøvede at hjælpe :-)
Avatar billede kroning Nybegynder
28. august 2008 - 15:48 #12
ok
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