Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#5

Re: Bestimmte Daten aus Stringlist auslesen

  Alt 13. Feb 2010, 19:43
Delphi-Quellcode:
for i := 0 to Bufferlist.Count - 1 do
  if Pos('Job:', Bufferlist[i]) <> 0 then
  begin
    jobIdx := Length(jobArray);
    SetLength(jobArray, jobIdx + 1);
    jobArray[jobIdx].j_id := jobIdx;
    for x := i + 1 to Bufferlist.Count - 1 do
    begin
      if Pos('Job:', Bufferlist[x]) <> 0 then
        break;
      if Pos('Oper:', Bufferlist[x]) <> 0 then
      begin
        a := Pos(';', Bufferlist[x]);
        b := PosEx(';', Bufferlist[x], a+1);
        if (a <> 0) and (b <> 0) then
        begin
          //procIdx := Length(jobArray[jobIdx].j_proc);
          //SetLength(jobArray[jobIdx].j_proc, procIdx + 1);
          //jobArray[jobIdx].j_proc[procIdx] := StrToInt(Copy(Bufferlist[x], a+1, b-a-1));
          SetLength(jobArray[jobIdx].j_proc, Length(jobArray[jobIdx].j_proc) + 1);
          jobArray[jobIdx].j_proc[High(jobArray[jobIdx].j_proc)] := StrToInt(Copy(Bufferlist[x], a+1, b-a-1));
        end;
      end;
    end;
  end;
Mit aussagefähigeren Variablen wären die ganzen verwirrenden Kommentare überflüssig und du würdes nicht ausversehn eine Variable doppelt verwenden.
Dank deiner ordentlichen Einrückng brauchst du auch nicht die ganzen END nochmals zu kommentieren.
> gerade hochgegangen sieht man ja wozu sie gehören.

Wenn du die Indize aus ihren zugehörigen Arrays ableitest, dann müßtest du nicht extra mitzählen.

Sicherheitshalber eine Prüfung, ob die Pos/PosEx auch alle nötigen ";" gefunden haben, kann nicht schaden ... eventuell könnte man im Fehlerfall auch noch was machen, bzw. eine Fehlermeldung ausgeben.

PS: Wenn du dort FOR nutzen würdest, wo es paßt, anstatt mit WHILE rumzukämpfen, dann hätte dich sogar der Compiler auf die doppelte Verwendung hingewiesen.

PSS: eine Schleife würde auch ausreichen
Delphi-Quellcode:
for i := 0 to Bufferlist.Count-1 do
  if Pos('Job:', Bufferlist[i]) <> 0 then
  begin
    jobIdx := Length(jobArray);
    SetLength(jobArray, jobIdx+1);
    jobArray[jobIdx].j_id := jobIdx;
  end
  else if Pos('Oper:', Bufferlist[i]) <> 0 then
  begin
    a := Pos(';', Bufferlist[i]);
    b := PosEx(';', Bufferlist[i], a+1);
    jobIdx := High(jobArray);
    procIdx := Length(jobArray[jobIdx].j_proc);
    if (a > 0) and (b > 0) and (jobIdx >= 0) then
    begin
      SetLength(jobArray[jobIdx].j_proc, procIdx+1);
      jobArray[jobIdx].j_proc[procIdx] := StrToInt(Copy(Bufferlist[i], a+1, b-a-1));
    end;
  end;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat