Ich habe mir deinen Quelltext mal angesehen. Speziell hat mich interessiert, warum du mit meiner Routine CheckLines nicht zurecht kommst. Das liegt daran, dass du die Routine nicht korrekt an deine Bedürfnisse angepasst hattest. Deine Schleifensteuerung ist auch jetzt nicht auf die Verwendung meines Codes abgestimmt. CheckLines verarbeitet alle Zeilen in einem Rutsch. Willst du eine zeilenweise Verarbeitung, dann musst du den Code umbauen. Ich habe dir die Routine mal als FSM an die Testdatei angepasst:
Delphi-Quellcode:
function CheckLines(lines: TSTrings): Cardinal;
type
TState = (stUndefined, stHeader1, stHeader2, stData);
var
i, j: Integer;
s: TStrings;
state: TState;
begin
state := stUndefined;
Result := 0;
s := TStringList.Create;
for i := 0 to Pred(lines.Count) do
begin
case state of
stUndefined:
if AnsiStartsText('DGIndex', lines[i]) then
Inc(state);
stHeader1,
stHeader2:
if lines[i] = '' then
Inc(state);
stData:
if lines[i] = '' then
state := stUndefined else
begin
s.DelimitedText := lines[i];
for j := 6 to Pred(s.Count) do
Result := Result + Ord(TestBit(HexToInt(s[j]), strtoint(form1.Edit15.text)))
end;
end;
end;
s.Free;
end;
marabu