Thema: FreePascal Kommischer ERange Error

Einzelnen Beitrag anzeigen

Benutzerbild von PhilmacFLy
PhilmacFLy

Registriert seit: 20. Jan 2008
Ort: Nürnberg
340 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Kommischer EERange Rror Zugriffsverletzung

  Alt 14. Nov 2012, 13:18
Wesentlich weiter oben, ich post mal den ganzen funktions code:
Delphi-Quellcode:
function TForm1.extractfuncs(var statevar: string; const endswitch: integer;
  code: TStrings): boolean;
var
  kommentar: boolean;
  newfunc: boolean;
  k: integer;
  j, i, l: integer;
  tmp: integer;
  Count, count2: integer;
  foo: string;
begin
  Count := 0;
  count2 := 0;
  tmp := 0;
  Result := False;
  //showmessage(inttostr(endswitch));
  for i := endswitch to code.Count do
    (*Für alle Zeilne vom letzten Status bis ende des Files*)
  begin
    if i = 2091 then
      sleep(1);
    newfunc := False;
    if (pos('/*', code[i]) > 0) then
      kommentar := True;
    if (pos('{', code[i]) > 0) then
      (*Klammer auf registrieren, könnte die gescuhte funktion sein*)
    begin
      if kommentar then
      begin
        if ((pos('{', code[i]) < pos('/*', code[i])) and not
          (pos('{', code[i]) = 0)) or
          ((pos('{', code[i]) > pos('*/', code[i])) and not
          (pos('*/', code[i]) = 0)) then
        begin
          Inc(Count);
          if Count = count2 + 1 then
            j := i;
          (*Falls eine Klammer auf mehr als Klammer zu, merk dir die Zeile*)
        end;
      end
      else
      begin
        Inc(Count);
        if Count = count2 + 1 then
          j := i;
        (*Falls eine Klammer auf mehr als Klammer zu, merk dir die Zeile*)
      end;
    end;
    if pos('}', code[i]) > 0 then
      if kommentar then
      begin
        if ((pos('}', code[i]) < pos('/*', code[i])) and not
          (pos('}', code[i]) = 0)) or
          ((pos('}', code[i]) > pos('*/', code[i])) and not
          (pos('*/', code[i]) = 0)) then
        begin
          Inc(Count2);
        end;
      end
      else
      begin
        Inc(Count2);
      end;
    if (pos(statevar, code[i]) > 0) and not (pos('==', code[i]) > 0) and
      (pos('=', code[i]) > 0) and not kommentar then
      (*Wenn switch variable gefunden, dann*)
    begin
      while pos('(', code[j]) = 0 do

        (*Beweg dich solang Rückwärts bis eine Rundeklammer zu kommt (da dies die funktion bestimt)*)
        j := j - 1;
      loadfunc(newfunc, j, tmp, code);
    end;
    foo := code[i];
    l := high(changefuncs);
    //if ((i = 1543) or (i = 1545)) then
    // ShowMessage(changefuncs[l - 1].Name);
    if sametext(statevar, 'GSMData.State') then
       sleep(1);
    for k := Low(changefuncs) to high(changefuncs) do
    begin
      if (pos(changefuncs[k].Name, foo) > 0) and not newfunc and not
        kommentar then
      begin
        while (pos('(', code[j]) = 0) or (pos(');', code[j]) > 0) or
          (pos('if', code[j]) > 0) do

          (*Beweg dich solang Rückwärts bis eine Rundeklammer zu kommt (da dies die funktion bestimt)*)
          j := j - 1;
        loadfunc(newfunc, j, tmp, code);
      end;
    end;
    if (pos('*/', code[i]) > 0) then
      kommentar := False;
    if newfunc then
      Result := True;
  end;
end;
Philipp N.
"Programmiern ist wie küssen:
Mann kan darüber reden, mann kann es beschreiben,
aber man weiss erst, was es bedeutet,
wenn man es getan hat"

Geändert von PhilmacFLy (14. Nov 2012 um 13:42 Uhr)
  Mit Zitat antworten Zitat