Re: [問題] 讀取資料格式不統一
首先感謝sjgau大的建議,先使用字串來做處理確實幫我解決了問題
我遇到的資料,除了最前面要讀的實數資料位數不同外,後面還包含了"tab"、":"、"/"
等符號,因此無法給予固定格式來讀
所以我先將資料讀取為一長字串,假設字串長度n,讀取字串為a,然後做以下處理
do i=1,n
read(a(i:i),'(a1)') w !w為長度為1的character
if (w.eq.'/'.or.w.eq.':') then
a(i:i)=' ' !用空格取代
endif
enddo
這樣原先字串 3.7 2011/05/01 會變為 3.7 2011 05 01
便可以直接使用自由格式讀取資料 read(a,*) var,yyyy,mm,dd
但在這裡要注意的是,如果是處理單筆的資料,可以直接用read讀處理後的字串a
但是當處理的資料筆數非常多,使用迴圈重複讀取時,直接讀取a會出現我還沒搞清楚的
問題,因此我的作法是先將所有處理好的a寫入到一個暫存的檔案,再重新讀取這個暫存
的檔案,便不會出現問題,但是這對於資料數很多的時候不是那麼理想,所以還要看各位
先進是否有什麼好的建議。
再次感謝sjgau寶貴的意見。
※ 引述《sjgau (sjgau)》之銘言:
: 先使用 字串的方式讀進來,
: 自己寫副程式 ,使用空格來 切開字串,
: 再來處理,把字串轉換成 浮點數,
: 把字串轉換成 時間的日期天數。
: 好像,以上的工作,使用 C++ 會很容易。
: 建議,
: 讀寫資料檔案,使用 C++ 來處理,
: 計算的部份,使用 Fortran
: 中間,使用 硬碟檔案來 交接資料
: 你看 如何?
: ※ 引述《mouseforlove (我是瓜呆)》之銘言:
: : 各位先進好,目前我遇到一個問題如下
: : 3.7 2011/05/01
: : 11.2 2011/05/02
: : 5 2011/05/03
: : 由於最前面的資料格式可能為一至三格,導致讀取時無法給予統一格式
: : 想請問是否有什麼解決方法
: : 感謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.36.198
※ 編輯: mouseforlove 來自: 140.115.36.198 (06/30 22:10)
討論串 (同標題文章)
Fortran 近期熱門文章
PTT數位生活區 即時熱門文章