爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 3873|回复: 5

[源程序] 求大神帮忙,c语言生成 ASCII 码 grd 文件的子程序

[复制链接]

新浪微博达人勋

发表于 2017-3-25 15:41:23 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
我原来参照Fortran来编了一下c语言的,但是编的过程中发现foutran中有个blankvalue,然后我猜测是不是没有数值时的标识,所以我改成雷达无数据值,但是这样一改我程序好多错误。。

#define BLANKVALUE_SURFER  2e38                              //定义了 surfer的默认值
//int blankvalue;
int X_begin=0,X_end=nXSize,Y_begin=0,Y_end=nYSize;
char surfer_ref_name[10];                                   // 将文件名定义为字符型
FILE *stream;
  
fopen_s(&stream,"D:\\surfer_ref_name.txt", "at+");
  char s[10] = "DSAA";
  char c = '\n';
  char blank[10]="  ";
  fprintf_s(stream,"%s%c", s, c );
  fprintf_s(stream,"%d%c%d%c",X_begin,blank,X_end,c);
  fprintf_s(stream,"%d%c%d%c",Y_begin,blank,Y_end,c);
  
  for (int nX=0; nX<nXSize;nX++)
  {
   for ( int nY=0;nY<nYSize;nY++)
   {
    //ZMIN,ZMAX
         if(nDataSave[nX][nY]==RADAR_NODATA)
         {
               double zmin=1.0E38;
               double zmax=-1.0E38;
   
      if(nDataSave[nX][nY]/=RADAR_NODATA)     //找到真实的最大,最小值,除以blankvalue
     {
      if (nDataSave[nX][nY]>=zmax)   { zmax=nDataSave[nX][nY]; }
      if (nDataSave[nX][nY]<=zmin)   { zmin=nDataSave[nX][nY]; }
     }
      }
      else //MINVAL(Z),MAXVAL(Z)
      {
       int temp1=nDataSave[0][0];
       int temp2=nDataSave[0][0];
       for (int nX=0; nX<nXSize;nX++)
       {
        for ( int nY=0;nY<nYSize;nY++)
        {
         temp1=nDataSave[nX][nY]>temp1;
         temp2=nDataSave[nX][nY]<temp2;
        }//nY
       }//nX
       double zmax=temp1;
       double zmin=temp2;
       fprintf_s(stream,"%f%f%s",zmax,zmin,c);
      }
   
   }//nY
  }//nX
   


   for (int nX=0; nX<nXSize;nX++)
   {
    for ( int nY=0;nY<nYSize;nY++)
    {
      if (nDataSave[nX][nY]==RADAR_NODATA) {fprintf_s(stream,"%f%c", BLANKVALUE_SURFER,c);}
      else                                {fprintf_s(stream,"%f%c", nDataSave[nX][nY],c);}
     }
     /*if(blankvalue==RADAR_NODATA)
     {
      if (nDataSave[nX][nY]==blankvalue) {fprintf_s(stream,"%f%c", BLANKVALUE_SURFER,c);}
      else                               {fprintf_s(stream,"%f%c", nDataSave[nX][nY],c);}
     }
       else                                   {fprintf_s(stream,"%f%c", nDataSave[nX][nY],c);}*/
    }//nY
   }//nX
   fclose(stream);
  

FORTRAN

FORTRAN

FORTRAN2

FORTRAN2
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-3-25 19:16:12 | 显示全部楼层
有人会吗??
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2017-3-25 19:16:31 | 显示全部楼层
给点意见也好~~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-3-26 07:05:41 | 显示全部楼层
开始的格式应该是:
DSAA
xcount ycount
xmin xmax
ymin ymax
zmin zmax
z(x1,y1)  z(x2,y1)...... z(xn,y1)
z(x1,y2)  z(x2,y2)....... z(xn,y2)
.........
z(x1,yn)  z(x2,yn)........ z(xn,yn)
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-3-27 09:02:53 | 显示全部楼层
如果是规则网数据,要改成 ASCII 格式的 grd 文件,简直不要太容易。

楼主的问题在于完全不看 Surfer 的帮助文件:

1、grd 文件格式规范你得知道吧?文件标识是什么?表头数据是什么?实测数据怎么排列?……

2、某些特殊的值,默认是什么?你都得知道吧。

此外,还应该学习提问的智慧。描述问题也要具体清晰,比如出错这两个字,我知道你是代码出错?编译出错?运行出错?生成的文件出错?产生的文件无法使用?具体怎么个错误提示?……

我就是“错误很多”,具体如何,你猜你猜你猜猜猜?

我要是斑竹,直接就关小黑屋。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-3-28 19:39:47 | 显示全部楼层
holz 发表于 2017-3-27 09:02
如果是规则网数据,要改成 ASCII 格式的 grd 文件,简直不要太容易。

楼主的问题在于完全不看 Surfer 的 ...

谢谢您回复,我以后注意 我已经差不多弄出来啦~
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表