[問題] 讀取數字文字混和檔案到陣列

看板Fortran作者 (NJ)時間4年前 (2020/02/24 21:41), 編輯推噓2(2017)
留言19則, 4人參與, 4年前最新討論串1/1
目前手上的資料檔格式長成下列這樣 2222 33.02 2.6 7.7 2222 33.02 2.6 7.7 2222 33.02 >0 7.7 2222 33.02 2.6 <0 裡有>或<的符號 但是隨機出現 由於陣列必須宣告形式 好像無法讀浮點數又讀文字 想請問如何將檔案內的文去除或取代成9999之類 好讓檔案可以讀入陣列 (目前做法是先丟到EXCEL裡面取代) 感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.137.171.145 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Fortran/M.1582551676.A.868.html

02/25 00:25, 4年前 , 1F
先讀成字串,確定是數字再放到陣列裡
02/25 00:25, 1F

03/07 21:14, 4年前 , 2F
如一樓所述,可以開啟檔案後先以字串方式讀取,
03/07 21:14, 2F

03/07 21:14, 4年前 , 3F
有特殊符號的地方用空白取代後,
03/07 21:14, 3F

03/07 21:15, 4年前 , 4F
寫進另一個新的只有單純數字的檔,
03/07 21:15, 4F

03/07 21:15, 4年前 , 5F
然後 rewind 重新讀取數字放進陣列,例如:
03/07 21:15, 5F

03/07 21:16, 4年前 , 6F
do
03/07 21:16, 6F

03/07 21:16, 4年前 , 7F
read (11, '(a)', iostat = ios) string
03/07 21:16, 7F

03/07 21:17, 4年前 , 8F
if (ios /= 0) exit
03/07 21:17, 8F

03/07 21:17, 4年前 , 9F
do i = 1, len_trim(string)
03/07 21:17, 9F

03/07 21:17, 4年前 , 10F
if (string(i:i) == '>' .or. string(i:i) == '<')
03/07 21:17, 10F

03/07 21:18, 4年前 , 11F
end do
03/07 21:18, 11F

03/07 21:18, 4年前 , 12F
write (21, '(a)') trim(string)
03/07 21:18, 12F

03/07 21:18, 4年前 , 13F
end do
03/07 21:18, 13F

03/07 21:18, 4年前 , 14F
rewind (21)
03/07 21:18, 14F

03/09 18:16, 4年前 , 15F
read(string,"(f4.2)")number ! 字串轉數字
03/09 18:16, 15F

03/26 18:03, 4年前 , 16F
read配合iostat 讀到有錯rewind後再重新處理
03/26 18:03, 16F

03/31 10:30, 4年前 , 17F
可以試試轉成ascii指定0~9去讀
03/31 10:30, 17F

03/31 10:31, 4年前 , 18F
不過你的狀況可能還需要查.的ascii
03/31 10:31, 18F

03/31 10:32, 4年前 , 19F
當然這一樣是以一樓的方法為基礎
03/31 10:32, 19F
文章代碼(AID): #1UKz9yXe (Fortran)
文章代碼(AID): #1UKz9yXe (Fortran)