2012-06-18 80 views
1

在C++中,可以使用istream& operator>>讀取「在文本中」的數據。 D中的等價物是什麼?讀取文本文件數據

我嘗試:

input.txt中

c 1033 
90.432 

input_test.d

import std.stdio; 
import std.stream; 

void main() 
{ 
    auto inputFile = new BufferedFile("input.txt"); 
    char c; 
    int i; 
    double d; 

    inputFile.read(c); 
    inputFile.read(i); 
    inputFile.read(d); 
    writeln(c, '\t', i, '\t', d); 
} 

輸出

c 858796320 4.90559e-62 
+0

順便說一句,我認爲這個代碼所做的是以二進制形式*在char,int和double *中讀取。也就是說,第一次讀取得到一個字節,第二次讀取吞吐4個字節和最後8個,並且將每個比特序列解釋爲相關類型。 – BCS

回答

4

D有很多方法可以從文件中讀取數據以方便使用各種用例。這裏有一些:

根據您的具體情況,您可能需要使用slurpreadf。您的另一種選擇是讀取行,並將它們拆分成你想要的字段,然後用std.conv.to解析的文字表述:

double d = to!double(somestring); 

總之,如果每一行具有相同的格式,啜食是最好的方式去。否則,你將不得不決定什麼最適合你。

+0

輸出不是我想要的。 'int'和'double'不正確。回到你的建議,假設我使用'byLine'。我應該使用'splitter'和'std.conv'工具? –

+0

我已經更新了我的答案。我喜歡slurp很多,但如果格式不同,你可能需要手動分割和轉換部分。 –

+0

我嘗試了'readf',但是出了點問題(我也是格式化語法的新手)。謝謝你提出的「slurp」建議,我不知道這一點。 –