ALLEGRO画PCB的软件生成的坐标文件里面没有原件的参数数值,比如没有电容容量,电阻阻值。如下图:

焊接厂生产的时候希望我在里面加上原件参数。我这边反复看了ALLEGRO设置,都无法在同一个文件输出左边文件和原件参数。

要想可口,自己动手。我琢磨自己合并一下。打算和BOM单合并一下就可以了。基本思路就是从BOM单只提取原件标号和参数,保存成一个bom文件。之后程序遍历坐标文件每一行,处理每一行时候,找到标号之后从bom里面根据标号找到参数,之后将见参数加到这一行就OK。

我们将BOM文件精简的只有两列,.BOM单一般是电子表格,我们删除无关列并且调整位置成为一下样子:

之后保存成我们能识别和解析的文本文件,

另存为.csv文件。我们用文本编辑软件打开这个csv文件看到是这样的

这里面我们看到用逗号来间隔每个字段,如果字段本身中有逗号就将此字段内容加引号。

接下来我们编写程序,合并这两个文件。代码如下:

#include "stdio.h"static int strncmp(char *a,char *b,int len ){int i ;for(i=0;i<len;++i)  if (a[i]!=b[i]) return 0;return 1 ;}int strfind(char *word,char *line){int r , i, word_len ,line_len ; r=0;//  printf("strfind<%s> in <%s>\n",word,line);word_len = strlen (word);line_len = strlen (line);for (i=0;i<line_len;++i)if ( strncmp(word,line+i,word_len) == 1 )  r = 1;
//    printf("strfind result is %d \n",r );// getchar();return r ;}char * find_value (char * line){static  char buf[100] ; int i,line_len ,t; for(i=0;i<100;++i)  buf[i] = 0 ; i = line_len = strlen (line);printf("line len is %d\r\n",i);  //getchar () ;while( i ) { if (line[i] == ',') break;i--;}if (i==0) return NULL;t = 0 ;i++;if(line[i]==' ') i++;for(;i<line_len;++i) {if (line[i] ==0x00)  break; if (line[i] ==0x0d)  break; if (line[i] ==0x0a)  break; buf[t++] = line[i] ;}return buf ;
}char * get_name (char * line ){static char  buf[10];int i ;for(i=1;i<10;++i)buf[i]=0; for(i=1;i<10;++i) if( line[i] == ' ' ) break ;if (i==10) return NULL;memcpy (buf,line,i);return buf;
}char * search_value (char *lable ){ FILE *fp;int i ,t ,r;static char str[1024],*p;
p=NULL;/* opening file for reading */fp = fopen("bom.csv" , "r");if(fp == NULL) {perror("Error opening file");return(NULL);}while( fgets (str, 1024, fp)!=NULL ) {puts(str);r = strfind(lable,str);if (r){ //       printf("find a item in BOM !\n");p =  find_value(str);puts(p);//     printf("is it ok?");//     getchar();break;}}fclose(fp);return(p);
}char * format_value (char *p){static char buf[1200] ;buf[0] = 0 ;strcpy(buf,p) ;strcat(buf,"                                                  ");buf[30] = 0 ;                                                buf[25] = '!';return buf ;}int main  () {FILE *fp;FILE *ft;char str[1024],*p;char *rp ;/* opening file for reading */fp = fopen("place.txt" , "r");if(fp == NULL) {perror("Error opening input file");return(-1);}ft = fopen("place_bom.txt" , "w");if(ft == NULL) {perror("Error opening output file");return(-1);}while( fgets (str, 1024, fp)!=NULL ) {/* writing content to stdout */puts(str);p = get_name(str);if (p){rp = search_value(p);if (rp==NULL) printf("<%s>not found",p); if (rp==NULL)rp = format_value("NC");else rp = format_value(rp);  strcat(rp,str);fputs(rp,ft);}}fclose(fp);fclose(ft);getchar();return(0);
}

这个文件打开bom.txt和palce.txt并生成新的place_bom.txt文件,生成的文件内包含了原件的参数,如下所截图:

红色部分就是添加上的。

运行的时候你发现合并俩不大的文件需要十来秒的时间量级,原件执行效率很低的,因为是算法写的时候就“”偷懒”了,没有对BOM文件读到数组进行缓冲,而是每一次搜索都是打开bom.txt文件遍历一次,place.txt有n个条目就要打开n次bom.txt文件。不过10来秒时间咱们用户不在乎,电脑不会说话咱也不知道是否在乎,那就这样吧,无所谓了。

希望这个工具对大家有用,上述几个文件我压缩放在本文尾部的链接。其中bom.txt和place.txt分别是bom文件和坐标文件,palce_bom.txt是运行bom_palce_merge.exe产生的结果。其中bom_place_merge.c就是本文所贴源码。

 链接:https://pan.baidu.com/s/1Wze_eHSBRE4t_TcI31QtMg
提取码:guuo  

用C语言写的合并BOM和坐标文件的小工具相关推荐

  1. 初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助...

    初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助,如果有bug或者更好的优化方案,也请批评与指正,谢谢,代码如下: 1 var fs = require( ...

  2. python写的一个-批量下载股票年报的小工具

    python写的一个-批量下载股票年报的小工具 from urllib import request import requests import os import openpyxl# print( ...

  3. 用lisp语言写一段cad提取坐标代码

    好的,这是用 Lisp 语言写的一段 CAD 提取坐标的代码.这段代码假设已经有了一个名为 "points" 的列表,其中包含了若干个点的坐标(x, y): (defun extr ...

  4. 自己写的 根据编码搜索文件的小工具

    2019独角兽企业重金招聘Python工程师标准>>> 文件.目录搜索的小工具 用正则式限制文件名.关键字.目录 开始是专门为了搜索GBK和UTF8两种编码的文件,现在可以制定多种编 ...

  5. python写一个ssh工具_用Python写个自动ssh登录远程服务器的小工具

    很多时候我们喜欢在自己电脑的终端直接ssh连接Linux服务器,而不喜欢使用那些有UI界面的工具区连接我们的服务器.可是在终端使用ssh我们每次都需要输入账号和密码,这也是一个烦恼,所以我们可以简单的 ...

  6. xlsxwriter写行合并_XlsxWriter写入excel文件

    XlsxWriter写入excel文件 唐黎琦 [摘要] 在日常开发中,我们经常会遇到需要将数据导出为excel的场景,XlsxWriter作为专门写入excel文件的python库,对excel文件 ...

  7. 实用c语言函数源码,C语言编写简单朗读小工具(有源码)

    原标题:C语言编写简单朗读小工具(有源码) 最近不少人在后台留言说学C都是面对枯燥的控制台程序,能不能体现一下C语言的实际用途,今天我们就理论结合实践一把:C语言结合VBS脚本编写一个简单的朗读小工具 ...

  8. c语言案例朗读工具源码,C语言编写简单朗读小工具(有源码)

    原标题:C语言编写简单朗读小工具(有源码) 最近不少人在后台留言说学C都是面对枯燥的控制台程序,能不能体现一下C语言的实际用途,今天我们就理论结合实践一把:C语言结合VBS脚本编写一个简单的朗读小工具 ...

  9. 除了 Python ,这些语言写的机器学习项目也很牛(二)

    2019独角兽企业重金招聘Python工程师标准>>> Python 由于本身的易用优势和强大的工具库储备,成为了在人工智能及其它相关科学领域中最常用的语言之一.尤其是在机器学习,已 ...

最新文章

  1. 怎么使用html及jsp开发,jsp怎么用css
  2. 什么是交换(Swap)与伪交换(Pseudo swap)
  3. 第七讲 一阶常系数线性ODE
  4. openCV鼠标事件实例
  5. c++享元模式flyweight
  6. HTTP 错误 500.22 - Internal Server Error 检测到在集成的托管管道模式下不适用的 ASP.NET 设置。...
  7. java 嵌套类 作用_java 嵌套类的分类、为什么使用嵌套类?
  8. Linux shell的标准输入、输出和错误
  9. POJ 1577 Falling Leaves(二叉查找树)
  10. css3:border-radius圆角边框详解 (变圆 图片)
  11. 苹果,你拿什么勇气来跟 Android 比?
  12. safari windows版本_iPhone 和 Windows 协作的五个技巧
  13. awd赛题的flag是什么意思_记一次AWD自动获取flag并提交
  14. 非官方浙江大学校园网认证客户端开发笔记(一)
  15. 银联支付接口申请开发教程-傲付宝
  16. php模拟post提交 在线,curl post请求 , postman 模拟请求 , 在线测试工具模拟请求...
  17. 解决win7任务栏谷歌浏览器chrome图标丢失、异常空白的问题
  18. bugzilla mysql 配置_Win10 + Bugzilla + Mysql + + Strawberry Perl + perl 模块 + iis安装过程
  19. 智能硬件可能成为网络安全事件新的“爆发点”
  20. Easyrecovery教你Excel表格数据恢复

热门文章

  1. 五、企业架构MySQL数据库服务器主从复制
  2. 阿里巴巴-菜鸟技术招聘JD
  3. Unity开发Pioc详细教程
  4. 计算机技术报告的英语范文,英语课题研究工作报告范文
  5. 汽车行业正在积极的拥抱微信小程序
  6. Unity与IOS内购恢复问题
  7. 处理使用node-gpy时遇到的Can't find msbuild.exe错误
  8. 系统分析师:五、系统配置与性能评价
  9. linux安装软件imagemagick,linux下的ImageMagick安装方法
  10. 大一下学期基于GUI的背单词软件(JAVA版)