30. november 2004 - 22:17Der er
14 kommentarer og 1 løsning
Har lidt problemer med at optælle ord
Hey eksperter
Jeg har i længere tid prøvet at lave en tekst editor og jeg er da kommet så langt at jeg nu skal til at lave nogle procedurere som kan hjælpe mig med at optælle alle ordene i det dokument der er åbnet og derefter give resultatet i en ny form, men jeg kan ikke rigtig compile koden pga. at den melder fejl. Jeg forstår det ikke og vil derfor gerne se om i kan hjælpe mig lidt.
Her er min procedurere:
{Nu vil jeg lave nogle procedurer hvor ved jeg kan finde antal ord som er skrevet i mit dokument} procedure SkipSkilleTegn(var Streng: string); begin while(Length(Streng)>0) and (Streng[1] in SkilleTegn+[' ']) do Delete(Streng,1,1); end;
procedure OpsamlOrd(var Streng, NaesteOrd: string); begin NaesteOrd:=''; while(Length(Streng) > 0) and not(Streng[1] in SkilleTegn+[' ']) do begin NaesteOrd:=NaesteOrd+Streng[1]; Delete(Streng,1,1); end;
end;
procedure FindOrd(var Streng, NaesteOrd: string); begin NaesteOrd:=''; if Streng='' then Exit; SkipSkilleTegn(Streng); if Streng='' then Exit; OpsamlOrd(Streng,NaesteOrd); end;
procedure FindAntalOrd(RichEdit: TRichEdit;var Antal: Integer); var Tekst, Ord: string;
begin Antal:=0; Tekst:=form1.RichEdit1.Text; while Tekst<> '' do begin FindOrd(Tekst,Ord); if Ord <> '' then inc(Antal); end;
end;
Fejlen den kommer med er [Error] Unit1.pas(392): ';' expected but '.' found [Fatal Error] V6.dpr(6): Could not compile used unit 'Unit1.pas'
Det den hentyder til er denne procedure procedure TForm2.FormActivate(Sender: TObject); var AntalOrd: Integer;
begin FindAntalOrd(Form1.RichEdit1,AntalOrd); Form2.Label2.Caption:=inttostr(AntalOrd);
end; Altså den som skal kalde form2 og sætte resultatet i den. Jeg forstår det ikke :( Håber i kan hjælpe mig lidt!!
Ikke for at tage glæden fra dig, men her er et eksempel, der kan tælle ord i en RichEdit. Jeg har fundet eksemplet på nettet og rettet det lidt til. Placer en Richedit, en Button og en Label på en form og så er du kørende med eksemplet.
private { Private declarations } function CountInLine(Str: string): Integer; public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); var CountWord, i: Integer; begin CountWord:=0; with RichEdit1 do begin for i:=0 to Lines.Count-1 do CountWord:=CountWord+CountInLine(Lines.Strings[i]); end; Label1.Caption:='Word count = '+IntToStr(CountWord); end;
function TForm1.CountInLine(Str: string): Integer; var Count,Inter: Integer; TimeStr,Symbol: string; begin Symbol:='!@#$%^&*()~[]{}":?<>,.|\/*'; Count:=0; while Length(Str)>0 do begin if Pos(' ',Str)=1 then Delete(Str,1,1) else begin TimeStr:=Copy(Str,1,Pos(' ',Str)-1); //Tal skal ikke tælle med som ord if TryStrToInt(TimeStr,Inter) then Count:=Count-1 else Count:=Count; if (Length(TimeStr)=1) and (Pos(TimeStr,Symbol)<>0) then Count:=Count-1; if TimeStr='' then Str:='' else Delete(Str,1,Pos(' ',Str)-1); Count:=Count+1; end; end; CountInLine:=Count; end;
Er ved at kigge alle mine points igennem, og jeg errindrer faktisk at dit svar, nca ledte mig på rette vej. Har desværre ikke koden længere.
Synes godt om
Ny brugerNybegynder
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.