go 查询采购单设备事项V3

 一、版本说明

本版本在整合上两次的功能基础上,引进ini配置文件的读取事项,快速读取本地配置文件,完成读取设置

第一版:实现了严格匹配模式的查找
https://blog.csdn.net/wtt234/article/details/131979385

第二版:实现了严格匹配模式的查找,以及宽松(关键字的查找)
https://blog.csdn.net/wtt234/article/details/131981275

本版本在整合上两次的功能基础上,引进ini配置文件的读取事项,快速读取本地配置文件,完成读取设置

二、前置知识ini文件读取 

ini配置文件:

#配置文件的配置地方
#全局配置
static_foldel="./tools"
#mysql局部配置
[mysql]
host = localhost:3306
user = root
password = root
dbname = test[pm]
keydevicelists=语音配线架, 网络配线架, 网络理线架, 终端盒, 光纤收发器, 光纤配线架
devicelists=50对语音配线架, 24口网络配线架, 24口网络理线架, 4口终端盒, 光纤收发器, 96芯光纤配线架

 ini文件读取代码

package mainimport ("fmt""github.com/go-ini/ini"
)//中文网站  https://ini.unknwon.cn
//如果您不需要任何对值的自动转变功能(例如递归读取),可以直接获取原值(这种方式性能最佳):
//
//val := cfg.Section("").Key("key name").Value()
//
//判断某个原值是否存在:
//
//yes := cfg.Section("").HasValue("test value")func main() {// 读取INI文件cfg, err := ini.Load("pm.ini")//cfg, err := ini.Load("pm.ini")if err != nil {fmt.Printf("Failed to read file: %v", err)return}//全局配置的获取,//分区读取,默认分区用空字符串表示quanjupm := cfg.Section("").Key("static_foldel").String()fmt.Println(quanjupm)//============================//获取mysql配置段,//读取指定分区mysql := cfg.Section("mysql")fmt.Println(mysql.Key("host").String())fmt.Println(mysql.Key("user").String())//读取一个长字符串格式进行处理keydevicelists := cfg.Section("pm")keySlice := keydevicelists.Key("keydevicelists").Strings(",")fmt.Printf("%v,===>%T", keySlice, keySlice)fmt.Println("===================")//修改文件// 更新INI文件--修改文件//mysql.Key("host").SetValue("newhost")//mysql.Key("user").SetValue("newuser")//mysql.Key("password").SetValue("newpassword")//mysql.Key("dbname").SetValue("newdb")//cfg.SaveTo("conf.ini")
}//vals = cfg.Section("").Key("STRINGS").Strings(",")

 

三、全部实现代码

项目组织图:

 

配置文件

pm.ini


#检索关键字的说明信息,keydevicelists,关键字检索
#devicelists,完全内容匹配检索[pm]
keydevicelists=语音配线架, 网络配线架, 网络理线架, 终端盒, 光纤收发器, 光纤配线架
devicelists=50对语音配线架, 24口网络配线架, 24口网络理线架, 4口终端盒, 光纤收发器, 96芯光纤配线架

全部代码核心;

package mainimport ("fmt""github.com/go-ini/ini""github.com/xuri/excelize/v2""strings"
)// 我需要检索的信息
// var devicelists []string = []string{"50对语音配线架", "24口网络配线架", "24口网络理线架", "4口终端盒", "光纤收发器", "96芯光纤配线架"}
// var devicelists = []string{"50对语音配线架", "24口网络配线架", "24口网络理线架", "4口终端盒", "光纤收发器", "96芯光纤配线架"}
//
// var keydevicelists = []string{"语音配线架", "网络配线架", "网络理线架", "终端盒", "光纤收发器", "光纤配线架"}
var devicelists []stringvar keydevicelists []stringfunc init() {// 读取INI文件cfg, err := ini.Load("pm.ini")if err != nil {fmt.Printf("Failed to read file: %v", err)return}//读取一个长字符串格式进行处理pmget := cfg.Section("pm")keydevicelists = pmget.Key("keydevicelists").Strings(",")devicelists = pmget.Key("devicelists").Strings(",")}// InSlice 判断字符串是否在 slice 中。
func InSlice(items []string, item string) bool {for _, eachItem := range items {if eachItem == item {return true}}return false
}// InSlice 判断字符串是否在 slice 中。
func includeSlice(items []string, item string) bool {for _, eachItem := range items {//字符串包含函数,判断表格中名字是否包含我的列表中的内容//这样我的找寻字符串中写入关键字就可以了if strings.Contains(item, eachItem) {return true}}return false
}func sheet(sheetname string, f *excelize.File, format int) {//fmt.Println("+++++++++++++++++++++++++")// 获取 Sheet1 上所有单元格rows, err := f.GetRows(sheetname)if err != nil {fmt.Println(err)return}//fmt.Println(rows)for _, row := range rows {//fmt.Println(row, "========", index)//判断每行的里的字段长度,如果是小于6 那就是不获取设备名字和设备价格if len(row) < 6 {continue}//获取excel中,设备的名称kindname := row[1]//获取excel中,设备的数量kcount := row[4]//如果表格中 kcount没有内容,那就是给复制一个“0”字符串if kcount == "" {kcount = "0"}//判断模式,可以进行采用 不同的检索方式//1.包含模式,我检索的都是“关键字”  2.严格模式 ,内容必须得一模一样的查找if format == 1 {//fmt.Println("你匹配的模式为包含模式")//包含的调用if includeSlice(keydevicelists, kindname) {//fmt.Println(sheetname, kindname, "=====++++++=======》", kcount)fmt.Printf("获取信息:sheet表:%s;设备名称:%s;设备数量:%s\n;", sheetname, kindname, kcount)//fmt.Println()}} else {//fmt.Println("你匹配的模式为严格模式")if InSlice(devicelists, kindname) {//fmt.Println(sheetname, kindname, "=====++++++=======》", kcount)fmt.Printf("获取信息:sheet表:%s;设备名称:%s;设备数量:%s\n;", sheetname, kindname, kcount)//fmt.Println()}}}}// 读取Excel表格
func main() {//fmt.Println("====================")//选择的匹配模式:1-包含模式,2-严格模式var mode intf, err := excelize.OpenFile("by.xlsx")if err != nil {fmt.Println(err)return}defer func() {if err := f.Close(); err != nil {fmt.Println(err)}}()sheetnames := f.GetSheetList()//fmt.Printf("本excel表格的sheetnames:%s", sheetnames)//fmt.Println("===============")for {fmt.Println("请输入你需要的匹配模式:1-包含模式,2-严格模式,输入 1 或者 2 :")fmt.Scan(&mode)//fmt.Printf("%T模式为:", mode)//退出内容if mode == 88 {fmt.Println("88..88..")break}//遍历所有的表格sheet,调用处理函数for _, sheetname := range sheetnames {//fmt.Println(sheetname)//fmt.Println("===>", sheetname)sheet(sheetname, f, mode)}}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/13966.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

作为程序员,你很有必要了解一下IVX

一、IVX是什么 iVX 是一个“零代码”的可视化编程平台&#xff0c;拥有方便的在线集成开发环境&#xff0c;不需要下载开发环境&#xff0c;打开浏览器即可随时随地进行项目编辑。iVX 还拥有“一站式”的云资源&#xff0c;通过这一套一站式服务&#xff0c;iVX 可以实现一站式…

详解STM32的GPIO八种输入输出模式,GPIO各种输入输出的区别、初始化的步骤详解,看这文章就行了(超详细)

在STM32微控制器中&#xff0c;常见的输入输出(GPIO)模式有八种&#xff0c;分别是推挽输出、开漏输出、复用推挽输出、复用开漏输出、浮空输入、上拉输入、下拉输入和模拟输入。下面我将为你解释每种模式的特点和区别&#xff0c;并提供相应的示例代码。 文章目录 介绍区别初…

MySql002——关系型数据库基础知识

前言&#xff1a;因为本专栏学习的是MySQL&#xff0c;而MySQL是关系型数据库&#xff0c;所以这篇文章就来介绍一些关系型数据库基础知识&#xff0c;至于其他知识小伙伴们可以自行学习&#xff0c;同时不足之处也欢迎批评指正&#xff0c;谢谢~ 一、MySQL关系型数据库(RDBMS)…

从实践彻底掌握MySQL的主从复制

目录 一、本次所用结构如图---一主多从级联&#xff1a; 二、IP。 三、配置M1&#xff1a; 四、从库M1S1&#xff1a; 五、从库M2配置&#xff1a; 六、 从库M2S1&#xff1a; 一、本次所用结构如图--- 一主多从级联&#xff1a; 二、IP。这里M1S1和M1S2一样的&#xff0…

图技术在 LLM 下的应用:知识图谱驱动的大语言模型 Llama Index

LLM 如火如荼地发展了大半年&#xff0c;各类大模型和相关框架也逐步成型&#xff0c;可被大家应用到业务实际中。在这个过程中&#xff0c;我们可能会遇到一类问题是&#xff1a;现有的哪些数据&#xff0c;如何更好地与 LLM 对接上。像是大家都在用的知识图谱&#xff0c;现在…

查看maven发布时间的方法

查看maven发布时间的方法如下【 打开maven官网 选中Release Notes 即可查看对应版本的发布时间 】

【计算机网络】第 4 课 - 物理层

欢迎来到博主 Apeiron 的博客&#xff0c;祝您旅程愉快 &#xff01; 时止则止&#xff0c;时行则行。动静不失其时&#xff0c;其道光明。 目录 1、物理层的基本概念 2、物理层协议的主要任务 3、物理层任务 4、总结 1、物理层的基本概念 在计算机网络中&#xff0c;用来…

基于多场景的考虑虑热网网损的太阳能消纳能力评估研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

windows切换php版本以及composer

前提 安装php8.2 安装Php7.4 下载 nts是非线程安全的&#xff0c;这里选择线程安全的&#xff0c;选择64位 解压缩 修改系统环境变量 修改为php-7的 cmd中输入php -v查看 找到composer存放路径C:\ProgramData\ComposerSetup\bin 将三个文件复制到php目录下 重启电脑…

2023年深圳杯数学建模赛题浅析

由于今明两日由于一些不可避免的事情&#xff0c;这里仅仅先给大家简单写一个赛题浅析&#xff0c;详细过程步骤思路以及讲解视频预计后天发布 A题 影响城市居民身体健康的因素分析 A题以慢性病为命题背景&#xff0c;给出数据以及题目初步来看来看为一个数据处理数据分析的综…

oracle12c静默安装

目录 前言 安装配置步骤 关闭防火墙,禁止防火墙开机自启 关闭selinux yum安装必要安装包 内网环境下载依赖包的方式 创建用户和组 创建oinstall和dba组 创建oracle用户 设置oracle密码 查看创建结果 修改内核参数 使配置生效 修改用户及文件限制 改文件限制 修改用…

PHP使用Redis实战实录1:宝塔环境搭建、6379端口配置、Redis服务启动失败解决方案

宝塔环境搭建、6379端口配置、Redis服务启动失败解决方案 前言一、Redis安装部署1.安装Redis2.php安装Redis扩展3.启动Redis 二、避坑指南1.6379端口配置2.Redis服务启动&#xff08;1&#xff09;Redis服务启动失败&#xff08;2&#xff09;Redis启动日志排查&#xff08;3&a…

《向量数据库指南》:向量数据库Pinecone如何集成LangChain (一)

目录 LangChain中的检索增强 建立知识库 欢迎使用Pinecone和LangChain的集成指南。本文档涵盖了将高性能向量数据库Pinecone与基于大型语言模型(LLMs)构建应用程序的框架LangChain集成的步骤。 Pinecone使开发人员能够基于向量相似性搜索构建可扩展的实时推荐和搜索系统…

CentOS 项目发出一篇奇怪的博文

导读最近&#xff0c;在红帽限制其 RHEL 源代码的访问之后&#xff0c;整个社区围绕这件事发生了很多事情。 CentOS 项目发出一篇奇怪的博文 周五&#xff0c;CentOS 项目董事会发出了一篇模糊不清的简短博文&#xff0c;文中称&#xff0c;“发展社区并让人们更容易做出贡献…

Vue学习Day3——生命周期\组件化

一、Vue生命周期 Vue生命周期&#xff1a;就是一个Vue实例从创建 到 销毁 的整个过程。 生命周期四个阶段&#xff1a;① 创建 ② 挂载 ③ 更新 ④ 销毁 1.创建阶段&#xff1a;创建响应式数据 2.挂载阶段&#xff1a;渲染模板 3.更新阶段&#xff1a;修改数据&#xff0c;更…

【计算机网络】11、网桥(bridge)、集线器(hub)、交换机(switch)、路由器(router)、网关(gateway)

文章目录 一、网桥&#xff08;bridge)二、集线器&#xff08;hub&#xff09;三、交换机&#xff08;switch)四、路由器&#xff08;router&#xff09;五、网关&#xff08;gateway&#xff09; 对于hub&#xff0c;一个包过来后&#xff0c;直接将包转发到其他口。 对于桥&…

区块链 2.0笔记

区块链 2.0 以太坊概述 相对于比特币的几点改进 缩短出块时间至10多秒ghost共识机制mining puzzle BTC:计算密集型ETH&#xff1a;memory-hard(限制ASIC) proof of work->proof of stake对智能合约的支持 BTC&#xff1a;decentralized currencyETH&#xff1a;decentral…

怎么查看gcc的安装路径

2023年7月29日 很简单&#xff0c;通过在命令行输入如下命令就可以了&#xff1a; gcc -print-search-dirs在Windows中 在Linux中 ​​​

力扣刷题记录---利用python实现链表的基本操作

文章目录 前言一、利用python实现链表的基本操作1.节点的定义使用类实现&#xff1a;1.链表的定义使用类实现&#xff1a;3.判断是否为空函数实现&#xff1a;4.链表长度函数实现&#xff1a;5.遍历链表函数实现&#xff1a;6.头插法函数实现&#xff1a;7.尾插法函数实现&…

js原型以及原型链

目录 原型隐式原型显式原型constructornew操作符 重写原型对象原型链继承原型链继承借用构造函数继承组合构造继承 原型继承寄生继承组合寄生继承 原型继承关系 原型 在JavaScript中&#xff0c;每个对象都有一个内置属性[[prototype]]&#xff0c;这个属性指向一个另一个对象…