今天给大家介绍下怎么用IDL语言读写多维数组。以下面这个三维数组为例

3585   1368    114     56     52     29     25     14
   3586   1368    111     56     51     28     24     14
   3587   1368    112     54     51     29     24     14
   3588   1368    110     54     49     29     23     12
   3589   1368    110     54     49     28     21     14
   3590   1368    109     54     49     27     22     13

3591   1368    108     53     47     28     24     14
   3592   1368    107     52     47     28     25     14
   3585   1369    111     56     52     29     25     14
   3586   1369    113     55     51     28     23     12
   3587   1369    114     55     50     28     23     14
   3588   1369    110     54     49     28     22     13

3590   1369    108     53     49     28     22     14
   3591   1369    107     52     47     28     24     13
   3592   1369    106     52     47     28     24     13
   3585   1370    111     56     51     29     25     14
   3586   1370    112     56     50     28     24     14
   3587   1370    111     54     49     28     23     13

首先我们要考虑如果如果我们知道这个文本文件中的数组大小。即这个数组是三维,8列 6行。

那么直接创建数组然后读进来就可以

;samples,lines,bands分别是列、行、维度

data = MAKE_ARRAY(samples,lines,bands,TYPE=1)
  OPENR,lun,filename,/GET_LUN
  READF,lun,data
  FREE_LUN,lun
  PRINT,data

但是大多数情况下,在数据量很大的情况下。我们不可能直接读。那么我们要读这个文本文件里面的列,行,和维度。然后才能读取数据。

那么我们来试一下。代码如下

PRO test_BILL_A

filename = FILE_DIRNAME(ROUTINE_FILEPATH('test_BILL_A'))+$
    '\三维数据.txt' ;读取文件

;sample 行数
  ;bands维数
  ;lines 行数
  ;获取sample

OPENR,lun,filename,/get_lun
  WHILE ~EOF(lun) DO BEGIN
    str = ''
    READF,lun,str  ;读了一行数据
    IF STRTRIM(str) NE ''  THEN BEGIN
      sample = N_ELEMENTS(STRSPLIT(str)) ;读取列数
      BREAK
    ENDIF
  ENDWHILE

FREE_LUN,lun

;eof用于判断文件指针的位置,如果在开头结尾返回1,如果在开头返回0
  ;STRSPLIT用于判断字符串之间空格的位置
  ;breakBack语句提供了一种方便的方法,可以立即从循环(for、foreach、while、Repeat)、case或Switch语句中退出,而无需理会Goto语句。

bands = 1L
  lines = 0L
  blank = 0
  OPENR,lun,filename,/GET_LUN
  WHILE ~EOF(lun) DO BEGIN
    str = ''
    READF,lun,str
    IF STRTRIM(str) EQ '' AND blank EQ 1 THEN BEGIN
      bands++
      blank++
    ENDIF ELSE IF STRTRIM(str) NE '' THEN BEGIN
      blank = 1
      lines++
    ENDIF ELSE IF STRTRIM(str) EQ '' AND blank GT 1 THEN BEGIN
      blank++
    ENDIF
  ENDWHILE
  FREE_LUN,lun

IF blank GE 2 THEN bands--
  PRINT, 'samples: ', sample
  PRINT, 'lines:   ', lines/bands
  PRINT, 'bands:   ', bands

;获取数据
  data = MAKE_ARRAY(sample,lines/bands,bands,TYPE=1)
  OPENR,lun,filename,/GET_LUN
  READF,lun,data
  FREE_LUN,lun
  PRINT,data
END

其实还是非常简单的,大家如果对其中的函数不清楚,就去查查文档。相信你会得到答案的。

IDL读取文本文件中多维数组的方法相关推荐

  1. javascript读取文本文件到二维数组代码_十行代码说清楚:leetcode 二维数组中的查找...

    剑指 Offer 04. 二维数组中的查找 这道题是将一维的二分查找扩展为二维数组中的二分查找. 关键点有 3 处: 起始点的选择 大于 target 时坐标的变化 小于 target 时坐标的变化 ...

  2. matlab如何读取二维数组,Matlab从csv文件中读取多个二维数组

    我有一个csv文件,它包含2列4列数组,但行数不等.例如:Matlab从csv文件中读取多个二维数组 2, 354, 23, 101 3, 1023, 43, 454 1, 5463, 45, 765 ...

  3. 二维数组更改vue_使用vue中的v-for遍历二维数组的方法

    如下所示: {{itemss}} 其中,data数据为: this.data = [ [ { type: '', name: '资产', start: '期末余额', end: '期初余额' }, { ...

  4. C语言中多维数组的内存分配和释放(malloc与free)(转)

    C语言中多维数组的内存分配和释放(malloc与free)(转) 写代码的时候会碰到多维数组的内存分配和释放问题,在分配和释放过程中很容易出现错误.下面贴上一些示例代码,以供参考. 如果要给二维数组( ...

  5. c语言多维指针,C语言中多维数组和多维数组指针的应用

    最近开始好好学习编写CFD程序了,由于计算过程中所涉及的网格节点较多(一维最容易,二维就比较麻烦了,三维的还没有尝试自己动手编程呢),每个节点上都有若干个参数,包括速度,压力,温度,密度等,并且这些参 ...

  6. python使用如下方法规范化数组_python归一化多维数组的方法

    本篇文章给大家分享的内容是python归一化多维数组的方法 ,具有一定的参考价值,有需要的朋友参考一下 今天遇到需要归一化多维数组的问题,但是在网上查阅了很多资料都是归一化数组的一行或者一列,对于怎么 ...

  7. php怎么用递归函数遍历多维数组,php递归遍历多维数组的方法

    php递归遍历多维数组的方法 本文实例讲述了php递归遍历多维数组的方法.分享给大家供大家参考.具体如下: function get_array_elems($arrResult, $where=&q ...

  8. php 二维数组根据键值合并二维数组_php数组实现根据某个键值将相同键值合并生成新二维数组的方法详解...

    这篇文章主要介绍了php数组实现根据某个键值将相同键值合并生成新二维数组的方法,涉及php数组的遍历.赋值相关运算技巧,需要的朋友可以参考下 本文实例讲述了php数组实现根据某个键值将相同键值合并生成 ...

  9. php 多个一维数组合拼成二维数组的方法

    在开发过程中,需要整理数据,其中比较多操作是把各种数据整合到一组数据中.本文提供将多个一维数组合拼成二维数组的方法,提供完成代码及演示. 合拼方法代码如下,因需要使用函数可变参数,因此需要php版本5 ...

最新文章

  1. C++ Primer 读书笔记 (1)
  2. 53. Leetcode 112. 路径总和 (二叉树-二叉树路径和)
  3. boost::container_hash模块实现哈希序列
  4. ubuntu-chmod与chown命令
  5. 基于Java+SpringBoot+vue+element实现校园闲置物品交易网站
  6. Hadoop DataNode : Address already in use
  7. npm i和npm install命令
  8. 从入门到入土:[linux实践]-pam|编写基于libpam的用户认证程序|编写基于PAM认证的应用程序|详细说明|实验步骤|实验截图
  9. Mac安装iproute2/dig/traceroute
  10. 20161129 计算95除以55,商是多少,余数是多少?(商和余数要求分两行显示)
  11. 胜为蓝牙适配器驱动_胜为USB蓝牙适配器4.0驱动下载
  12. 2021-03-08动力学方程
  13. Kubernetes 调整 nodePort 端口范围
  14. SPIR-V*:面向 OpenCL™ 工作负载的英特尔® 显卡编译器默认接口
  15. 移动端获取手机自带的返回键并添加事件。
  16. 云脉档案管理彻底解决纸质数据问题
  17. 博客图片html代码,【html博客代码】图片羽化代码
  18. 如何备份和还原PS4保存数据
  19. 虚拟网络运维----基于wireshark报文分析快速过滤(tcp,icmp,http)报文时延
  20. JavaScript中的appendChild()方法

热门文章

  1. 网站地图是什么?怎么生成?格式有哪些?
  2. htons和htonl
  3. Web App版权保护迎来曙光,APICloud提出平台级解决方案!
  4. OpenGL学习笔记(十三):将纹理贴图应用到四边形上,对VAO/VBO/EBO/纹理/着色器的使用方式进行总结
  5. openGL CG 系列教程1 - Hello CG
  6. GO分析-植物部分-水稻
  7. 计算机在职考研 知乎,在职考研几个基本常识介绍
  8. ovs conntrack及nat
  9. 在python中同一个类下不同方法之间变量的调用
  10. python垃圾回收