Fortran 板


LINE

这篇文的分享,其实是为了让我以後再遇到,可以来爬文XD 事情的发生,是我为了比较两个"我认为应该要一样的字串",但怎麽样都判定不相等 是这样的,我有一份资料档案文件,它的结构是这样: event.dat ---------------------------------------- Event 1 Element1 data1 data2 data3 . . . ElementN data1 data2 data3 . . . Event N Element1 data1 data2 data3 . . . ElementN data1 data2 data3 -------------------------------------------------- 而其有一个对照表,是我另外做的,像是对答案一样的工作, 对照表的格式如下: teble.dat --------------------------------------- Element1 attribute1 attribute2 attribute3 Element2 attribute1 attribute2 attribute3 . . . ElementN attribute1 attribute2 attribute3 -------------------------------------------------- 我同时要读取档案的 ElementN ,并寻找对照档案中 ElementN的attribute 於是我使用正常方式来分别读取,如以下形式: open(11,file="event.dat",status="old") open(12,file="tabel.dat",status="old") read(11,'(a5)')ele1 do while (.ture.) read(12,'(a5)')ele2 if (trim(ele1) .eq. trim(ele2)) then ! ...资料处理程序... exit end if end do 这里问题就发生了,在搜寻的过程中,ele1与ele2从来没有相等的时候, 我便输出几个数值来看: write(*,*)trim(ele1),trim(ele2),(trim(ele1).eq.trim(ele2)) 结果为: ABC AAA F ABC ABB F ABC ABC F 这个问题让我纳闷很久(大概一天XD),为什麽明明看起来一样,却说不一样。 後来看长度才发现 len(ele1)=5 len(ele2)=3,难怪判断都是false。 问题在於trim没有删除开头为空格的功能,只能删除字串尾的空格。 这里Element的名称有规定,是最多5个字元,最小3个。 而两个档案在读取的时候,对齐的方向不太一样,一个靠左一个靠右。 造成取得的字串可能分别为: " ABC"、"ABC "。 trim的结果分别为:" ABC"、"ABC",因此造成怎麽样都无法相等。 因此我把原本的code加入去除开头空格的功能 read(11,'(a5)')ele1 if (scan(trim(ele1)," ",back=.true.) == 1) then read(ele1,'(1x,a4)')ele11 else if (scan(trim(ele1)," ",back=.true.) == 2) then read(ele1,'(2x,a3)')ele11 else read(ele1,'(a5)')ele11 end if 这才真正解决我的问题,顺利使资料跟参考档案的内容能对得起来。 至於为什麽会有前端空格的问题,是因为我再制作参考档案的时候, 使用awk的格式化输出,也利於fortran固定格式的读取: awk '{printf "%5s %7.4f %8.4f %6.1f\n",$1,$2,$3,$4}' tabel0.dat > tabel.dat 因此会强制补满五格,但是会补在前面= = 以上是我这次的心得,如果有更好的建议希望可以指导我一下XD -- [05/31/2012 23:59:11] 与 XXXXX 交谈: st3336: ? XXXXX: 你好不好意思 XXXXX: 你好,不好意思打绕ˇ st3336: .. st3336: 我以为我被呛了 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.115.20.47 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Fortran/M.1580461256.A.104.html ※ 编辑: st3336 (140.115.20.47 台湾), 01/31/2020 17:02:09
1F:→ gilocustom: Fortran90以降有adjustl或adjustr,再搭配trim。 01/31 17:58
2F:推 fragmentwing: 推 02/02 03:09
3F:推 jubilee2: trim(adjustl(ele1)) 这样就好 02/04 02:51
4F:→ st3336: 真的欸 这样就行了 以後都通用这种好了 02/04 11:33







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BuyTogether站内搜寻

TOP