爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 3723|回复: 0

[混合编程] IDL之输出csv文本文件

[复制链接]

新浪微博达人勋

发表于 2019-7-1 15:44:22 | 显示全部楼层 |阅读模式

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

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

x
飞鸽截图20190701153348.png
csv是个有趣的格式,既可以用记事本打开,又可以用表格打开,用起来比较灵活。
为了实现将数组按csv格式输出,我写了以下“过程”
调用格式:data_to_csv,数组变量,csv文件
举例:
csvfile='C:\Users\Administrator\Desktop\999.csv'
data_to_csv,indgen(4,5),csvfile
结果如上图。
--------------源代码如下-------------------
;更新时间:2019.7.1
;该程序用于将数据按csv格式输出
;如果有同名文件,会通知,然后续写(可修改append关键字)
;函数中的输入、计算过程和输出都是:最大8位有效数字
;csvfile是输出的全文件名(路径+文件名+后缀),x是需要输出的变量
;x可以是一个数(0维数组),1维数组(向量),2维数组
pro data_to_csv,x,csvfile
  ;把x转为双精度浮点,如果想整型输出,可以改动
  x=double(x)
  sizex=size(x)
  ;检查是否存在同名文件,如果有就弹窗通知,但程序还是会继续执行
  if(file_test(csvfile) eq 1)then begin
    warning=dialog_message('file with same name exists!')
  endif
  ;如果x是向量
  if(sizex[0] eq 1)then begin
    B=strjoin(strtrim(string(x),2),',')
    openw,lun,csvfile,/get_lun,/append
    printf,lun,B
    close,/all
  end
  ;如果x是二维数组
  if(sizex[0] eq 2)then begin
    for i=0,sizex[2]-1 do begin
      a=x[*,i]
      B=strjoin(strtrim(string(a),2),',')
      openw,lun,csvfile,/get_lun,/append
      printf,lun,B
      close,/all
    endfor
  endif
  ;如果只有一个值
  if(sizex[0] eq 0)then begin
    B=strtrim(string(x),2)
    openw,lun,csvfile,/get_lun,/append
    printf,lun,B
    close,/all
  endif
  ;x不是向量,又不是二维数组,也不是单独的数字,就报错
  if(sizex[0] ne 1 and sizex[0] ne 2 and sizex[0] ne 0)then begin
    warning=dialog_message('error!')
  endif
end

密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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