使用Perl提取Excel中的IO_MUX
使用Perl提取Excel中的IO_MUX
关键问题
- 提取数据
- 格式化输出
- 循环嵌套
- 数据结构构建
- 坐标映射,逆向提取关键字
描述
在IC集成中,我们使用Excel表格规划设计的IC引脚功能映射需要转化到Verilog层次,这个过程耗时耗力,但其中有一些规律,可以通过Perl将其格式化提取出部分可用的信息,应用得当可以减小出错的概率。
编程思路
输入映射
数据特点
同类引脚有多个通道,同一个引脚可能在不同的行列出现,即出现多次,唯一的是引脚的坐标(行列位置),所以我们可以构建哈希数组结构,哈希的键值为引同类引脚名,数组值为键值的坐标。
流程图
思路 将引脚使用坐标表示,在将坐标映射到P[A-Z]和AF[0-15],使用正则表达式处理映射字符。
映射部分代码
#################################################
# 统计出现次数
#################################################
foreach $item (@ip_name) {
$ip_channal{$item} += 1;
}
#foreach $item (keys %ip_channal) { #遍历输出出现次数,debug显示使用
# print "$item was seen $ip_channal{$item} times.\n";
#}
foreach $item (keys %ip_channal) { #清空次数值values
$ip_channal{$item} = "";
}
#print "\n\n";
#################################################
# 遍历得到哈希键值的值:哈希数组
#################################################
foreach $key (keys %ip_channal)
{
my (@array);
for my $row ( $row_min .. $row_max ) {
for my $col ( $col_min .. $col_max ) {
my $cell = $worksheet->get_cell( $row, $col );
next unless $cell;
if(($cell->value() eq ""))
{
next;
}
if(($cell->value() eq "-"))
{
next;
}
$_ = $cell->value();
if(/\b$key\b/i)
{
#格式化行列位置为4位数字(行列的位数格式化,便于后续处理)
my $rowtmpfmt=(sprintf "%03d", $row);
my $coltmpfmt=(sprintf "%03d", $col);
push(@array,$rowtmpfmt.$coltmpfmt);
}
}
}
$ip_channal{$key} = \@array;
}
#哈希数组,显示行列坐标位置,debug显示使用
foreach $item (keys %ip_channal) {
print "$item = @{$ip_channal{$item}}\n";
}
print "\n\n";
#################################################
# 解析数据(%ip_channal/%px/%afx/),格式化输出 映射
#################################################
foreach my $ip_key (sort keys %ip_channal) {
my (@fmtouts);
foreach my $ip_position (@{$ip_channal{$ip_key}}){
my ($out);
foreach my $ip_px (sort keys %px){
my $pretmp = substr($ip_position,0,3); #使用substr得到前三位字符串
if($pretmp eq $px{$ip_px})
{
$out = $ip_px;
}
}
foreach my $ip_afx (sort keys %afx){
my $posttmp = substr($ip_position,3,3); #使用substr得到后三位字符串
if($posttmp eq $afx{$ip_afx})
{
$out = $out.$ip_afx;
}
}
push(@fmtouts,$out);
}
#print "@fmtouts\n";
输出映射
数据特点
输出是处理P[A-Z]一行的数据,数据结构相对输入较为简单,只需构建一行中的引脚的哈希结构进行映射即可。
流程图
思路 将引脚使用坐标表示,在将坐标映射到P[A-Z]和AF[0-15],使用正则表达式处理映射字符。
数据映射部分代码
#################################################
# 解析数据(%px/%afx/),格式化输出
#################################################
foreach my $px_key (sort keys %px) {
my %ip_channal;
my $row = $px{$px_key}; #定义PX所在行,循环得到IP名称。注意,计数从0开始
#注意手动设置AFx的范围
for my $searchcol ( $af0_namecol .. ($af0_namecol+$afx_rang) ) {
my $cell = $worksheet->get_cell( $row, $searchcol );
next unless $cell;
if(!defined $cell->value())
{
next;
}
$_ = $cell->value();
#if(/Y\+|Y\-|X\+|BKIN|\_IN|\_RX|\_ETR/) #排除Y+/X+/BKIN/_IN/_RX
if(/BKIN|\_IN|\_RX|\_ETR/) #排除Y+/X+/BKIN/_IN/_RX
{
next;
}
if(/\w+/)
{
#格式化行列位置为3位数字(行列的位数格式化,便于后续处理)
my $coltmpfmt=(sprintf "%03d", $searchcol);
$ip_channal{$cell->value()} = $coltmpfmt;
}
}
print "row = $row\n";
foreach my $ip_name (sort keys %ip_channal) {
print "$ip_name = $ip_channal{$ip_name}\n";
}
my (@fmtouts);
foreach my $ip_key (sort keys %ip_channal) {
foreach my $ip_afx (sort keys %afx){
my $out;
if($ip_channal{$ip_key} eq $afx{$ip_afx})
{
$out = $ip_key.$ip_afx.$px_key; #组合映射出单元的行列位置
#print "$out\t";
}
else
{
next; #值为空则执行下一次循环
}
push(@fmtouts,$out);
}
}
print "fmtouts = @fmtouts\n\n";
使用Perl提取Excel中的IO_MUX的更多相关文章
- Perl读取Excel中的数据
#!usr/bin/perl -W use strict; use Spreadsheet::ParseExcel;#PERL的Spreadsheet::ParseExcel模块支持Excel的读操作 ...
- 如何用Perl对Excel的数据进行提取并分析
巡检类工作经常会出具日报,最近在原有日报的基础上又新增了一个表的数据量统计日报,主要是针对数据库中使用较频繁,数据量又较大的31张表.该日报有两个sheet组成,第一个sheet是数据填写,第二个sh ...
- 通过正则表达式提取excel特定列中含有关键字的所有行数据
在 Excel 中打开需要提取数据excel文件,使用 Alt+F11 快捷键打开 VBA 项目窗口,在左侧的工作表名称上点右键,选择查看代码,即可出现右侧的编辑代码窗口(如下图) 在代码窗口中输入以 ...
- 从输出日志中提取接口的入参和返回做为用例导入到excel中
1 背景 接口用例已经在项目中的yml文件中编写,但是yml文件不能做为交付文档用,本文对工作中从接口输出日志中提取用例信息,并导入到excel文件中做了总些 2 工具 idea,notepad+ ...
- 如何在Excel中提取小数点后面的数字?
Excel中,如果某个单元格中包含一个带小数,要用公式提取该数值小数点后面的数字,例如A1单元格中包含一个数值“59178.68”,在B1单元格中输入下面的公式: =RIGHT(A1,LEN(A1)- ...
- Excel中数字和字母混合时提取某些字符进行排序
在excel中,当数字和字母混合在一起的时候,会出现排序错误的情况 比如下图的这种情况.我们希望的是2排在1后面,但是实际上10却排在了1的后面.这时候我们就需要把字符串中的数字提取出来进行排序 第一 ...
- 使用perl读取Excel
使用perl读取Excel 环境 windows 7 ActiveState Perl Win32::OLE[perl package] 基本功能 循环处理多个sheet 读取Excel单元,提取in ...
- 用python在excel中读取与生成随机数写入excel中
今天是我第一次发博客,就关于python在excel中的应用作为我的第一篇吧. 具体要求是:在一份已知的excel表格中读取学生的学号与姓名,再将这些数据放到新的excel表中的第一列与第二列,最后再 ...
- perl 读取Excel写入txt 乱码
用perl读出excel的内容(中文),然后输出在txt中乱码,但是打印在控制台正常. 解决办法: use Encode qw/from_to/; from_to($value, 'gb2312', ...
随机推荐
- JS组件系列——又一款MVVM组件:Vue(二:构建自己的Vue组件)
前言:转眼距离上篇 JS组件系列——又一款MVVM组件:Vue(一:30分钟搞定前端增删改查) 已有好几个月了,今天打算将它捡起来,发现好久不用,Vue相关技术点都生疏不少.经过这几个月的时间,Vue ...
- 4001: [TJOI2015]概率论
4001: [TJOI2015]概率论 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 262 Solved: 108[Submit][Status] ...
- java异常详解
java异常需要弄清楚如下几个问题: 1.java异常的层次结构 2.搞清楚问题:java中异常抛出后代码还会继续执行吗? 答:该问题可以参考该博文,完美的回答了我的疑惑:http://www.cnb ...
- 简易漫画网站搭建-漫画喵Server版
小喵的唠叨话:寒假的时候写了一个漫画爬虫,爬取了好几个漫画,不过一直没有找到合适的漫画阅读的工具.因此最近就试着自己写一个漫画的网站,放在公网上或者局域网里,这样就能随时随地用手机.Pad看漫画了. ...
- [Spark] - SparkCore程序优化总结
http://spark.apache.org/docs/1.6.1/tuning.html1) 代码优化 a. 对于多次使用的RDD,进行数据持久化操作(eg: cache.persist) b. ...
- 关于Maven的安装及初步使用
关于Maven的初步使用 1. 下载: 进入http://maven.apache.org/download.cgi下载 Maven 3.3.1 2. 将压缩包解压到自己的硬盘中,最好放在某个盘 ...
- (102, "Incorrect syntax near '-'.DB-Lib error message 102, severity 15:\nGen
python 调用MSSQL存储过程,运行时报错 sql="exec spname %s,%s"%(param1,param2) 这是错误的调用存储过程的语句,param1和par ...
- OAuth2.0 知多少
1. 引言 周末逛简书,看了一篇写的极好的文章,点击大红心点赞,就直接给我跳转到登录界面了,原来点赞是需要登录的. 可是没有我并没有简书账号,一直使用的QQ的集成登录.下面有一排社交登录按钮,我们可以 ...
- 菜鸟Scrum敏捷实践系列(三)用户故事的组织---功能架构的规划
菜鸟Scrum敏捷实践系列索引 菜鸟Scrum敏捷实践系列(一)用户故事概念 菜鸟Scrum敏捷实践系列(二)用户故事验收 菜鸟Scrum敏捷实践系列(三)用户故事的组织---功能架构的规划 采用Sc ...
- 浅谈!SQL语句中LEFT JOIN ON WHERE和LEFT JOIN ON AND的区别
今天的工作学习之路是一个数据库的小知识,当时没有区分出所以然,特此记录分享一下子. 众所周知,数据库的表都是单独存在的,但是当我们进行联合查询(多表查询)时,我们获得数据库返回的值时就好像在一张表里一 ...



