Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi AVR Bascom Funktion in Delphi??? (https://www.delphipraxis.net/153770-avr-bascom-funktion-delphi.html)

Muellermilchtrinker 15. Aug 2010 14:05

AVR Bascom Funktion in Delphi???
 
Hallo DP,

vielleicht kennt jmd. von euch Bascom AVR. Dort gibt es ja eine Funktion die nennt sich lookup.
Mit dieser kann man Tabellen auslesen. Eine Tabelle sieht z.Bsp. so aus:
Code:
Data 25%
Data 1%,25%,3%
Data 100%,2%
Data 100%,26%,64%,34%
usw.
Mit ' leitet man ein Kommentar ein.

Auslesen tut man es so:
lookup(1,Datei.txt). Damit bekommt man jetzt "1". Die % Zeichen sind die Datentypen, man kann auch noch andere verwenden, aber ich brauch nur die mit %.
Ich hoffe ihr versteht wie man die Daten bekommt. Also es wird immer 0,1,2,3 gezählt.

Weiß jemand, wie ich so eine Funktion in Delphi hinbekomm. Mein Problem ist, dass ich zu dieser Funktion keinen SourceCode hab, um ihn zu übersetzen. Aber ich werd mal das Verzeichnis durchsuchen. Da hab ich bis jetzt noch nicht gesucht. Vielleicht hat ja jemand von euch eine Idee, wie man so eine Funktion realisieren könnte.
Danke schonmal.

EDIT: die Funktion hieß lookup, nicht offset.
Hab euch noch die Beschreibung aus der Hilfe: http://avrhelp.mcselec.com/lookup.htm

omata 15. Aug 2010 17:04

AW: AVR Bascom Funktion in Delphi???
 
Was ist so schwer daran, sowas selber zu schreiben?

Delphi-Quellcode:
function Lookup(offset:integer; DataIN:string):string;
type
  TStatus = (sNone, sKommentar, sData);
var
  i, dataindex:integer;
  Status:TStatus;
  stop:boolean;
begin
  i:=1;
  Status:=sNone;
  dataindex:=0;
  Result:='';
  stop:=false;
  while (i < length(dataIN)) and not stop do begin
    if dataIN[i] = '''' then begin
      if Status = sData then begin
        stop:=(dataindex = offset);
        inc(dataindex);
      end;
      Status:=sKommentar;
    end
    else if dataIN[i] = #10 then begin
      if Status = sData then begin
        stop:=(dataindex = offset);
        inc(dataindex);
      end;
      Status:=sNone;
    end
    else if (Status = sNone) and (copy(dataIN, i, 5) = 'Data ') then begin
      Status:=sData;
      Result:='';
      inc(i, 4);
    end
    else if Status = sData then begin
      if dataIN[i] = ',' then begin
        stop:=(dataindex = offset);
        inc(dataindex);
        if not stop then
          Result:='';
      end
      else Result:=Result + dataIN[i];
    end;
    inc(i);
  end;
  Result:=trim(Result);
end;
Aufruf...
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Liste:TStringList;
begin
  Liste:=TStringList.Create;
  try
    Liste.Append('''Data 25%');
    Liste.Append('Data 1%,25%,3%');
    Liste.Append('Data 100%,2%');
    Liste.Append('Data 100%,26%,64%,34%');
    ShowMessage('>' + Lookup(0, Liste.Text) + '<');
  finally
    Liste.free;
  end;
end;

Muellermilchtrinker 15. Aug 2010 17:15

AW: AVR Bascom Funktion in Delphi???
 
Wollte ja eigentlich nur eine Idee, wie ich das machen kann, aber eine ganze Funktion ist auch nett.
Danke nochmals dafür.

omata 15. Aug 2010 17:27

AW: AVR Bascom Funktion in Delphi???
 
Es hatte sich doch noch ein Fehler eingeschlichen, ist oben korrigiert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:17 Uhr.

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