【开源库 | xlsxio】C/C++读写.xlsx文件,xlsxio 在 Linux(Ubuntu18.04)的编译、交叉编译
😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀
🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭
⏰发布时间⏰: 2024-12-20 16:41:55
本文未经允许,不得转发!!!
目录
- 🎄一、概述
- 🎄二、XLSXIO 介绍
- 🎄三、XLSXIO 的下载
- 🎄四、XLSXIO 的编译
- ✨4.1 XLSXIO 的编译
- ✨4.2 XLSXIO 的交叉编译
- 🎄五、XLSXIO 的使用
- 🎄六、总结
🎄一、概述
最近项目需要将日志写到.xlsx
中,了解到C和C++的操作.xlsx
几个开源库:
本文要介绍的 xlsxio,虽然不在上图中,但也很好用。
下面主要介绍 xlsxio 库的下载以及在Ubuntu 18.04 下的编译和使用。
🎄二、XLSXIO 介绍
XLSXIO 是一款用于读取和写入.xlsx
文件的跨平台C库。.xlsx
文件格式自2007版起成为微软Excel的默认格式。
XLSXIO 提供了以下库:
-lxlsxio_read
- 用于读取.xlsx文件,要求#include <xlsxio_read.h>
-lxlsxio_write
- 用于写入.xlsx文件,要求#include <xlsxio_write.h>
-lxlsxio_readw
- 实验性库,用于读取.xlsx文件,链接到-lexpatw,要求在#include <xlsxio_read.h>之前定义XML_UNICODE
该库的设计目标包括:
- 使用标准C编写,但也适用于C++
- 简单的接口
- 小巧的体积
- 可移植到不同平台(Windows,*nix)
- 最小依赖:仅依赖于expat(仅用于阅读)和minizip或libzip(它们本身依赖于zlib)
- 分别为读取和写入.xlsx文件提供独立的库
- 不需要安装微软Excel
读取.xlsx文件:
- 设计用于以数据表的形式处理.xlsx文件,假设:
- 假设第一行包含列头名称
- 假设接下来的行在与列头相同的列中提供值
- 只处理值,忽略其他所有内容(公式,布局,图形,图表…)
- 整个共享字符串表被加载到内存中(警告:对于具有大量不同值的大工作簿可能很大)
- 支持没有共享字符串表的.xlsx文件
- 工作表数据即时读取,无需在内存中缓冲数据
- 提供两种方法:
- 一个简单的方法,允许应用程序遍历行和单元格
- 一个高级方法(开销较小),为每个单元格和每行后调用回调函数
写入.xlsx文件:
- 旨在将数据表写入.xlsx文件,假设:
- 仅支持写入数据(不支持公式,布局,图形,图表…)
- 不支持多个工作表(每个文件只有一个工作表)
- 即时文件生成,无需在内存中缓冲数据
- 不支持共享字符串(所有值作为内联字符串写入)
该项目依赖于以下组件:
- expat (仅用于libxlsxio_read)
- minizip 或 libzip (libxlsxio_read 和 libxlsxio_write)
请注意,由于报告称使用libzip构建的XLSX I/O生成的.xlsx文件无法用LibreOffice打开,所以首选minizip。
不依赖于微软Excel。
XLSX I/O考虑了跨平台兼容性,在多种操作系统上运行良好,包括Windows,macOS和Linux。
🎄三、XLSXIO 的下载
XLSXIO 可以在GitHub下载,地址是:https://github.com/brechtsanders/xlsxio.git
下载地址:https://github.com/brechtsanders/xlsxio/tags
其最新版本是 0.2.35,下载后文件名为:xlsxio-0.2.35.tar.gz
🎄四、XLSXIO 的编译
✨4.1 XLSXIO 的编译
这个小节介绍的是使用 Ubuntu 自带的 gcc 编译器编译过程。XLSXIO 库依赖于 minizip 或 libzip,本文使用的是 minizip。关于minizip 的编译可以参考文章 :https://blog.csdn.net/wkd_007/article/details/144596975
下面是编译 XLSXIO 的步骤:
tar zxf xlsxio-0.2.35.tar.gz
cd xlsxio-0.2.35
make CFLAGS:="-I `pwd`/../../01_zlib/" LDFLAGS:="-L `pwd`/../../01_zlib/minizip/"
make install PREFIX=`pwd`/../result_gcc
CFLAGS 指明存放 minizip/zip.h
头文件的目录。
LDFLAGS 指明存放 libminizip.so
库文件的目录。
编译完成后,在 ../result_gcc
目录会有如下内容:
✨4.2 XLSXIO 的交叉编译
交叉编译需要先编译 zlib、minizip、libexpat:
- zlib 库交叉编译参考:https://blog.csdn.net/wkd_007/article/details/140573322
- minizip 库交叉编译参考:https://blog.csdn.net/wkd_007/article/details/144596975
- libexpat
下载最新版本: https://github.com/libexpat/ ,然后参考下面编译过程:tar zxf expat-2.6.4.tar.gz cd expat-2.6.4 ./configure --prefix=`pwd`/../result_mix210 --host=aarch64-mix210-linux CC=aarch64-mix210-linux-gcc
下面是交叉编译 XLSXIO 的步骤:
tar zxf xlsxio-0.2.35.tar.gz
cd xlsxio-0.2.35
make CC=aarch64-mix210-linux-gcc CFLAGS:="-I `pwd`/../../01_zlib -I `pwd`/../../01_zlib/result_mix210/include/ -I `pwd`/../../17_expat/result_mix210/include/" \
LDFLAGS:="-L /home/samba/01_libCompile/opensource/01_zlib/minizip/ -L `pwd`/../../01_zlib/result_mix210/lib -L `pwd`/../../17_expat/result_mix210/lib -lz" make install PREFIX=`pwd`/../result_mix210
成功编译后,在 ../result_mix210/
目录会有如下内容
🎄五、XLSXIO 的使用
XLSXIO 源码中有个 xlsxio-0.2.35/examples
目录,里面有几个例子介绍了怎样使用 XLSXIO来操作 .xlsx 文件。感兴趣的可以看看,代码也不难理解。这里以 example_xlsxio_write_cpp.cpp
为例介绍一下怎样单独编译这些例子:
使用动态库编译,运行编译结果时,需要指定动态库路径:
g++ example_xlsxio_write_cpp.cpp -I ./result_gcc/include/ ./result_gcc/lib/libxlsxio_write.a -L ../01_zlib/minizip/ -lminizip -lpthreadexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"/home/samba/01_libCompile/opensource/01_zlib/minizip/"./a.out
下面是使用静态库编译,编译后直接可以运行:
g++ example_xlsxio_write_cpp.cpp -I ./result_gcc/include/ ./result_gcc/lib/libxlsxio_write.a ../01_zlib/minizip/libminizip.a ../01_zlib/result_gcc/lib/libz.a -lpthread
./a.out
下面是例子 example_xlsxio_write_cpp.cpp 源码,可以帮助我们了解使用XLSXIO :
#include <stdlib.h>
#include <stdio.h>
#include <string>
#include <unistd.h>
#include "xlsxio_write.h"/*! \class XLSXIOWriter* \brief class for writing data to an .xlsx file*\details C++ wrapper for xlsxiowrite_ functions.*/
class XLSXIOWriter
{private:xlsxiowriter handle;public:/*! \brief XLSXIOWriter constructor, creates and opens .xlsx file* \param filename path of .xlsx file to open* \param sheetname name of worksheet* \param detectionrows number of rows to buffer in memory, zero for none, defaults to 5* \sa xlsxiowrite_open()*/XLSXIOWriter (const char* filename, const char* sheetname = NULL, size_t detectionrows = 5);/*! \brief XLSXIOWriter destructor, closes .xlsx file* \sa xlsxiowrite_close()*/~XLSXIOWriter ();/*! \brief specify the row height to use for the current and next rows* \param height row height (in text lines), zero for unspecified* Must be called before the first call to any Add method of the current row* \sa xlsxiowrite_set_row_height()*/void SetRowHeight (size_t height = 0);/*! \brief add a column cell* \param name column name* \param width column width (in characters)* Only one row of column names is supported or none.* Call for each column, and finish column row by calling NextRow().* Must be called before any NextRow() or the AddCell methods.* \sa NextRow()*/void AddColumn (const char* name, int width = 0);/*! \brief add a cell with string data* \param value string value* \sa NextRow()*/void AddCellString (const char* value);/*! \brief add a cell with integer data* \param value integer value* \sa NextRow()*/void AddCellInt (long long value);/*! \brief add a cell with floating point data* \param value floating point value* \sa NextRow()*/void AddCellFloat (double value);/*! \brief add a cell with date and time data* \param value date and time value* \sa NextRow()*/void AddCellDateTime (time_t value);/*! \brief insertion operators* \sa AddCellString()* \name operator<<* \{*/XLSXIOWriter& operator << (const char* value);XLSXIOWriter& operator << (const std::string& value);XLSXIOWriter& operator << (int64_t value);XLSXIOWriter& operator << (double value);//XLSXIOWriter& operator << (time_t value);/*! @} *//*! \brief mark the end of a row (next cell will start on a new row)* \sa xlsxiowrite_next_row()* \sa AddCellString()*/void NextRow ();
};inline XLSXIOWriter::XLSXIOWriter (const char* filename, const char* sheetname, size_t detectionrows)
{unlink(filename);handle = xlsxiowrite_open(filename, sheetname);xlsxiowrite_set_detection_rows(handle, detectionrows);
}inline XLSXIOWriter::~XLSXIOWriter ()
{xlsxiowrite_close(handle);
}inline void XLSXIOWriter::SetRowHeight (size_t height)
{xlsxiowrite_set_row_height(handle, height);
}inline void XLSXIOWriter::AddColumn (const char* name, int width)
{xlsxiowrite_add_column(handle, name, width);
}inline void XLSXIOWriter::AddCellString (const char* value)
{xlsxiowrite_add_cell_string(handle, value);
}inline void XLSXIOWriter::AddCellInt (long long value)
{xlsxiowrite_add_cell_int(handle, value);
}inline void XLSXIOWriter::AddCellFloat (double value)
{xlsxiowrite_add_cell_float(handle, value);
}inline void XLSXIOWriter::AddCellDateTime (time_t value)
{xlsxiowrite_add_cell_datetime(handle, value);
}inline XLSXIOWriter& XLSXIOWriter::operator << (const char* value)
{AddCellString(value); return *this;
}inline XLSXIOWriter& XLSXIOWriter::operator << (const std::string& value)
{AddCellString(value.c_str());return *this;
}inline XLSXIOWriter& XLSXIOWriter::operator << (int64_t value)
{AddCellInt(value);return *this;
}inline XLSXIOWriter& XLSXIOWriter::operator << (double value)
{AddCellFloat(value);return *this;
}/*
inline XLSXIOWriter& XLSXIOWriter::operator << (time_t value)
{AddCellDateTime(value);return *this;
}
*/inline void XLSXIOWriter::NextRow ()
{xlsxiowrite_next_row(handle);
}const char* filename = "example.xlsx";int main (int argc, char* argv[])
{XLSXIOWriter* xlsxfile = new XLSXIOWriter(filename);xlsxfile->SetRowHeight(1);xlsxfile->AddColumn("Col1");xlsxfile->AddColumn("Col2");xlsxfile->AddColumn("Col3");xlsxfile->AddColumn("Col4");xlsxfile->AddColumn("Col5");xlsxfile->NextRow();int i;for (i = 0; i < 1000; i++) {*xlsxfile << "Test" << (char*)NULL << (int64_t)i;xlsxfile->AddCellDateTime(time(NULL));*xlsxfile << 3.1415926;xlsxfile->NextRow();}delete xlsxfile;return 0;
}
运行结果生成example.xlsx
,内容如下:
🎄六、总结
本文介绍 xlsxio 开源库在 Ubuntu 18.04 的编译、交叉编译以及使用教程。
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁
参考:
https://gitcode.com/gh_mirrors/xl/xlsxio/overview
C++ xlsx文件格式读写
相关文章:
【开源库 | xlsxio】C/C++读写.xlsx文件,xlsxio 在 Linux(Ubuntu18.04)的编译、交叉编译
😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 ⏰发布时间⏰: 2024-12-20 …...
全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之分支结构(switch语句)
if语句处理多个分支时需要用if-else if结构,分支越多,嵌套的if语句层就越多,程序不但庞大、复杂,理解起来也比较困难。在C编程中,针对有些问题除了使用if-else if结构之外,还有switch语句也可以实现&#x…...
SQL Server数据库多主模式解决方案
SQL Server 本身并不直接支持多主模式(Multi-Master Replication),即多个数据库实例可以同时进行写操作,并且这些更改会自动同步到其他实例。不过,SQL Server 提供了多种高可用性和复制解决方案,可以实现类似多主模式的功能。以下是几种常见的方法: 1. Always On 可用性…...
如何训练Stable Diffusion 模型
训练Stable Diffusion模型是一个复杂且资源密集的过程,通常需要大量的计算资源(如GPU或TPU)和时间。Stable Diffusion是一种基于扩散模型的生成式AI,能够根据文本提示生成高质量的图像。它的训练过程涉及多个步骤,包括…...
网络编程(王铭东老师)笔记
网络编程的目的 1.将多个设备通过网络进行连接在一起,可以将数据共享。 基础知识-01-ip地址 1.引入 为了能够确定网络数据收发双方是哪台电脑,需要用ip来标记电脑。 2.什么是地址 地址就是用来标记地点的 3.ip地址的作用 作用:在逻辑上标…...
项目亮点案例
其实对我来说是日常操作,但是如果在面试的时候面试者能把日常的事情总结好发出来,其实足矣。 想让别人认同项目,选取的示例需要包含以下要素: 亮点项目四要素:明确的目标,问题点,解决方法和结果…...
ShardingSphere-Proxy 连接实战:从 Golang 原生 SQL 到 GORM 的应用
在这篇文章《ShardingSphereProxy:快速入门》中,我们介绍了如何通过 Navicat 连接 ShardingSphere-Proxy。 实际上,ShardingSphere-Proxy 兼容标准的 SQL 和原生数据库协议,因此你可以使用任何 MySQL 客户端与其进行连接,包括 Go…...
uniapp验证码
一、 页面结构 假设你有一个发送短信按钮,点击按钮时会触发发送短信并启动倒计时。 <template><view><button click"sendSms" :disabled"isSending">{{ buttonText }}</button></view> </template>二、脚…...
C/C++基础知识复习(43)
1) 什么是运算符重载?如何在 C 中进行运算符重载? 运算符重载是指在 C 中为现有的运算符定义新的行为,使得它们能够用于用户定义的数据类型(如类或结构体)。通过运算符重载,可以让自定义类型像内置数据类型…...
GIT安装过程
文章目录 下载安装包安装过程验证安装Git的基本使用 Git的安装可以通过以下步骤完成 下载安装包 首先,访问Git官网(https://git-scm.com/)或Git for Windows(https://gitforwindows.org/)下载对应系统的安装包。 对于Windows系统,通常…...
评估大语言模型在药物基因组学问答任务中的表现:PGxQA
这篇文献主要介绍了一个名为PGxQA的资源,用于评估大语言模型(LLM)在药物基因组学问答任务中的表现。 研究背景 药物基因组学(Pharmacogenomics, PGx)是精准医学中最有前景的领域之一,通过基因指导的治疗…...
[HNCTF 2022 Week1]你想学密码吗?
下载附件用记事本打开 把这些代码放在pytho中 # encode utf-8 # python3 # pycryptodemo 3.12.0import Crypto.PublicKey as pk from hashlib import md5 from functools import reducea sum([len(str(i)) for i in pk.__dict__]) funcs list(pk.__dict__.keys()) b reduc…...
MongoDB教程001:基本常用命令(数据库操作和集合操作)
1.1 案例需求 存放文章评论的数据存放到MongoDB中,数据结构参考如下: 数据库:【articledb】 专栏文章评论comment字段名称字段含义字段类型备注_id(MongoDB自动生成)IDObjectId或StringMongo的主键的字段articleId文…...
Springboot logback 日志打印配置文件,每个日志文件100M,之后滚动到下一个日志文件,日志保留30天(包含traceid)
全部配置 logback.xml <?xml version"1.0" encoding"UTF-8"?> <configuration debug"false"><property name"LOG_HOME" value"log"/><property name"LOG_NAME" value"admin"/&g…...
flink sink kafka
接上文:一文说清flink从编码到部署上线 之前写了kafka source,现在补充kafka sink。完善kafka相关操作。 环境说明:MySQL:5.7;flink:1.14.0;hadoop:3.0.0;操作系统&#…...
vue万达地产物业缴费分析系统
摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理。在现实运用中,应用软件的工作规则和开发步骤,采用Java技术建设万达地产物业缴费分析…...
数据库 MYSQL的概念
数据库的概念 数据库是按照数据结 构来组织、存储和管理数据的系统,它允许用户高效地存储、检索、更新和管理数据 database:用来组织,存储,管理数据的仓库 数据库的管理系统:DBMS,实现对数据的有效储值&am…...
docker 容器的基本使用
docker 容器 一、docker是什么? 软件的打包技术,就是将算乱的多个文件打包为一个整体,打包技术在没有docker容器之前,一直是有这种需求的,比如上节课我把我安装的虚拟机给你们打包了,前面的这种打包方式是…...
Nginx IP优化限制策略
Nginx 如何限制每个 IP 地址的连接数,优化资源分配? Nginx 限制每个 IP 地址的连接数 Nginx 提供了多种机制来限制单个 IP 地址所能建立的同时连接数,这对于防止资源耗尽和提高服务稳定性至关重要。以下是几种有效策略: 1. 使用…...
某科技局国产服务器PVE虚拟化技术文档
环境介绍 硬件配置 服务器品牌:黄河 型号:Huanghe 2280 V2 Cpu型号:kunpeng-920 磁盘信息 :480SSD * 2 ,4T*4 网卡:板载四口千兆 如下表 四台服务器同等型号配置,均做单节点虚拟化,数据保护采用底层r…...
新能源汽车锂离子电池各参数的时间序列关系
Hi,大家好,我是半亩花海。为了进一步开展新能源汽车锂离子电池的相关研究,本文主要汇总并介绍了电动汽车的锂离子电池的各项参数,通过 MATLAB 软件对 Oxford Dataset 的相关数据集进行数据处理与分析,进一步研究各项参…...
单片机:实现自动关机电路(附带源码)
单片机实现自动关机电路 在许多嵌入式系统或便携式设备中,自动关机功能非常重要,尤其是在电池供电的设备中,防止设备长时间开启以节省电能。自动关机电路的基本功能是检测设备是否处于待机状态,若一定时间内未收到用户操作信号或…...
/etc/fstab 文件学习systemd与该文件关系
文章目录 一、文件字段1.1、设备标识1.2、挂载点1.3、文件系统类型1.4、挂载选项1.5、dump1.5、fsck顺序 二、/etc/fstab 与systemd 的关系2.1、/etc/fstab 与systemd 的关系2.2、systemd 之前/etc/fstab生效过程2.3、systemd 时代/etc/fstab生效过程 三、相关知识3.1、如何更具…...
springcloud基础
一 SpringCloud简介 1.1 SpringCloud是什么 SpringCloud,基于SpringBoot提供了一套微服务解决方案,包括服务注册与发现,配置中心,全链路监控,服务网关,负载均衡,熔断器等组件,除了基于NetFli…...
全面解析 Kubernetes 流量负载均衡:iptables 与 IPVS 模式
目录 Kubernetes 中 Service 的流量负载均衡模式 1. iptables 模式 工作原理 数据路径 优点 缺点 适用场景 2. IPVS 模式 工作原理 数据路径 优点 缺点 适用场景 两种模式的对比 如何切换模式 启用 IPVS 模式 验证模式 总结 Kubernetes 中 Service 的流量负载…...
HTML+CSS+JS制作汽车网站(内附源码,含5个页面)
一、作品介绍 HTMLCSSJS制作一个汽车网站,包含首页、新车发布页、预约试驾页、最新资讯页、品牌故事页等5个静态页面。其中每个页面都包含一个导航栏、一个主要区域和一个底部区域。 二、页面结构 1. 顶部导航栏 包含logo、主导航菜单(首页、新车、二…...
GraalVM完全指南:云原生时代下使用GraalVM将Spring Boot 3应用转换为高效Windows EXE文件
一、前言 在现代软件开发中,启动速度和资源利用率常常是衡量应用性能的关键指标。对于基于Spring Boot的应用来说,虽然它们易于开发和部署,但JVM的启动时间有时会成为一个瓶颈。本文介绍如何使用GraalVM将Spring Boot 3应用编译成原生Windows可执行文件(EXE),从而显著提…...
微软开源GraphRAG的使用教程-使用自定义数据测试GraphRAG
微软在今年4月份的时候提出了GraphRAG的概念,然后在上周开源了GraphRAG,Github链接见https://github.com/microsoft/graphrag,截止当前,已有6900Star。 安装教程 官方推荐使用Python3.10-3.12版本,我使用Python3.10版本安装时,在…...
C++ 中的字面量类型定义
在 C 中,字面量类型(Literal Type)是指可以作为字面量使用的类型。字面量是指代码中直接写出的常量值,比如整数 42、浮点数 3.14、字符串 "hello" 等。而字面量类型则是支持创建这些字面量的类型。 C 中的字面量类型定…...
LeetCode:101. 对称二叉树
跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:101. 对称二叉树 给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输…...
Docker Compose 配置指南
目录 1. Docker Compose 配置1.1 基本配置结构1.2 docker-compose.yml 的各部分1.3 常用配置选项 2. Docker Compose 使用方法2.1 创建 Docker Compose 配置文件2.2 启动服务2.3 查看容器状态2.4 查看服务日志2.5 停止服务2.6 重新构建服务 3. Docker Compose 常用命令3.1 dock…...
【Linux开发工具】自动化构建-make/Makefile
🔥个人主页🔥:孤寂大仙V 🌈收录专栏🌈:Linux 🌹往期回顾🌹:【Linux开发工具】gcc和g 🔖流水不争,争的是滔滔不 一、make和Makefile简介1.1 什么是…...
VSCode 搭建Python编程环境 2024新版图文安装教程(Python环境搭建+VSCode安装+运行测试+背景图设置)
名人说:一点浩然气,千里快哉风。—— 苏轼《水调歌头》 创作者:Code_流苏(CSDN) 目录 一、Python环境安装二、VScode下载及安装三、VSCode配置Python环境四、运行测试五、背景图设置 很高兴你打开了这篇博客,更多详细的安装教程&…...
Python 异步协程:从 async/await 到 asyncio 再到 async with
在 Python 3.8 以后的版本中,异步编程变得越来越重要。本文将系统介绍 Python 标准库中的异步编程工具,带领大家掌握 async/await 语法和 asyncio 的使用。 从一个简单的场景开始 假设我们在处理一些耗时的 I/O 操作,比如读取多个文件或处理…...
矩阵-向量乘法的行与列的解释(Row and Column Interpretations):中英双语
本文是学习这本书的笔记 网站是:https://web.stanford.edu/~boyd/vmls/ 矩阵-向量乘法的行与列的解释 矩阵-向量乘法(Matrix-Vector Multiplication)是线性代数中的基本操作,也是机器学习、数据科学和工程中常用的数学工具。本文…...
针对超大规模病理图像分析!华中科技大学提出医学图像分割模型,提高干燥综合征诊断准确性
口干、眼干、皮肤干,每天伴有不明原因的肌肉酸痛和全身乏力,如果以上症状你「中招」了,除了考虑冬季天气干燥外,还应该警惕一种常见却总是被我们忽视的疾病——干燥综合征 (Sjgren’s Syndrome, SS)。 干燥综合征是以外分泌腺高度…...
混合开发环境---使用编程AI辅助开发Qt
文章目录 [toc]1、说明2、演示视频 1、说明 新时代的浪潮早就已经来临,上不了船的人终将被抛弃,合理使用AI辅助开发、提升效率是大趋势 注意:不要被AI奴隶 合理使用AI辅助编程,十倍提升效率。 大部分的编程AI都有vs code插件&…...
Unity复刻胡闹厨房复盘 模块一 新输入系统订阅链与重绑定
本文仅作学习交流,不做任何商业用途 郑重感谢siki老师的汉化教程与代码猴的免费教程以及搬运烤肉的小伙伴 版本:Unity6 模板:3D 核心 渲染管线:URP ------------------------------…...
[前端]HTTP库Axios
一、Axios简介 Axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 node.js 环境。它是一个流行的 JavaScript 库,用于发起 HTTP 请求,如 GET、POST、DELETE 等。Axios 提供了易于使用的 API,支持请求和响应的拦截、转换数据格…...
Excel中index()函数
函数功能概述 INDEX 函数用于返回表格或区域中的值或对值的引用。它可以根据指定的行和列的位置从一个单元格区域中提取数据。这个函数有两种形式:数组形式和引用形式。语法结构(数组形式) INDEX(array, row_num, column_num)array࿰…...
linux-----文件命令
文件和目录的基本概念 文件类型: 普通文件:这是最常见的文件类型,用于存储数据,如文本文件、二进制文件等。文本文件可以用文本编辑器打开并查看内容,二进制文件则包含机器可执行的代码或其他特定格式的数据。目录文件…...
lua dofile 传参数
cat 1.lua arg[1] 111 arg[2] 222 dofile(./2.lua) cat 2.lua print("First argument is: " .. arg[1]) print("Second argument is: " .. arg[2]) 执行 lua 1.lua,结果为: First argument is: 111 Second argument is: 222 l…...
【ETCD】【实操篇(二)】如何从源码编译并在window上搭建etcd集群?
要在 Windows 上编译 etcd 及 etcdctl 工具,并使用 bat 脚本启动 etcd 集群,首先需要准备好开发环境并确保依赖项正确安装。下面是从 etcd 3.5 源码开始编译和启动 etcd 集群的详细步骤: 目录 1. 安装 Go 环境2. 获取 etcd 源码3. 编译 etcd…...
重温设计模式--备忘录模式
文章目录 备忘录模式(Memento Pattern)概述定义: 作用:实现状态的保存与恢复支持撤销 / 恢复操作 备忘录模式UML图备忘录模式的结构原发器(Originator):备忘录(Memento)&…...
如何借助边缘智能网关实现厂区粉尘智能监测告警
在诸如木制品加工、纺织品加工、塑料橡胶制品加工等多种工业生产场景中,粉尘问题的隐患和风险不可小觑。如果缺少对生产环境中粉尘的监测和管理,可能发生易燃易爆、环境污染和工人尘肺等生产事故。 针对工业场景中的粉尘状况监测、管理及预警,…...
解析mysqlbinlog
一、前置设置 ps -ef | grep mysql 查看mysql进程对应的安装目录 需设置mysql binlog日志模式为 ROW 二、执行命令 [rootlocalhost bin]# mysqlbinlog --verbose --base64-outputdecode-rows /usr/local/mysql/data/binlog.000069 > 1.sql 查看文件具体内容...
【gym】理解gym并测试gym小游戏CartPole (一)
一、gym与文件位置的联合理解 import gym import inspect# 加载 CliffWalking 环境 env gym.make(CliffWalking-v0)# 获取环境的类 env_class type(env)# 获取环境类所在的文件路径 file_path inspect.getfile(env_class)print(f"The source code for CliffWalking-v0…...
【jvm】内存泄漏的8种情况
目录 1. 说明2. 静态集合类持有对象引用3. 单例模式4. 内部类持有外部类5. 未关闭的连接6. 变量不合理的作用域7. 改变对象的哈希值8. 缓存Cache泄漏9. 监听器和回调 1. 说明 1.内存泄漏(Memory Leak)指的是程序中动态分配的内存由于某种原因没有被释放…...
android:sharedUserId 应用进程声明介绍
背景 adb install 安装系统软件报错,原因是签名不一致,进程改变。 代码分析 AndroidManifest.xml 定义的 android:sharedUserId 应用归属进程不同,从phone切换到system。 初始配置 <manifest xmlns:android="http://schemas.android.com/apk/res/android"c…...
WPSJS:让 WPS 办公与 JavaScript 完美联动
随着办公自动化需求的日益增长,WPS Office 推出了 WPSJS,这是一款强大的开发者工具,允许开发者通过 JavaScript 脚本与 WPS 办公软件进行互动。无论是在表格中自动填充数据、在文档中修改格式,还是在演示文稿中插入动态内容&#…...