Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi String in Array zerlegen (Markanter Punkt: ',') (https://www.delphipraxis.net/1203-string-array-zerlegen-markanter-punkt.html)

Christian Seehase 1. Nov 2002 13:39

Moin Rebugger,

Du hast pos als array of integer deklariert, dann aber ohne Index benutzt

Code:
result[i ]:=copy(zeile,pos[i-1]+1,[color=red]pos[/color]-1-pos[i-1]);
wobei ich etwas unglücklich finde einen Funktionsnamen (pos) als Variablennamen zu benutzten. ;-)

rebugger 1. Nov 2002 13:46

Ja, is klar...
Blick nur nich durch, was daran geändert werden muss (welcher array wert dort hineingehört)

Habe nun eine extra funktion für den aufruf von parse() geschrieben:
Code:
function TMain.Intialize_Highlight(Highlight: TSynHighlighterAttributes; Section: String; Part: String; Standard: String): Bool;
var
  ini: TIniFile;
  tmp_style: TZeile;
begin
  ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'highlight.cfg');
  try
    tmp_style := Parse(ini.ReadString(Section,Part,Standard), 0);
    Highlight.Foreground := StrToInt(tmp_style[0]);
    Highlight.Background := StrToInt(tmp_style[1]);

    if StrToInt(tmp_style[2]) = 1 then
      Highlight.Style := [fsBold];
    if StrToInt(tmp_style[3]) = 1 then
      Highlight.Style := [fsItalic];
    if StrToInt(tmp_style[4]) = 1 then
      Highlight.Style := [fsUnderline];
    if StrToInt(tmp_style[5]) = 1 then
      Highlight.Style := [fsStrikeOut];
  finally
    ini.Free;
  end;
  result := TRUE;
end;
Jetzt müsste nur noch der Fehler in der Funktion Parse() gefixed werden.
Weiß aber net, was da reingehört !

Luckie 1. Nov 2002 13:46

In der zeile:
Code:
result[i ]:=copy(zeile,pos[i-1]+1,pos[i ]-1-pos[i-1]);
war noch ein Fehler drin. Ich habe ihn noch mal korrigiert.

rebugger 1. Nov 2002 13:50

Hm, trotzdem sagt er beim Start meines Programmes:
"Zugriffsverletzung auf Adresse 004A8725 in Modul 'project1.php'. Lesen von Adresse 00000000."

Luckie 1. Nov 2002 13:52

Dann hast du irgendwo eine ungültige Zeile drin. Bei dem Parser ist das Trennzeichen ein ";" du hast aber ein ",". Also in der Parse-Funktion anpassen.

rebugger 1. Nov 2002 13:56

Hm, dann sagt er mir beim Aufruf "clNone ist kein gültiger Integerwert"
Das liegt an
pos: array of integer;

Aber dieser lange String
Comment=$0045CDFA,clNone,0,1,0,0

Kann ja Buchstaben und Zahlen enthalten !

Luckie 1. Nov 2002 14:02

Kann es sein, dass dein Fehler irgendwo hier
Code:
if IntToStr(php_comment[2]) = 1 then
      PHPhigh.CommentAttri.Style := fsBold;
    if IntToStr(php_comment[3]) = 1 then
      PHPhigh.CommentAttri.Style := fsItalic;
    if IntToStr(php_comment[4]) = 1 then
      PHPhigh.CommentAttri.Style := fsUnderline;
    if IntToStr(php_comment[5]) = 1 then
      PHPhigh.CommentAttri.Style := fsStrikeOut;
liegt?

rebugger 1. Nov 2002 14:13

Jo, hab das jetzt korrigiert !
Wenn ich in der Funktion Parse()
Code:
if zeile[ i ] = ',' then
Kommt nurnoch dieser Fehler:
"clNone ist kein gültiger Integerwert"

Das liegt an
pos: array of integer;

Aber dieser String
$0045CDFA,clNone,0,1,0,0
kann ja Buchstaben und Zahlen enthalten

rebugger 1. Nov 2002 14:18

Halt, Stopp !
Kommando zurück !
Fehler-Stelle gefunden:
Code:
Highlight.Foreground := StrToInt(tmp_style[0]);
Highlight.Background := StrToInt(tmp_style[1]);
Lag an meiner Funktion !
Da ja hier bei tmp_style[1] "clNone" drin steht und nicht zu Integer umgewandelt werden kann !
Wie kann ich sonst von String in TColor umwandeln ?

Christian Seehase 1. Nov 2002 14:25

Moin Rebugger,

da auch dynamische Arrays wieder freigegeben werden müssen, hätte ich da noch zwei Vorschläge.

1. Mit Luckies Parse / TZeile

Code:
[b]function[/b] TMain.Intialize_Highlight(Highlight: TSynHighlighterAttributes; Section: [b]String[/b]; Part: [b]String[/b]; Standard: [b]String[/b]): Bool;
[b]var[/b]
  ini: TIniFile;
  tmp_style: TZeile;
[b]begin[/b]
  ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'highlight.cfg');
  [b]try[/b]
    tmp_style := Parse(ini.ReadString(Section,Part,Standard), 0);
    [b]try[/b]
      Highlight.Foreground := StrToInt(tmp_style[0]);
      Highlight.Background := StrToInt(tmp_style[1]);

      [b]if[/b] StrToInt(tmp_style[2]) = 1 [b]then[/b]
        Highlight.Style := [fsBold];
      [b]if[/b] StrToInt(tmp_style[3]) = 1 [b]then[/b]
        Highlight.Style := [fsItalic];
      [b]if[/b] StrToInt(tmp_style[4]) = 1 [b]then[/b]
        Highlight.Style := [fsUnderline];
      [b]if[/b] StrToInt(tmp_style[5]) = 1 [b]then[/b]
        Highlight.Style := [fsStrikeOut];
    [b]finally[/b]
      finalize(tmp_style);
      FreeAndNil(tmp_style);
    [b]end[/b];
  [b]finally[/b]
    ini.Free;
  [b]end[/b];
  result := TRUE;
[b]end[/b];
2. Mit einer TStringList statt array of string und StringReplace statt Parse

Code:
[b]function[/b] TMain.Intialize_Highlight(Highlight: TSynHighlighterAttributes; Section: [b]String[/b]; Part: [b]String[/b]; Standard: [b]String[/b]): Bool;
[b]var[/b]
  ini: TIniFile;
  tmp_style: TStringList;
[b]begin[/b]
  ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'highlight.cfg');
  [b]try[/b]
    tmp_style := TStringList.Create;
    [b]try[/b]
      tmp_style := StringReplace(ini.ReadString(Section,Part,Standard),',',#13#10,[rfReplaceAll]);
      Highlight.Foreground := StrToInt(tmp_style[0]);
      Highlight.Background := StrToInt(tmp_style[1]);

      [b]if[/b] StrToInt(tmp_style[2]) = 1 [b]then[/b]
        Highlight.Style := [fsBold];
      [b]if[/b] StrToInt(tmp_style[3]) = 1 [b]then[/b]
        Highlight.Style := [fsItalic];
      [b]if[/b] StrToInt(tmp_style[4]) = 1 [b]then[/b]
        Highlight.Style := [fsUnderline];
      [b]if[/b] StrToInt(tmp_style[5]) = 1 [b]then[/b]
        Highlight.Style := [fsStrikeOut];
    [b]finally[/b]
      FreeAndNil(tmp_style);
    [b]end[/b];
  [b]finally[/b]
    ini.Free;
  [b]end[/b];
  result := TRUE;
[b]end[/b];


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:23 Uhr.
Seite 2 von 4     12 34      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz