当前位置: 首页 > news >正文

go 查询采购单设备事项[小示例]V2-两种模式{严格,包含模式}

 第一版:

https://mp.csdn.net/mp_blog/creation/editor/131979385

 第二版:

优化内容:

检索数据的两种方式:

1.严格模式--找寻名称是一模一样的内容,在上一个版本实现了

2.包含模式,也就是我输入检索关键字“语音配线架”【原来名称为‘50对语音配线架’】,这样可以快速找到同类别的内容

 

 代码:

package mainimport ("fmt""github.com/xuri/excelize/v2""strings"
)//eve sheet name的内容// 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
}// 我需要检索的信息
// var devicelists []string = []string{"50对语音配线架", "24口网络配线架", "24口网络理线架", "4口终端盒", "光纤收发器", "96芯光纤配线架"}
var devicelists = []string{"50对语音配线架", "24口网络配线架", "24口网络理线架", "4口终端盒", "光纤收发器", "96芯光纤配线架"}var keydevicelists = []string{"语音配线架", "网络配线架", "网络理线架", "终端盒", "光纤收发器", "光纤配线架"}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"}//fmt.Printf("固定列名字是:%s,类别是%T", kindname, kindname)//fmt.Println()//调用函数  用来判断 设备名称是否是我需要寻找的内容//如果是我需要寻找的内容就是返回对应表的名称以及 设备名称和 对应数量//if InSlice(devicelists, kindname) {//	//fmt.Println(sheetname, kindname, "=====++++++=======》", kcount)//	fmt.Printf("获取信息:sheet表:%s;设备名称:%s;设备数量:%s\n;", sheetname, kindname, kcount)//	//fmt.Println()//}//判断模式,可以进行采用 不同的检索方式//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()}}}//fmt.Println("+++++++++++++++++++++++++")//指定单元格的值,查询//value, _ := f.GetCellValue(sheetname, "B7")//fmt.Println(value)//for _, row := range rows {//	for _, colCell := range row {//		fmt.Print(colCell, "\t")//	}//	fmt.Println()//}}func sheetv2(sheetname string, f *excelize.File) {//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"}//fmt.Printf("固定列名字是:%s,类别是%T", kindname, kindname)//fmt.Println()//调用函数  用来判断 设备名称是否是我需要寻找的内容//如果是我需要寻找的内容就是返回对应表的名称以及 设备名称和 对应数量//if InSlice(devicelists, kindname) {//	//fmt.Println(sheetname, kindname, "=====++++++=======》", kcount)//	fmt.Printf("获取信息:sheet表:%s;设备名称:%s;设备数量:%s\n;", sheetname, kindname, kcount)//	//fmt.Println()//}//包含的调用if includeSlice(devicelists, kindname) {//fmt.Println(sheetname, kindname, "=====++++++=======》", kcount)fmt.Printf("获取信息:sheet表:%s;设备名称:%s;设备数量:%s\n;", sheetname, kindname, kcount)//fmt.Println()}}//fmt.Println("+++++++++++++++++++++++++")//指定单元格的值,查询//value, _ := f.GetCellValue(sheetname, "B7")//fmt.Println(value)//for _, row := range rows {//	for _, colCell := range row {//		fmt.Print(colCell, "\t")//	}//	fmt.Println()//}}
func sheet_bak(sheetname string, f *excelize.File) {// 获取 Sheet1 上所有单元格rows, err := f.GetRows(sheetname)if err != nil {fmt.Println(err)return}for _, row := range rows {for _, colCell := range row {fmt.Print(colCell, "\t")}fmt.Println()}}// 读取Excel表格
func main() {//选择的匹配模式: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)//退出内容if mode == 88 {break}//遍历所有的表格sheet,调用处理函数for _, sheetname := range sheetnames {//fmt.Println(sheetname)sheet(sheetname, f, mode)}}}

相关文章:

go 查询采购单设备事项[小示例]V2-两种模式{严格,包含模式}

第一版&#xff1a; https://mp.csdn.net/mp_blog/creation/editor/131979385 第二版&#xff1a; 优化内容&#xff1a; 检索数据的两种方式&#xff1a; 1.严格模式--找寻名称是一模一样的内容&#xff0c;在上一个版本实现了 2.包含模式&#xff0c;也就是我输入检索关…...

c++11 标准模板(STL)(std::basic_filebuf)(八)

定义于头文件 <fstream> template< class CharT, class Traits std::char_traits<CharT> > class basic_filebuf : public std::basic_streambuf<CharT, Traits> std::basic_filebuf 是关联字符序列为文件的 std::basic_streambuf 。输入序…...

行为型模式之解释器模式

解释器模式&#xff08;Interpreter Pattern&#xff09; 解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为设计模式&#xff0c;它用于对语言的文法进行解释和解析&#xff0c;以实现特定的操作。 在解释器模式中&#xff0c;存在以下几个角色&#xff1a; 抽…...

阿里云域名备案

最好的爱情&#xff0c;不是因为我们彼此需要在一起&#xff0c;而是因为我们彼此想要在一起。 阿里云的域名如何备案&#xff0c;域名备案和ICP备案一样吗&#xff1f;&#xff1f; 截至我所掌握的知识&#xff08;2021年9月&#xff09;&#xff0c;阿里云的域名备案和ICP备案…...

Clion开发Stm32之温湿度传感器(DS18B20)驱动编写和测试

前言 涵盖之前文章: Clion开发STM32之HAL库GPIO宏定义封装(最新版)Clion开发stm32之微妙延迟(采用nop指令实现)Clion开发STM32之日志模块(参考RT-Thread) DSP18B20驱动文件 头文件 /*******************************************************************************Copy…...

文档管理NAS储存安全吗?

关键词&#xff1a;私有化、知识管理系统、文档管理、群晖NAS、协同编辑 随着企业不断发展扩大&#xff0c;企业的知识文档也逐渐增多&#xff0c;很多企业方便管理及考虑数据安全问题会将文件数据储存至NAS。 但将企业文档数据放在NAS上就足够安全的吗&#xff1f; 天翎文档管…...

用windeployqt.exe打包Qt代码

首先找到我们编译Qt代码的对应Qt版本的dll目录&#xff0c;该目录下有windeployqt.exe&#xff1a; D:\DevTools\Qt\5.9\msvc2017_64\bin 在这个目录下打开cmd程序。 然后把要打包的exe放到一个单独的目录下&#xff0c;比如&#xff1a; 然后在cmd中调用&#xff1a; winde…...

【Python机器学习】实验04(2) 机器学习应用实践--手动调参

文章目录 机器学习应用实践1.1 准备数据此处进行的调整为&#xff1a;要所有数据进行拆分 1.2 定义假设函数Sigmoid 函数 1.3 定义代价函数1.4 定义梯度下降算法gradient descent(梯度下降) 此处进行的调整为&#xff1a;采用train_x, train_y进行训练 1.5 绘制决策边界1.6 计算…...

【爬虫案例】用Python爬取iPhone14的电商平台评论

用python爬取某电商网站的iPhone14评论数据&#xff0c; 爬取目标&#xff1a; 核心代码如下&#xff1a; 爬取到的5分好评&#xff1a; 爬取到的3分中评&#xff1a; 爬取到的1分差评&#xff1a; 所以说&#xff0c;用python开发爬虫真的很方面&#xff01; 您好&…...

01)docker学习 centos7离线安装docker

docker学习 centos7离线安装docker 在实操前可以先看下docker教程,https://www.runoob.com/docker/docker-tutorial.html , 不过教程上都是在线安装方式,很方便,离线安装肯定比如在线麻烦点。 一、什么是Docker 在学习docker时,在网上看到一篇博文讲得很好,自己总结一下…...

前端 - 实习两个星期总结

文章目录 吐槽总结新人建议项目学习到的 今天已经是菜鸟实习的第二个星期了&#xff0c;怎么说呢&#xff0c;反正就是进的一个不大不小的厂&#xff0c;做着不难不易的事&#xff0c;菜鸟现在主要做的就是适配&#xff01;现在就来总结一下&#xff0c;不过这之前&#xff0c;…...

MySQL——主从复制

1.理解MySQL主从复制原理。 2.完成MySQL主从复制。 1.理解MySQL主从复制原理。 1&#xff09;、MySQL支持的复制类型 &#xff08;1&#xff09;、基于语句&#xff08; statement &#xff09;的复制 在主服务器上执行SQL 语句&#xff0c;在从服务器上执行同样的语句。 My…...

报表下载工具

1.需求说明 我有一堆文件的Url地址&#xff0c; 现在需要按照企业&#xff0c;项目和报表类型分类下载到对应的文件夹中 2.相关实体类 企业文件夹定义 package com.vz.utils.report;import lombok.Data; import java.util.ArrayList; import java.util.List; import java.uti…...

树及其遍历

文章目录 树树定义专业术语树分类 二叉树分类存储连续存储&#xff08;完全二叉树&#xff09;链式存储一般树的存储森林的存储 线索二叉树哈夫曼树构造步骤 遍历先序遍历中序遍历后续遍历 链式二叉树遍历具体代码已知两种遍历序列求原始二叉树已知先序和中序求后序已知中序和后…...

Qt报错解决办法

anaconda环境安装qt报错解决办法 报错&#xff1a;thresholdGap: 20 pointsShape: 164142 qt.qpa.plugin: Could not find the Qt platform plugin “wayland” in “/home/tianhailong/anaconda3/envs/edge_algorithm/lib/python3.8/site-packages/cv2/qt/plugins” This app…...

Python(四十七)列表对象的创建

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…...

#systemverilog# 说说Systemverilog中《automatic》那些事儿

前面我们学习了有关systemverilog语言中有关《static》的一些知识,同static 关系比较好的哥们,那就是 《automatic》。今天,我们了解认识一下。 在systemveriog中,存在三种并发执行语句,分别是fork..join,fork...join_any和fork..join_none,其中只有fork...join_none不…...

C/C++ 动态内存分配与它的指针变量

一、什么是内存的动态分配 全局变量分配在内存中的静态存储区。局部变量&#xff08;包括形参&#xff09;分配在内存中的动态存储区&#xff0c;这个存储区是一个称为栈的区域。除此之外&#xff0c;C语言还允许建立内存动态分配区域&#xff0c;以存放一些临时用的数据&…...

UE5初学者快速入门教程

虚幻引擎是一系列游戏开发工具&#xff0c;能够将 2D 手机游戏制作为 AAA 游戏机游戏。虚幻引擎 5 用于开发下一代游戏&#xff0c;包括Senuas Saga: Hellblade 2、Redfall&#xff08;来自 Arkane Austin 的合作射击游戏&#xff09;、Dragon Quest XII: The Flames of Fate、…...

论文笔记--FEDERATED LEARNING: STRATEGIES FOR IMPROVING COMMUNICATION EFFICIENCY

论文笔记--FEDERATED LEARNING: STRATEGIES FOR IMPROVING COMMUNICATION EFFICIENCY 1. 文章简介2. 文章概括3 文章重点技术3.1 联邦学习(federated learning, FL)3.2 Structured updates3.3 Sketched Update 4. 文章亮点5. 原文传送门 1. 文章简介 标题&#xff1a;FEDERATE…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...