Re: [問題] 讀取資料格式不統一
再給你一個建議,
請多多使用 副程式和 函數。
就是,把複雜的問題,
在主程式裡面分出去,每一個副程式
和函數,只做一件很簡單的 小小事情。
我經常在使用的,自己寫的副程式和函數
skip(3);
對螢幕的輸出,空三行的空白行。
讓螢幕的輸出,段落分明
pause();
暫停,等待使用者 繼續,
輸入 1:繼續,0:結束程式的執行
time1(t1);
得到一個數字,能夠代表目前的時間點的刻度。
單位是 ms, 從 1970/01/01 00:00:00
到現在所經過的 ms 數目
time2(t1, dt);
從 t1 到現在所經過的時間,
單位是 秒,精確度是 一個 系統的 click,
大概是 15 - 16 ms
rnd1(s1);
s1 是亂數的種子數,進去和出來,
會被更新
內部,使用
r(n)= (r(n-1)*a + b) mod c;
的虛擬亂數產生的方法
a, b, c是常數
rnd2(s1, x1);
x1 >= 0.0, and x1 < 1.0
irnd(s1, 1, 6, ii);
ii >= 1, and ii <= 6
init_rnd(s1);
負責產生一開始的亂數的 種子數
先,這樣子。
有興趣的朋友,可以跟我繼續使用外部 信件討論
※ 引述《mouseforlove (我是瓜呆)》之銘言:
: 首先感謝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
: : 中間,使用 硬碟檔案來 交接資料
: : 你看 如何?
--
e-mail: sjgau4311@gmail.com
我的課程介紹網頁:
http://www.csie.ntu.edu.tw/train/teacher_display.php?num=18
AutoCAD 台灣地區菁英講師獲選
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 116.59.36.193
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 6 之 6 篇):
Fortran 近期熱門文章
PTT數位生活區 即時熱門文章