2012-04-02 44 views
3

私はDelphiのコーディングには新しく、.txtファイルの読み込みには苦労しています。私はすべての列が変数(Day、Temperature、Pressure、...)とみなされる.txtファイルから入力データ(タブ付きダブルス)を読み込もうとしており、すべての行はタイムステップ(時間)とみなされます。どのようにしてこれらの変数を使って時間ごとの計算を行うために、このデータを配列に読み込むことができますか?ダブルデータを.txtファイルからDelphiの配列に読み込む

アドバイスをいただきありがとうございます。

入力サンプル(.txtファイルでダブルスをタブ付き):私は今のところ(VCLフォームアプリケーション)が持っているどのような

1 0.5 0 -12.6 -1.39 100 -19.5 0 3.3 
1 1 0 -12.6 -1.43 100 -19.8 0 3.3 
1 1.5 0 -12.7 -1.51 99.9 -20.5 0 3.2 

var    // Declaration of variables 
    Read: TRead; 
    i:Byte; 
    data:array of array of Integer; //Creation of dynamic array (adapts --> Setlength() command) 
    Input:TextFile; 
    Location:String; 
    Counter:Integer; 
    Maximum:Integer; 

procedure TRead.Button1Click(Sender: TObject); // Button "Read" command 

begin 
    Location:=Edit1.Text;       // Path of inputfile from Form 
    AssignFile(Input,(Location+'\Test1.txt')); // Assigning inputfile 
    Reset(Input);        // Open for read-write 
    If (IoResult = 0) Then Begin     // If Inputfile reading was succesful... 
    Counter:=1; 
    While Not EoF(Input) Do Begin 
     ReadLn(Input,i); 
     Data[Counter]:=i; 
     If EoF(Input) Then Break; 
     Inc(Counter);  //increase 'Counter' by 1 
    End; 
    End 

    Else WriteLn('Error when reading the file') 
    CloseFile(Input); 
    End; 

    Begin 
    For i:=1 To 10 Do WriteLn(data[i]); 
    ReadLn; 
    End. 
+2

TXTの内容、または少なくともサンプルを投稿してください。 –

+2

-12.7はいつからですか? –

答えて

5

あなたが直接あなたの配列に読み込むことができるようにDelphiはまだテキスト変数のための(昔ながらの)非常に古いパスカル読む手順を持っている:)

Var NumArray: Array[1..9] of double; // you have 9 variables 

while not eof(F) do begin 
    read(F,NumArray[1],NumArray[2],NumArray[3],NumArray[4],NumArray[5],NumArray[6],NumArray[7],NumArray[8],NumArray[9]); 
    // store it somewhere; 
end; 
+3

ReadLnはより正確でしょう:) –

+0

これは、1行に9つのvarsがある場合、これは同じことを行います - しかし、この方法でファイルを読み込んでからは時間があります:) – Despatcher

+0

これは(Readln )コマンド)私を助けて大丈夫!容易な古いヴィンテージの解決のためのHurray!:)ありがとう! – JelleH

10

私は解析するTStringListを使用してそれを行うだろうファイルを行に、SplitStringを区切って各区切り値をトークン化します。

文字列リストにファイルをロードするにはまず第一に:

var 
    Strings: TStringList; 
.... 
Strings := TStringList.Create; 
try 
    Strings.LoadFromFile(FileName); 
    ProcessStrings(Strings); 
finally 
    Strings.Free; 
end; 

そして、実際に文字列を処理するために:

procedure ProcessStrings(Strings: TStrings); 
var 
    line, item: string; 
    items: TStringDynArray; 
    value: Double; 
begin 
    for line in Strings do 
    begin 
    items := SplitString(line, #9#32);//use tab and space as delimiters 
    for item in items do 
    begin 
     value := StrToFloat(item); 
     //do something with value 
    end; 
    end; 
end; 

あるように思われる整数として、あなたのタイトルは、データを説明したが整数と浮動小数点の混合。とにかく、空白を埋めることができ、動的配列の値を取り込み、エラーチェックなどを処理できるはずです。

+0

テキストファイルには浮動小数点数が含まれていますが、どこかにStrToFloat変換があってはいけませんか? –

+0

@Johnはい、そうです。質問のタイトルは整数について語り、私はファイルの内容をあまりにも綿密に研究しなかった。 –

+2

+ 1ed、でも、私はもっと良い睡眠のために 'TStreamReader'と' TryStrToFloat'を好むでしょう:-) – TLama

関連する問題