Hi,
ich stehe oft vor dem Problem aus einer Liste von numerischen oder String Einträgen (z.B. in arrays oder Stringlist), die ein bestimmtes Format haben, bestimmte zu extrahieren. Mein Ansatz dauert immer ewig und ist nie zufriedenstellend:
Bsp.:
Textdatei:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| 0 0 0 -0.54262 0 0 0 -0.00011072 0.00011851 -0.55537 0 0 . . . |
Das Format:
1. Wert: x-Translation
2. Wert: y-Translation
3. Wert: z-Translation
4. Wert: Rotation um x
5. Wert: Rotation um y
6. Wert: Rotation um z
alles pro best. Timestep.
Jetzt brauche ich aber nur jeweils die ersten vier zur Weiterverarbeitung. Zunächst würde es mir langen diese vier in ein Memo zu schreiben.
Mein Ansatz sieht so aus:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44:
| function TForm1.AddToMemo(Title: string): string; begin memo1.Lines.Add(Title + ': ' + first.Strings[0]); first.Delete(0); end;
procedure TForm1.Button2Click(Sender: TObject); var i: integer; begin memo1.Lines.BeginUpdate; repeat for i := 0 to 5 do begin case i of 0: begin AddToMemo('xTra'); continue; end; 1: begin AddToMemo('yTra'); continue; end; 2: begin AddToMemo('zTra'); continue; end; 3: begin AddToMemo('xRot'); continue; end; 4: begin continue; end; 5: begin continue; end; end; end; until first.Count = 0; memo1.Lines.EndUpdate; end; |
Mal ganz davon abgesehen, dass ich ein 'Listindex überschreitet das Maximum'-Fehler bekomme gefällt mir mein Ansatz auch sonst überhaupt nicht. Gibt's da geschickte Algorithmen oder sonst. Lösungen für diese Geschichte.
Gruß
Calculon
--