Avatar billede jonathan87 Nybegynder
10. september 2005 - 20:44 Der er 24 kommentarer og
1 løsning

Søgning

Hej

Jeg har lige fået datalogi i gymnasiet og er begyndt at bruge Delphi 7. Hvordan laver man en søgefunktion, hvor man skal søge efter ord i tekstdokumenter?
Jeg kan eventuelt sende programmet, hvis det vil hjælpe.
Avatar billede stone Forsker
10. september 2005 - 21:13 #1
procedure TForm1.Find1Click(Sender: TObject);
begin
FindDialog1.FindText := RichEdit1.SelText;
FindDialog1.Execute;    //åbner finddialogen
end;

procedure TForm1.Replace1Click(Sender: TObject);
begin
ReplaceDialog1.FindText := RichEdit1.SelText;
ReplaceDialog1.Execute; //åbner Replacedialogen
end;

procedure TForm1.FindDialog1Find(Sender: TObject);
var
st: TSearchTypes;
newpos: integer;
cd: TFindDialog;
begin

cd := (Sender as TFindDialog);

if frMatchCase in cd.Options then
  st := st+[stMatchCase];

if frWholeWord in cd.Options then
  st := st+[stWholeWord];

if RichEdit1.SelLength > 0 then
  RichEdit1.SelStart := RichEdit1.SelStart + 1;

newpos := RichEdit1.FindText(cd.FindText,
                    RichEdit1.SelStart,
                    Length(RichEdit1.Text),
                    st);

if newpos <> -1 then
  begin
  RichEdit1.SelStart := newpos;
  RichEdit1.SelLength := Length(cd.FindText);
  end
else
  begin
  MessageDlg('Færdig',mtInformation,[mbOK],0);
  RichEdit1.SelStart := 0;
  end;

end;
Avatar billede stone Forsker
10. september 2005 - 21:15 #2
//erstat ord

procedure TForm1.ReplaceDialog1Replace(Sender: TObject);
begin
if RichEdit1.SelLength = 0 then
  FindDialog1Find(Sender)
else
  begin
  RichEdit1.SelText :=  ReplaceDialog1.ReplaceText;
  FindDialog1Find(Sender);
  end;

if frReplaceAll in ReplaceDialog1.Options then
  while (RichEdit1.SelLength <> 0) do
    ReplaceDialog1Replace(Sender);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
RichEdit1.SelStart := 0;
end;
Avatar billede jonathan87 Nybegynder
10. september 2005 - 21:19 #3
hmm.. det er sikkert meget godt :)
Men jeg er ikke særlig fortrolig med programmet endnu, så jeg forstår det ikke. Hvis jeg  laver et ny projekt skal jeg så bare kopiere din tekst ind, og så virker det?
Avatar billede jonathan87 Nybegynder
10. september 2005 - 21:26 #4
ups. jeg skal selvfølgelig ikke lavet et nyt projekt, da det jo skulle virker til det program jeg har lavet. men jeg fatter det stadig ikke.
Avatar billede stone Forsker
10. september 2005 - 22:12 #5
Ok så starter vi lige med TFindDialog.....
den finder du på fanebladet "dialog"

du placerer først en TFindDialog på din form
gå til event for TFindDialog og skriv.....

var
st: TSearchTypes;
newpos: integer;
cd: TFindDialog;
begin

cd := (Sender as TFindDialog);

if frMatchCase in cd.Options then
  st := st+[stMatchCase];

if frWholeWord in cd.Options then
  st := st+[stWholeWord];

if RichEdit1.SelLength > 0 then
  RichEdit1.SelStart := RichEdit1.SelStart + 1;

newpos := RichEdit1.FindText(cd.FindText,
                    RichEdit1.SelStart,
                    Length(RichEdit1.Text),
                    st);

if newpos <> -1 then
  begin
  RichEdit1.SelStart := newpos;
  RichEdit1.SelLength := Length(cd.FindText);
  end
else
  begin
  MessageDlg('Færdig',mtInformation,[mbOK],0);
  RichEdit1.SelStart := 0;
  end;

put en tbutton på formen og skriv....

FindDialog1.FindText := RichEdit1.SelText;
FindDialog1.Execute;    //åbner finddialogen
Avatar billede stone Forsker
10. september 2005 - 22:18 #6
jeg kunne evt sende dig et færdigt eksemplet, hvis du stadig er i tvivl....
Avatar billede jonathan87 Nybegynder
10. september 2005 - 22:32 #7
ja, det ville være herligt.

så prøver jeg mig lige frem
Avatar billede stone Forsker
10. september 2005 - 22:41 #8
smid lige en mail adr. så sender jeg den
Avatar billede jonathan87 Nybegynder
10. september 2005 - 22:42 #9
jgthb@mail.dk
Avatar billede stone Forsker
10. september 2005 - 22:49 #10
sendt....
Avatar billede jonathan87 Nybegynder
10. september 2005 - 22:54 #11
okay. hvordan bestemmer man så, hvor den skal lede? og søger den efter filnavne eller søger den efter tekst i tekstfiler?
Avatar billede stone Forsker
10. september 2005 - 23:12 #12
eksemplet er baseret på at du indlæser et dokument i dit program og laver søgningen derfra....
du kan bruge en TOpendialog på fanebladet "dialog"

og tildeler proceduren til en f.eks Tbutton

Richedit1.Lines.LoadFromFile(OpenDialog1.FileName);//den valgte fil indlæses i Richedit
Avatar billede jonathan87 Nybegynder
10. september 2005 - 23:23 #13
det er sådan at jeg har adskillige tekstdokumenter, og jeg vil have at den gennemsøger alle på en gang
Avatar billede jonathan87 Nybegynder
10. september 2005 - 23:38 #14
jeg vil stoppe for i dag. tak for hjælpen ind til videre
Avatar billede stone Forsker
11. september 2005 - 00:11 #15
oki.. har ikke lige en løsning her på stående fod, men jeg kigger lidt på det senere
Avatar billede stone Forsker
12. september 2005 - 18:26 #16
enten skal du programmere dig ud af problemet og det vil nok tage lidt tid... eller
du kunne bruge dette component...

http://dsp.href.com/scripts/runisa.dll?DSP:welcome:308694.9444:.ckb,results

her kan du sætte forskellige parameter op for din søgning f.eks at den ikke skal søge i *.doc men i *.txt filer
Avatar billede stone Forsker
12. september 2005 - 22:16 #17
har lige afprøvet den demo der følger med programmet det virker kanont... den viser alle filer i en listview som indeholder de fordefinerede ord....
Avatar billede jonathan87 Nybegynder
12. september 2005 - 23:36 #18
jeg er ikke sikker på, hvilket komponent du mener. det link du gav mig var en side med søgeresultater. jeg prøvede så det øverste resultat, men den virker kun til delphi 2. så hvilken en taler du om?
Avatar billede stone Forsker
13. september 2005 - 08:15 #19
jeg har sendt dig componentet....
Avatar billede jonathan87 Nybegynder
13. september 2005 - 18:03 #20
okay. jeg har nu prøvet det, men ærlig talt synes jeg det er noget af en ordentlig mundfuld. hvordan implementerer jeg det i mit program?
Avatar billede stone Forsker
13. september 2005 - 18:40 #21
det er jo bare at tage de ting fra demoen du vil bruge og smide i dit program, da det kun er selve søgning på indholdes af filer der indeholder de fordefinerede ord - du skal bruge.
den del du skal bruge er 3 edit 2 knapper start og stop og en listview - er du stadig usikker på hvordan du skal gå frem - kan du bare kopiere demoen og så filtrer de dele du ikke vil bruge fra og kør demoen til den virker som du gerne vil have - så kan du implementer den i dit program bagefter.....
Avatar billede jonathan87 Nybegynder
13. september 2005 - 19:41 #22
hej. jeg har kigget lidt på det, og kan ikke få det til at virke. kan jeg ikke sende dig mit program. det fylder under 1 mb. og så indsætter du det vigtige. så kan jeg bagefter sammenligne med hvad jeg havde før og på den måde lære det. jeg forstår selvfølgelig, hvis du ikke gider, men ville lige spørge.
Avatar billede stone Forsker
13. september 2005 - 21:46 #23
naaa tror ik du lære det hvis jeg laver dit program for dig..........men

jeg har lavet et nyt project hvor jeg har filtreret de uvigtige ting fra og hvor der bare er søgning på fordefineret ord - det er mere overskueligt.

husk at navngive de forskellige componenter som jeg har gjort ellers skal du ændre i koden. Selve layoutet kan du ændre som du vil for at tilpasse det til dit program.
jeg sender det lige...
//stone
Avatar billede jonathan87 Nybegynder
14. september 2005 - 01:04 #24
ok. jeg vil kigge på det. det kan være at der går et stykke tid før jeg melder tilbage om det virker. men tak for hjælpen
Avatar billede jonathan87 Nybegynder
05. november 2009 - 02:46 #25
lukker
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