Versuch es mal hiermit.
Ich habe die von dir gezeigten daten ins Clipboard kopiert
und von dort in die StringList geschrieben.
Alle Daten wurden korrekt gelesen.
Du solltest das mit list.LoadFromFile machen.
Delphi-Quellcode:
type
TVektor =
record
x, y, z: real;
end;
TDreieck =
record
n: TVektor;
// n ist Normalvektor
p:
array[1..3]
of TVektor;
//p hat Koordinaten von 3 Eckpunkten
end;
Var
hDreieck : ^TDreieck;
Dreiecke:
Array of TDreieck;
PROCEDURE TMain.Test;
const
recstart='
facet normal';
recline='
vertex';
var list:TStrings; line:integer; data:TDreieck;
FUNCTION FindLine(
const s:
string; raiseerr:boolean):boolean;
begin
while (line<list.count)
and (Copy(Trim(list[line]),1,Length(s))<>s)
do inc(line);
if line<list.count
then result:=true
else if not raiseerr
then result:=false
else raise Exception.Create(s+'
nicht gefunden.');
end;
FUNCTION ReadNumber(
const s:
string;
var i:integer):real;
var j:integer;
begin
j:=i;
while s[j]<>'
'
do dec(j);
result:=StrToFloat(Copy(s,j+1,i-j));
while s[j]='
'
do dec(j);
i:=j;
end;
PROCEDURE ReadLine(
var v:TVektor);
var s:
string; i:integer;
begin
s:=Trim(list[line]);
i:=Length(s);
v.z:=ReadNumber(s,i);
v.y:=ReadNumber(s,i);
v.x:=ReadNumber(s,i);
inc(line);
end;
PROCEDURE ReadRecord;
var i:integer;
begin
ReadLine(data.n);
for i:=1
to 3
do begin
FindLine(recline,true);
ReadLine(data.p[i]);
end;
SetLength(Dreiecke,Length(Dreiecke)+1);
Dreiecke[High(dreiecke)]:=data;
end;
// var f:TextFile; i,j:integer; // nur zur Kontrolle benutzt
begin
Dreiecke:=nil;
list:=TStringList.Create;
try
try
list.text:=Clipboard.AsText;
// oder List.LoadFromFile('Filename');
line:=0;
while FindLine(recstart,false)
do ReadRecord;
except
On E:
Exception do begin
ShowMessage(E.
Message);
Dreiecke:=nil;
end;
end;
finally
list.free;
end;
end;