作者sjgau (sjgau)
看板Fortran
标题Re: [问题] 读取资料格式不统一
时间Fri Jul 1 10:54:20 2011
再给你一个建议,
请多多使用 副程式和 函数。
就是,把复杂的问题,
在主程式里面分出去,每一个副程式
和函数,只做一件很简单的 小小事情。
我经常在使用的,自己写的副程式和函数
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:
[email protected]
我的课程介绍网页:
http://www.csie.ntu.edu.tw/train/teacher_display.php?num=18
AutoCAD 台湾地区菁英讲师获选
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 116.59.36.193