CAP GMT pstext: Record 1 is incomplete (skipped)和 psxy: Mismatch between actual...问题的解决

4 篇文章 0 订阅
1 篇文章 0 订阅

 最近断续地花了几个小时的时间,解决了标题所说的在CAP运行过程中出现的pstext: Record 1 is incomplete (skipped) 和 psxy: Mismatch between actual (1) and expected (2) fields near line 1 (skipped)...两个问题,先后重装了GMT和NETCDF,并在两台机器上反复运行对照,问题一直未得到解决,结果就是,计算结果所绘的图中,少了些东西,而控制台输出的计算数值和.out文件的内容也完全一致。因为是新配服务器,CPU是很牛X的Core i7 3770K,刚装上就成这个样子,而同一个人在之前比较老的电脑上安装的,一切OK,所以还开玩笑的说,i7.....哈哈。

后来终于在google上看到一页提到上面错误的,居然是"pstext.c",也就是GMT中pstext的源代码,里面提到以上字符串的只有一处,代码如下:

nscan = sscanf (line, "%s %s %lf %lf %s %s %[^\n]\n", txt_x, txt_y, &T.font_size, &T.paragraph_angle, this_font, just_key, text);
                        if ((GMT_scanf (txt_x, GMT_io.in_col_type[0], &xy[ix]) == GMT_IS_NAN) || (GMT_scanf (txt_y, GMT_io.in_col_type[1], &xy[iy]) == GMT_IS_NAN)) {
                              fprintf (stderr, "%s: Record %d had bad x and/or y coordinates, must exit)\n", GMT_program, n_read);
                              exit (EXIT_FAILURE);
                        }
                        if (nscan != 7) {
                              fprintf (stderr, "%s: Record %d is incomplete (skipped)\n", GMT_program, n_read);
                              continue;
                        }

看到这,也就离解决问题更近了一步,已经看到希望了: 使用pstext 的时候,所传参数的个数不对。

然后,直接深入到调用pstext的文件里面,在调用命令之前,把将要传入的参数print出来,再两机运行并对比输出结果。果然,有问题的一边,调用时传入的参数少了最后一个,其内容,就是最后结果中没画出来的部分,返回到上面引用的源代码中,就是第一行里scanf中需要要最后一个"text"。

再分析这边的代码,去找所要引用的那个参数来源。。(此处省略好多字)。。后面看到了一个命令: "saclst",难道问题在这? 回到shell下面运行。。。未找到命令... 。这就奇怪啦,运行SAC没问题,版本也对.

OK,那么问题也就很清楚了:$PATH未设置全,查看export,里面有SACHOME和SACAUX两个并且都指向正确,但$PATH里面没有新增加指向$SACHOME/bin,加入后再次行动,便一切正常了。

PS:这个地方源代码为:

$aztk[$i] = `saclst az user1 f ${nam}0`;
      $dist[$i]=`saclst dist f ${nam}0`;

在这里,如果系统没有找到saclst命令,并不会有什么错误输出,而只会给前面的变量赋一个空值,导致了pstext的时候,所传的最后一个参数为空。

PS1:之前SAC正常而saclst不正常,情况应该是只复制或者link了一个sac到$PATH目录下(因为CAP有几个需要用到的文件也是这种单独的文件比如trav和我研究了好久的pssac2),而系统又刚好指定了SACHOME和SACAUX,所以能够运行。另外还有一个情况是,sac的老版本,如v59.48,本身就只有sac2000一个文件。

PS2:在这个问题解决的那一瞬间,时光流转,我回到了好几个月之前,那时我还不知道什么是GMT,什么是SAC,什么是PERL.....LP刚拿到一个别人机器上能运行的CAP文件夹和一个简单的说明文件。我只是帮忙让这个过程完整运行进来。 先折腾好了GMT,用的就是v59.48的sac,按照说明文件的流程操作完之后,第一次运行,结果就跟这次遇到的一样啊。只不过当时对震源机制解一无所知,而且最后结果也都有,只是LP说我运行的结果不对,至于哪里不对也不清楚。当然也就不知道当时的这些个提示是出错信息了。后来似懂非懂地把里面的perl文件看了些(还顺便了解了gawk,处理文本太方便啦!),当时也就了解到了saclst,找到了101.4版本的sac,后来项目也就跑通了,再后来,又多了解了一些perl的东西(写了几个小程序如socket通信、多线程、调用系统API等,),就没管了,直到这次。所以说,我还是应该把当时让LP做的有些笔记整理一下,备忘,就不用像这次一样找不找头绪了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值