今天突然就想着把之前的写的小工具全部都发出来…
是因为原本计划着写整个接口自动化的思路相关的文章,但是写到一半发现自己能力不够了-。 -
嗯有很多细节点我还需要再去查询和梳理。
所以就先发这个了了了了了…
背景:当时候由于项目需要,我们要统计接口文档上标明的字段 占 接口返回的响应报文中含有的字段的百分之多少…说实话,我也不清楚这波操作的意义何在?(还好领导应该不会看csdn)
领导说啥就做啥呗。量少的时候还能手工做,量大就不行了。所以才有动力去写这个脚本。
比对原则:B列中每行的值都会和A列中所有的值进行对比,然后在C列生成记录。最后在D列生成本次执行结果的信息。
话不多说

package BaoWen_BiDui;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
/** CS_test* 对比报文专用* */
public class compare_xml {static File src = null;static FileInputStream fis=null;static XSSFWorkbook wb=null;static StringBuffer sb = new StringBuffer();private static int j;      public static  void Qu_Zhi(int z){try{               //加载sheet,这里我们只有一个sheet,默认是sheet1  XSSFSheet sh1= wb.getSheetAt(z);int count=0;List<Integer> list = new ArrayList<Integer>();//取得单元格内字段,判断从第一个‘<’后一个位置开始拿值,一直拿到第一个‘>’的前一个位置for(int i=0;i<sh1.getPhysicalNumberOfRows();i++){String val = sh1.getRow(i).getCell(1,Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim();if(val.indexOf("<")==-1){continue;}//判断:如果只存在单个<>,则不会进行对比if(val.indexOf("<")!=(val.lastIndexOf("<"))){String val_2 = val.substring(val.indexOf("<")+1, val.indexOf(">"));for(int k=0;k<sh1.getPhysicalNumberOfRows();k++){if(val_2.equals(sh1.getRow(k).getCell(0,Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue())){sh1.getRow(i).getCell(2,Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).setCellValue("已含有");list.add(k);count++;break;}else{sh1.getRow(i).getCell(2,Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).setCellValue("未含有");  }}}else{sh1.getRow(i).getCell(2,Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).setCellValue("该字段不会进行对比");}}//拿到出现已含有时候对应的A列的行数,并保存到数组里面            Collections.sort(list);j = 0;for(int inx=0;inx<sh1.getPhysicalNumberOfRows();inx++){if(j>=list.size()){//System.out.println("未包含"+inx);sh1.getRow(inx).getCell(3,Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).setCellValue(sh1.getRow(inx).getCell(0,Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue());continue;}if(list.get(j)==inx){j++;                    }else {//System.out.println("未包含"+inx);sh1.getRow(inx).getCell(3,Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).setCellValue(sh1.getRow(inx).getCell(0,Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue());}}//            for(int f=0;f<mx.length()-1;f++){
//              for(int g=0;g<sh1.getPhysicalNumberOfRows();g++){
//                  System.out.println(mx.charAt(f));
//                  if(!String(mx.charAt(f)).equals(g)){
//                        sh1.getRow(g).getCell(3,Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).setCellValue(
//                              sh1.getRow(g).getCell(0,Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue());
//                  }
//              }
//            }
//            System.out.println(list);System.out.println("                      ┌'已含有'字段出现次数:"+count+"┐");System.out.println("这是第"+(z+1)+"张Sheet页-------│接口总字段:----------"+sh1.getPhysicalNumberOfRows()+"│");double d =Math.round(count*1.0/sh1.getPhysicalNumberOfRows()*10000)/100.0;System.out.println("                      └字段覆盖率:-----"+d+"%┘");sh1.getRow(0).getCell(4,Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).setCellValue("已含有字段出现次数:"+count);sh1.getRow(1).getCell(4,Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).setCellValue("接口总字段:"+sh1.getPhysicalNumberOfRows());sh1.getRow(2).getCell(4,Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).setCellValue("字段覆盖率:"+d+"%");// 保存文件  FileOutputStream fout=new FileOutputStream(new File(".\\Files_BiDui\\BiDui.xlsx"));    //覆盖写入内容   wb.write(fout);    // 关闭文件  fout.close();  } catch (Exception e){   e.printStackTrace();}}public static void main(String[] args) {// TODO Auto-generated method stubsrc = new File("./Files_BiDui/BiDui.xlsx");  // 加载文件  try {fis = new FileInputStream(src);wb =new XSSFWorkbook(fis);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}  long t1 = System.currentTimeMillis();//几张sheet页,z就是小于几
//      PropertyConfigurator.configure("config/log4j.properties");for(int z=0;z<2;z++){Qu_Zhi(z);}long t2 = System.currentTimeMillis();System.out.println("大吉大利,已完成当前比对!"+"用时 " + (t2 - t1) + " 毫秒");   }  }

还是那句话,可能这个工具适用性不强。
但是综合上一篇案例生成的小工具,我想给大家带来的一个习惯就是:
如果我们需要在excel上进行一些大批量的读写操作,且其中有一定的规律,我们可以考虑自己写一些小工具。

小工具二:报文比对工具相关推荐

  1. Vector CAN Log报文收发分析工具VN1640/VN1630替代款工具--CANBOX

    博主联系方式:QQ:1256153255 ,邮箱:1256153255@qq.com 作为车载行业的童鞋们,绝大多数人应该都知道或用过Vector的CAN Log报文收发分析工具VN1630(A)和V ...

  2. ES报文辅助生成工具-JavaFX

    此程序为基于 Java8 开发的 JavaFX Maven 工程,是 Java 组装ElasticSearch请求报文工具的辅助 Java 代码生成工具,方便开发者快速编写代码.现学现用,写得不好. ...

  3. ISO8583报文组装解析工具和定义器示例

    8583报文组装和解析工具类(Send8583Util),代码如下: import com.alibaba.fastjson.JSONObject; import org.apache.commons ...

  4. md5sum算法 —— linux或Unix上,md5sum是用来计算和校验文件报文摘要的工具程序

    md5sum帮助命令: [root@jie openssl]# md5sum --help Usage: md5sum [OPTION]... [FILE]... Print or check MD5 ...

  5. PCL小工具二:使用kitti的GT(ground truth)建立激光点云地图

    此代码合并了每一帧的激光点云数据,构成了激光点云地图. ground truth,即真值,在本文简写成GT. 在kitti数据集中,GT代表了世界坐标系下相机的位姿真值,也就是Tcam2world 经 ...

  6. 班级小工具二【随机抽取同学】

    这里还是和之前的一样,先在src文件夹下创建ANSI格式的.txt文件用于存储名单,我这里用到了接龙检测中用到过的班级名单,还有将男生和女生分别列了出来 class Random_People { # ...

  7. 发票管理小工具二:获取发票内容

    开发环境: PyCharm 2019.3.5 (Community Edition) Python3.7 pdfminer3k 1.3.4 发票是pdf格式,使用pdfminer3k来获取,相应代码: ...

  8. 周末学习总结(LIO标定+kitti数据集的使用+evo工具的使用+开源数据集+ssh的使用)

    周末学习总结 LIO标定 lidar_IMU_calib lidar_align kitti数据集的使用 开源数据集 evo工具的使用 ssh 的使用 LIO标定 网上开源的标定包,用的比较多的是浙江 ...

  9. Android开发实用小工具三——面积转换工具

    文章目录 前言 一.效果展示 二.代码 主代码 总结 前言 面积转换工具的开发与实现. 一.效果展示 二.代码 准备工作和样式布局与我开发的另一个小工具(长度转换工具)所用一致,详情请看我上一篇文章. ...

最新文章

  1. 解决存储过程中数据安全问题的四种方式
  2. Keras Theano 输出中间层结果
  3. MongoDB的可视化工具
  4. boost::mp11::mp_fold_q相关用法的测试程序
  5. 【ThinkingInC++】61、非成员运算符
  6. typescript 接口 java_Typescript基础(4)——接口
  7. python南开大学王凯_王凯:长大后我也成了你
  8. python环境准备_一键实现Python环境准备
  9. 计算机网络与应用第三次笔记
  10. 深度探索C++对象模型读书笔记(1)
  11. unity串口 连接多个串口崩溃_必学DB9串口+3种连接方式
  12. c语言数据结构课程设计算术表达式求值,《数据结构 课程设计》表达式求值 实验报告...
  13. web前端之HTML5 入门(9):脚本、速查列表、URL、字符实体
  14. C++ rb_tree红黑树
  15. 易能变频器说明书故障代码_易能变频器故障判断与处理
  16. Fedora17下的hadoop-1.0.4系统配置
  17. Unresolved reference(未解析的引用)——解决Pycharm无法导入包问题
  18. orangepi——i2c协议,0led显示
  19. 扇形展开的悬浮菜单按钮CircularFloatingActionMenu
  20. bandzip与WinRAR

热门文章

  1. 华为rh2288v2服务器系统,扩展能力强 华为RH2288H V2服务器解析
  2. TiDB监控pd面板显示:Region Health: empty-regin-count很多,怎么回收empty-regin?
  3. 最简单的计算机原理,【图片】【技术帖】从原子到计算机(计算机原理纯正技术帖,简单且通俗)_计算机吧_百度贴吧...
  4. Ip2region 离线IP地址定位库
  5. 黑马程序员——结缘黑马
  6. 操作系统复习题最全(复习看它就够了!!!!!
  7. vba 输出文本 m Linux,利用VBA实现EXCEL数据输出TXT等文本文件
  8. 夺宝答题王小程序完整源码(含前端/后端以及数据库脚本)
  9. 【教学类-07-04】20221113《破译电话号码-加减法版+自制(PDF打印)》(大班主题《我要上小学》)
  10. 参观营收上亿的私域流量企业