Entwickler-Ecke

Dateizugriff - Letzte Spalte wird beim Einlesen nicht übernommen


stefan1707 - Mo 12.03.07 11:53
Titel: Letzte Spalte wird beim Einlesen nicht übernommen
Hallo,
nachdem ich gelernt habe wie man aus einem File Zahlen in einem Array einlist habe ich ein weiteres Problem festgestellt.
Also folgendes.
Ich habe ein File das So aussieht

Quelltext
1:
2:
3:
4:
5:
-18.00  25.0   0.0    0.0    -0.59   0.00795587  -7.0585e-006  0.00398763  -0.00021446  1.2260   1.0349   
-18.00  25.0   0.0    100.0  36.93   0.00793906  -0.0018104  0.00408818  -0.0028133  1.2747   1.0309   
-18.00  25.0   0.0    200.0  75.17   0.00795887  -0.0033442  0.00437066  -0.0049484  1.3800   1.1252   
-18.00  25.0   0.0    300.0  113.70  0.00795258  -0.0047314  0.00460283  -0.006852   1.4970   1.2453   
-18.00  25.0   0.0    400.0  150.61  0.00774206  -0.0058583  0.00465553  -0.008496   1.6198   1.4132

Die Spaltenanzahl ist immer 11. Und die einzelnen Spalten sind mit Taps getrennt.
Diese Zahlen möchte ich in einem zweidim. Array einlesen.
Ich lese alle Zahlen ein bis immer auf die Zahl in der letzten Spalte.
An dieser Stelle wird immer ein Leerzeichen abgespeichert.
Hier mein Source

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
//..
setlength(FEM_Kennlinien,sl.Count);
For i:= 0 to sl.Count-1 do begin

 s:= sl[i];
 setlength(FEM_Kennlinien[i],11);
 for t := 0 to 10 do

  begin
   FEM_Kennlinien[i,t]:=((copy(s,1,pos(#9,s)-1)));
   delete(s,1,pos(#9,s));
  end;
end;

Hoffe jemand kann mir helfen.


jasocul - Mo 12.03.07 12:12

Nach der letzten Spalte kommt kein "Tabe" (#9) mehr. Dadurch liefert Dir die Pos-Funktion den Wert 0 zurück.


stefan1707 - Mo 12.03.07 12:55

ok...
Also da ja kein Tab mehr nach der letzten ´Spalte vorhanden ist kann ich den Parameter nicht mit meiner pos-routine einlesen.
Also würde ich die letzte Spalte seperat einlesen. etwa so,

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
For i:= 0 to sl.Count-1 do begin

 s:= sl[i];
 setlength(FEM_Kennlinien[i],11);
 for t := 0 to 9 do  // Nur noch zehn Spalten werden eingelesen

  begin

   FEM_Kennlinien[i,t]:=((copy(s,1,pos(#9,s)-1)));
   delete(s,1,pos(#9,s));
   end;
   FEM_Kennlinien[i,10]:=((copy(s,1,pos('',s)-1))); // die elfte wird seperat eingelsen 
  end;

Leider klappt es so nicht, hoffe mein gedankengang ist richtig und nur die Syntaxs ist falsch.
Hoffe jemand weis einen Rat.
// Edit
Hab darüber nachgedacht, die letzte Spalte kann ich direkt einlesen, da in s ja nur noch die letzte Spalte drinsteht.


Calculon - Mo 12.03.07 13:50

Naja, da du von s immer den kopierten Teil löscht, müsste doch das funktionieren:


Delphi-Quelltext
1:
FEM_Kennlinien[i,10] := s;                    


Gruß

Calculon
--


raiguen - Mo 12.03.07 15:58

Und wie wär's mit DelimetedText?

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure WerteAuslesen;
var TempList: TStrings;
    i, t    : Integer;
//..
begin
//..
  TempList := TStringList.Create;          //--temporäre Stringlist zur Aufnahme der 'separierten' Zahlenreihe
  TempList.Delimiter := #9;                //--Trennzeichen der einzulesenden Zahlenreihe

  SetLength(FEM_Kennlinien,sl.Count);
  for i:= 0 to Pred(sl.Count) do begin
    TempList.DelimitedText := sl[i];       //--Zahlenreihe einzeln in temporäre Liste eintragen
    SetLength(FEM_Kennlinien[i],11);
    for t := 0 to Pred(TempList.Count) do  //--separierte Einzelwerte aus der temporären Liste zuweisen 
      FEM_Kennlinien[i,t]:= TempList[t];
  end;
//..
  TempList.Free;                           //--temporäre Liste wieder freigeben
end;