Re: [問題] 讀取資料格式不統一

看板Fortran作者 (sjgau)時間13年前 (2011/07/01 10:54), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串6/6 (看更多)
再給你一個建議, 請多多使用 副程式和 函數。 就是,把複雜的問題, 在主程式裡面分出去,每一個副程式 和函數,只做一件很簡單的 小小事情。 我經常在使用的,自己寫的副程式和函數 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
文章代碼(AID): #1E3JRVwq (Fortran)
文章代碼(AID): #1E3JRVwq (Fortran)