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

看板Fortran作者 (sjgau)時間13年前 (2011/07/01 06:07), 編輯推噓0(002)
留言2則, 2人參與, 最新討論串5/6 (看更多)
我是 sjgau, 再提供一點 小小的意見。 建議,不要企圖 在一個程式裡面, 做完所有的事情。 建議,化整為零,各個擊破。 先考慮把事情分段,每一個階段 就變成可以簡單考慮和處理的 case. 如果你熟細的工具很多,甚至於可以考慮 不同的階段,使用不同的工具。 譬如說,我在處理 input file 的時候, 習慣使用 Pascal, C 我在處理 矩陣運算的時候,習慣使用 Fortran, 我在處理圖形的輸出,不管是 2D/3D, 習慣產生一個script file, 丟給 AutoCAD, 叫 AutoCAD 自動產生出來。 範例如下: point x1,y1 line x1,y1 x2,y2, . . . circle xc,yc, r arc x1,y1 x2,y2 x3,y3 text x1,y1 3.0 0 abc-123 spline x1,y1 x2,y2 x3,y3 x4,y4 . . . 以上,把 2D 的點座標,改成 x1,y1,z1 一樣 OK 考慮看看吧 ※ 引述《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

07/01 14:28, , 1F
只是要是沒寫筆記,兩個月後再回來看就…
07/01 14:28, 1F

07/01 15:11, , 2F
程式裡面要加上詳細 適當的注解,必須有系統流程圖
07/01 15:11, 2F
文章代碼(AID): #1E3FEzpo (Fortran)
文章代碼(AID): #1E3FEzpo (Fortran)