![]() |
Funktion löst AV aus
Hallo
ich möchte ein Programm schreiben, das Delphi-Code kriegt und den in html formatiert. ich hab auch schon ein bisschen code, den für die reservierten Wörter. Leider krieg ich immer ne AV. kann mir jemand helfen? Die Hufe reißt er in der Unit UMain in Zeile 40, also in der while-Schleife, hoch. UMain:
Delphi-Quellcode:
UReplace
unit UMain;
... type TForm1 = class(TForm) Memo1: TMemo; Memo2: TMemo; Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private-Deklarationen } public { Public-Deklarationen } KeyList: TStrings; ClassKey: String; ClassEnd: String; end; var Form1: TForm1; iChar: Integer; implementation uses UReplace; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var Zeile, ZeileNew: String; begin Zeile := Memo1.Lines.Strings[0]; ZeileNew := ''; iChar := 0; while (iChar <= Length(Zeile)) do begin ZeileNew := ZeileNew + Replace(iChar, Zeile); end; Memo2.Text := ZeileNew; end; procedure TForm1.FormCreate(Sender: TObject); begin ClassKey := '<code class="Key">'; ClassEnd := '</code>'; KeyList := TStringList.Create; KeyList.Add('begin'); KeyList.Add('with'); end; end.
Delphi-Quellcode:
unit UReplace;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; function MakeArrayOutOfDigit(Position, Length: Integer; Str: String): String; function Replace(var Pos: Integer; Zeile: String): String; implementation uses UMain; function MakeArrayOutOfDigit(Position, Length: Integer; Str: String): String; var i: Integer; begin Result := ''; for i := Position to (Position + Length) do Result := Result + Str[i]; end; function Replace(var Pos: Integer; Zeile: String): String; var iKey: Integer; Replaced: Boolean; begin Replaced := False; for iKey := 0 to (Form1.KeyList.Count - 1) do begin if (MakeArrayOutOfDigit(Pos, Length(Form1.KeyList[iKey]), Zeile) = Form1.KeyList[iKey])then begin Result := Form1.ClassKey + MakeArrayOutOfDigit(Pos, Length(Form1.KeyList[iKey]), Zeile) + Form1.ClassEnd; inc(Pos, Length(Form1.KeyList[iKey])); Replaced := True; end; end; if not Replaced then begin Result := PChar(Zeile[Pos]); inc(Pos); end; end; end. |
Re: Funktion löst AV aus
Hallo Friedrich,
ich vermute, daß der Fehler durch einen Zugriff auf das 0-te Element eines Strings ausgelöst wird:
Delphi-Quellcode:
Der Fehler tritt dann in der Routine MakeArrayOutOfDigit auf:
iChar := 0; // <<--- hier bei 1 anfangen!
while (iChar <= Length(Zeile)) do begin ZeileNew := ZeileNew + Replace(iChar, Zeile); end;
Delphi-Quellcode:
Wahrscheinlich muß der Endwert hier auch "Position + Length - 1 lauten. Überprüfe das besser auch noch einmal.
function MakeArrayOutOfDigit(Position, Length: Integer; Str: String): String;
var i: Integer; begin Result := ''; for i := Position to (Position + Length) do Result := Result + Str[i]; // <<-- hier wird es wohl knallen... end; Gruß Hawkeye |
Re: Funktion löst AV aus
Zitat:
stimmt. aber ich bekomm immer noch ne AV. es hat irgendwie den Anschein, dass es der Teil aus der Replace-Funktion ist:
Delphi-Quellcode:
if not Replaced then
begin Result := PChar(Zeile[Pos]); inc(Pos); end; |
Re: Funktion löst AV aus
Zitat:
|
Re: Funktion löst AV aus
danke sehr, jetzt klappt es.
|
Re: Funktion löst AV aus
noch was: könntest du die Funktion "MakeArrayOutOfDigit" nicht durch
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz