2014-06-20 74 views
0

對於fortran來說,我從Python,R和SAS中獲得了一些新的東西。在所有這些語言中,數據類型格式化都嵌入在輸出函數中,但fortran需要(除其他外)爲正在寫入的每個變量顯式指定格式。我想通過利用變量自省來動態構建格式字符串,讓Fortran告訴我數據類型是什麼,以及適用的屬性(KIND,LEN等)。這種內省也有助於建立普遍適用的計劃子單位。fortran:在變量存儲在內存中後,識別變量*的內在類型

在Python和R的OO世界中,這是一個微不足道的查詢。例如,測試一個值是否是Python中的字符串只是...

isinstance('foo',basestring) 

當然還有其他方法。無論如何,我不能動搖這個內在探究必須存在於fortran中的想法。迄今爲止,我所見過的所有方法都無法區分整個真實值和整數。

其他人建議在READ語句中使用IOSTAT參數。我還沒有想出如何利用這個語句來處理已經存在於內存中的變量。 (在這一點上,我只遇到了使用READ聲明與讀取鍵盤或硬盤驅動器上的文件一起使用。)

有人請告訴我我在某處做了一個令人震驚的監督。我覺得這種能力必須存在。謝謝。

+0

如何使用'interface'爲單個類型綁定例程/函數? –

+1

爲什麼不使用g(或g0)描述符? –

+0

通用接口將工作,但我不認爲這是必要的。我不知道OP用'IOSTAT'的含義。 –

回答

3

此功能不存在。你總是知道你正在使用的變量是什麼類型。至少是聲明的類型。對於多態類型,您必須使用select type來獲取實際類型,但是在編譯時再次知道該類型。

您可以使用gw.dg0描述符來進行內在類型的通用格式化。你不需要考慮它屬於哪種類型的號碼。對於用戶定義的派生類型,可以定義自己的I/O例程。

對於非常簡單的I/O可以使用列表式I/O,例如,

print *, x 
read(*,*) x 
write(*,*) x 

有上時,你可以使用它的一些限制,你沒有的太多的控制行爲。

否則我不認爲這種能力顯然必須存在於OO語言中。你所說的兩種語言(R,Python)都是動態輸入的,因此對此有更大的需求。在C++ 98中有typeid(),但大多數人不需要它。

+0

有趣的是,'g'在我的fortran文本中都沒有顯示爲格式選項。我甚至不知道要找到它。當然,如果你聲明變量,你就知道你知道這個類型。知道類型不是我想要解決的真正問題。我正在嘗試構建一個用於寫入CSV *的格式字符串,而不必手動指定正在寫入的每個變量。爲了理解'g'格式化程序,我可以用它來描述寫入磁盤時的任何數字內部輸入,並且它會傳遞適當的類型(整數與實數)? –

+0

是'g'可以用於每種內在類型(包括所有數字類型)。它實際上已經是Fortran 77的一部分,雖然'g0'是Fortran 2008。 –

+0

'g'已經存在很長時間了。當它變得有效時,所有類型都是一個很好的問題,但似乎是f90。如果你有一本舊的f77書,它只會顯示使用浮游物。 – agentp