netcdf库读取nc格式文件

  • 一、背景
  • 二、工具使用
  • 三、测试代码
  • 四、测试结果

一、背景

这两天解析数据需要解析nc格式的文件,时间是字符串类型的,最开始还以为这个数据有问题呢,使用panoply打不开该时间格式的文件,于是就确定应该是panoply的支持不好,后来使用HDFView打开了。(正是:踏破铁鞋无觅处,得来全不费工夫!)

二、工具使用

数据使用panoply和HDFView打开的截图如下:

三、测试代码

测试代码如下:

/*****************************************ReadNCString.h********************************************************/
/***************************************************
*Copyright(c) 2018 ISmileLi All Rights Reserved,
* Only for personal exchange,
* Don't use for commerical purpose,
* offenders responsibility conceited.
*文 件 名:  ReadNCString.h
*说    明: analyse nc file
*创建日期:   2018-12-28
*作    者: ISmileLi
*版    本: 1.0
*****************************************************/#ifndef READNCSTRING_H
#define READNCSTRING_H
#include <vector>
#include <string>
#include <iostream>
#include "../include/netcdf.h"using namespace std;
class ReadNCString
{
public:ReadNCString();~ReadNCString(){}/// 打开文件int openFile(const char *path);/// 关闭文件int closeFile();// get  var lengthint getVarDataLen(const char *varName, size_t *&length,int &lengthCount);/// 根据varname获得其对应的1维数组string类型数据:例如经纬度、时间int getVarDataArray1D(const char *varName, vector<char*> &timeVector);private:int m_ncid;
};#endif // READNCSTRING_H/*****************************************ReadNCString.cpp********************************************************/
#include "ReadNCString.h"
#define ERR(e) {printf("Error:%s\n",nc_strerror(e));return 2;}ReadNCString::ReadNCString()
{}//************************************
// 函数名称: openFile
// 函数说明:打开文件
// 返 回 值: int
// 参    数: const char * path
// 作    者:ISmileLi
// 作成日期:2018/12/28
// 修改记录:
//************************************
int ReadNCString::openFile(const char *path)
{int ret = 0;ret = nc_open(path, NC_WRITE, &m_ncid);ERR(ret);
}//************************************
// 函数名称: closeFile
// 函数说明:关闭文件
// 返 回 值: int
// 作    者:ISmileLi
// 作成日期:2018/12/28
// 修改记录:
//************************************
int ReadNCString::closeFile()
{int ret = 0;ret = nc_close(m_ncid);ERR(ret);
}//************************************
// 函数名称: getGroupVarDataLen
// 函数说明:get group attribute length
// 返 回 值: int
// 参    数:const char *varName
// 参    数:size_t *&length
// 参    数:int &lengthCount
// 作    者:ISmileLi
// 作成日期:2018/12/28
// 修改记录:
//************************************
int ReadNCString::getVarDataLen(const char *varName, size_t *&length, int &lengthCount)
{int ret;int dimId;if ((ret = nc_inq_varid(m_ncid, varName, &dimId)))ERR(ret);//获取对应变量的维度int dimsCount = 0;if (ret = nc_inq_varndims(m_ncid, dimId, &dimsCount))ERR(ret);lengthCount = dimsCount;//获取每一维的长度int *dimidsp = new int[dimsCount];if(ret = nc_inq_vardimid(m_ncid, dimId, dimidsp))ERR(ret);length = new size_t[dimsCount];for(int i = 0; i < dimsCount; ++i){if(ret = nc_inq_dimlen(m_ncid, dimidsp[i], &length[i]))ERR(ret);}ERR(NC_NOERR);
}//************************************
// 函数名称: getVarDataArray1D
// 函数说明:获得一维数据
// 返 回 值: int
// 参    数: const char *varName
// 参    数: vector<string> &timeVector
// 作    者:ISmileLi
// 作成日期:2018/12/28
// 修改记录:
//************************************
int ReadNCString::getVarDataArray1D(const char *varName, vector<char *> &timeVector)
{size_t *length;int lengthCount = 0;getVarDataLen(varName,length,lengthCount);int dataLen = length[0];timeVector.resize(dataLen);int ret = 0;int varid = 0;if ((ret = nc_inq_varid(m_ncid, varName, &varid)))ERR(ret);if ((ret = nc_get_var_string(m_ncid, varid, &timeVector[0])))ERR(ret);ERR(NC_NOERR);
}/*****************************************main.cpp********************************************************/#include <iostream>
#include "ReadNCString.h"
#include <memory>using namespace std;int main(int argc, char *argv[])
{unique_ptr<ReadNCString> pReadNCFile(new ReadNCString);const char *filePath = "/work/CFO_SCA.nc";pReadNCFile->openFile(filePath);const char *varName = "wvc_row_time";vector<char*> timeVector;pReadNCFile->getVarDataArray1D(varName,timeVector);pReadNCFile->closeFile();if(timeVector.empty()){return -1;}for(auto iter:timeVector){string tmpTime = string(iter);cout << "tmpTime: " << tmpTime << endl;}cout << "welcome to ISmileLi's world!" << endl;return 0;
}

四、测试结果

测试结果截图:

netcdf库读取nc格式文件中的字符串类型的数据相关推荐

  1. python循环读取nc格式文件,并存入文本文件中

    先把要读取的nc文件放在同一文件夹中,再用python循环读取,读取文件为从NCEP下载的向下地表平均日长波辐射通量,并计算其月平均值,存放至一个文本文件中https://psl.noaa.gov/c ...

  2. 使用pygal.maps.world库读取JSON格式文件,显示世界人口地图图示

    import json import pygal.maps.world #引入世界地图 from pygal_maps_world.i18n import COUNTRIES #引入世界个国家def ...

  3. python读取nc文件转成img_使用python的netCDF4库读取.nc文件 和 创建.nc文件[转]

    使用python netCDF4库读取.nc文件 和 创建.nc文件 1. 介绍 .nc(network Common Data Format)文件是气象上常用的数据格式,python上读取.nc使用 ...

  4. python xlrd读取excel-使用Python xlrd模块读取Excel格式文件的方法

    这是一篇关于如何使用Python xlrd模块读取Excel格式文件的方法的文章,下面的python代码中使用 了xlrd模块的方法,这样就能够很方便的读取 excel 文件内容.同是这个xlrd模块 ...

  5. 如何用.net c# 读取epub格式文件

    如何用.net(c#)读取epub格式文件 epub格式是印刷出版界常见的格式,本格式遵循XML原则把网页进行压缩打包. 如何用c#读取epub格式文件是个头疼的问题,本人搜遍各大网站,发现介绍都语焉 ...

  6. 如何用python将nc格式文件转换为tif格式

    可以使用gdal库来将nc格式文件转换为tif格式,具体步骤如下: 安装gdal库:pip install gdal 使用gdal库中的gdal_translate函数:gdal_translate ...

  7. nodejs json转对象_nodejs读取xlsx格式文件

    # nodejs读取xlsx格式文件 安装 npm i node-xlsx -D // 或者 yarn add node-xlsx -D 使用 读取表格数据,并生成json对象 /*** @auth ...

  8. matlab读取.mat格式文件

    matlab读取.mat格式文件 13.1 数据基本操作 本节介绍基本的数据操作,包括工作区的保存.导入和文件打开. 13.1.1 文件的存储 MATLAB支持工作区的保存.用户可以将工作区或工作区中 ...

  9. nodejs读取xlsx格式文件

    nodejs读取xlsx格式文件 安装 npm i node-xlsx -D // 或者 yarn add node-xlsx -D 使用 读取表格数据,并生成json对象 /*** @author ...

最新文章

  1. Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(下)
  2. 一步一步打造Geek风格的技术博客
  3. Spring Boot集成Jasypt安全框架
  4. php spss,spss新手入门
  5. 哥大首位华裔女校长:人工智能的春天来了
  6. 重磅 | 华为自动驾驶团队公开招聘!
  7. python代码评测结果tle_TLE计算列表中指定范围内的元素数 - python
  8. 未来新型计算机可能有,上海科学家构建出新型“DNA逻辑门”DNA分子有望成未来超级计算机...
  9. 单例模式简单示例与优化
  10. Scripting for Testers 测试人员脚本编程教程 Lynda课程中文字幕
  11. Spring Bean生命周期(简单易懂)
  12. 万圣节到了,来讲鬼故事吧!(大家可以在回复中继续讲)
  13. 【笔记】创新思维工作坊(一)
  14. 法国西南华人华侨商会:进军区块链行业,促进技术创新项目落地
  15. DNA binding motif比对算法
  16. iPhone开发网站、论坛和博客
  17. Python下载小说遮天
  18. <学习笔记>从零开始自学Python-之-常用库篇(十一)正则表达式re库
  19. xtrabackup 命令详解
  20. 2020Cfa最新mock下载和使用

热门文章

  1. TCP 核心问题剖析之 什么 TMD 是 “三次握手”
  2. 8瓶酒一瓶有毒,用人测试。每次测试结果8小时后才会得出,而你只有8个小时的时间。
  3. redis命令之哈希表类型lrange命令用法详情
  4. 2023网络搭建项目改革
  5. 王者服务器维护7月九号,新一服海纳百川7月9日9:30-11:00维护更新公告
  6. 18关不了机 ubuntu_Ubuntu关机卡住无法关机如何解决?
  7. 个人台式计算机上常用的操作系统,几个常用的操作系统简介
  8. 读书笔记6-浪潮之巅(part1)
  9. android gps 室内,如何快速获取纬度和经度或GPS数据,而我们在室内的Android手机?...
  10. linux通配符和正则表达式