02. april 2004 - 12:53Der er
2 kommentarer og 1 løsning
brug en memo som synedit?
Har brug for noget hjælp, jeg kan ikke installer synedit så jeg prøver at bruge en memo istedet og det virker da også noget af vejen.
her er min kode:
function TForm1.FindTitle : string; var i : integer; start, stop : TPoint; kode : string; begin for i := 0 to memo1.Lines.Count - 1 do begin kode := memo1.Lines; if Pos('<title>', lowercase(kode)) > 0 then begin start.X := Pos('<title>', lowercase(kode))+7; start.Y := i+1; end; if Pos('</title>', Lowercase(kode)) > 0 then begin stop.X := Pos('</title>', lowercase(kode)); stop.Y := i+1; end; end; //Editor.BlockBegin := Start; //Editor.BlockEnd := Stop; result := memo1.SelText; end;
procedure TForm1.Button1Click(Sender: TObject); begin edit1.Text := FindTitle; end;
Kommunerne har digitaliseret indgangen for borgerne. Men bag skærmen håndteres mange arbejdsgange stadig manuelt mellem systemer, mails og organisatoriske siloer.
// Brug Memo1.Lines.Text i stedet og få hele teksten ud i een streng for i := 0 to memo1.Lines.Count - 1 do begin
// lowercase her i stedet for at gøre det to gange nedenfor. Desuden kalder du // Memo1.Lines uden indeks Lines[i] kode := memo1.Lines;
// Gem pos i en variabel i stedet for at pos'e to gange for hver token if Pos('<title>', lowercase(kode)) > 0 then begin // Ikke nødv. hvis du bare læser een streng som foreslået ovenfor start.X := Pos('<title>', lowercase(kode))+7; start.Y := i+1; end; if Pos('</title>', Lowercase(kode)) > 0 then begin stop.X := Pos('</title>', lowercase(kode)); stop.Y := i+1; end; end; result := memo1.SelText; // Tjaa, ikke kønt... end;
Nedenstående virker. Bemærk at jeg bruger konstanter i stedet for at skrive <title> to gange og risikere at jeg staver forkert. Desuden lægger jeg ikke bare 7 til p1, men tager længden af startsegmentet. En meget mere sikker og effektiv funktion er resultatet. const StartTitle = '<title>'; StopTitle = '</title>';
function TForm1.FindTitle : string; var lgd, p1,p2 : integer; Kode : string; begin result := ''; lgd := length(StartTitle); Kode := lowercase(memo1.Lines.Text); p1 := Pos(StartTitle,Kode); p2 := Pos(StopTitle,Kode); if (p1 > 0) and (p2 > p1) then result := copy(memo1.Lines.Text,p1+lgd,p2-p1-lgd); end;
Der var enkelte fejl, men det jeg slog ned på var, at koden var ineffektiv.
Her var det ret udtalt idet du havde 4 kald til "pos" hvor kun det halve var nødvendigt. Det samme gjalt den CPU-tunge LowerCase som blev kørt to gange.
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.