netcdf库读取nc格式文件中的字符串类型的数据
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格式文件中的字符串类型的数据相关推荐
- python循环读取nc格式文件,并存入文本文件中
先把要读取的nc文件放在同一文件夹中,再用python循环读取,读取文件为从NCEP下载的向下地表平均日长波辐射通量,并计算其月平均值,存放至一个文本文件中https://psl.noaa.gov/c ...
- 使用pygal.maps.world库读取JSON格式文件,显示世界人口地图图示
import json import pygal.maps.world #引入世界地图 from pygal_maps_world.i18n import COUNTRIES #引入世界个国家def ...
- python读取nc文件转成img_使用python的netCDF4库读取.nc文件 和 创建.nc文件[转]
使用python netCDF4库读取.nc文件 和 创建.nc文件 1. 介绍 .nc(network Common Data Format)文件是气象上常用的数据格式,python上读取.nc使用 ...
- python xlrd读取excel-使用Python xlrd模块读取Excel格式文件的方法
这是一篇关于如何使用Python xlrd模块读取Excel格式文件的方法的文章,下面的python代码中使用 了xlrd模块的方法,这样就能够很方便的读取 excel 文件内容.同是这个xlrd模块 ...
- 如何用.net c# 读取epub格式文件
如何用.net(c#)读取epub格式文件 epub格式是印刷出版界常见的格式,本格式遵循XML原则把网页进行压缩打包. 如何用c#读取epub格式文件是个头疼的问题,本人搜遍各大网站,发现介绍都语焉 ...
- 如何用python将nc格式文件转换为tif格式
可以使用gdal库来将nc格式文件转换为tif格式,具体步骤如下: 安装gdal库:pip install gdal 使用gdal库中的gdal_translate函数:gdal_translate ...
- nodejs json转对象_nodejs读取xlsx格式文件
# nodejs读取xlsx格式文件 安装 npm i node-xlsx -D // 或者 yarn add node-xlsx -D 使用 读取表格数据,并生成json对象 /*** @auth ...
- matlab读取.mat格式文件
matlab读取.mat格式文件 13.1 数据基本操作 本节介绍基本的数据操作,包括工作区的保存.导入和文件打开. 13.1.1 文件的存储 MATLAB支持工作区的保存.用户可以将工作区或工作区中 ...
- nodejs读取xlsx格式文件
nodejs读取xlsx格式文件 安装 npm i node-xlsx -D // 或者 yarn add node-xlsx -D 使用 读取表格数据,并生成json对象 /*** @author ...
最新文章
- Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(下)
- 一步一步打造Geek风格的技术博客
- Spring Boot集成Jasypt安全框架
- php spss,spss新手入门
- 哥大首位华裔女校长:人工智能的春天来了
- 重磅 | 华为自动驾驶团队公开招聘!
- python代码评测结果tle_TLE计算列表中指定范围内的元素数 - python
- 未来新型计算机可能有,上海科学家构建出新型“DNA逻辑门”DNA分子有望成未来超级计算机...
- 单例模式简单示例与优化
- Scripting for Testers 测试人员脚本编程教程 Lynda课程中文字幕
- Spring Bean生命周期(简单易懂)
- 万圣节到了,来讲鬼故事吧!(大家可以在回复中继续讲)
- 【笔记】创新思维工作坊(一)
- 法国西南华人华侨商会:进军区块链行业,促进技术创新项目落地
- DNA binding motif比对算法
- iPhone开发网站、论坛和博客
- Python下载小说遮天
- <学习笔记>从零开始自学Python-之-常用库篇(十一)正则表达式re库
- xtrabackup 命令详解
- 2020Cfa最新mock下载和使用
热门文章
- TCP 核心问题剖析之 什么 TMD 是 “三次握手”
- 8瓶酒一瓶有毒,用人测试。每次测试结果8小时后才会得出,而你只有8个小时的时间。
- redis命令之哈希表类型lrange命令用法详情
- 2023网络搭建项目改革
- 王者服务器维护7月九号,新一服海纳百川7月9日9:30-11:00维护更新公告
- 18关不了机 ubuntu_Ubuntu关机卡住无法关机如何解决?
- 个人台式计算机上常用的操作系统,几个常用的操作系统简介
- 读书笔记6-浪潮之巅(part1)
- android gps 室内,如何快速获取纬度和经度或GPS数据,而我们在室内的Android手机?...
- linux通配符和正则表达式