使用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', ...
随机推荐
- C++ protected访问权限思考
看了云风关于protected的思考,自己也总结了下. C++的访问权限有三个 private.protected.public. 如果不包括继承的话,比较好理解,可以分为类外和类内两部分.类外不能访 ...
- KoaHub.JS基于Node.js开发的mysql的node.js驱动程序代码
mysql A node.js driver for mysql. It is written in JavaScript, does not require compiling, and is 10 ...
- 1081: [SCOI2005]超级格雷码
1081: [SCOI2005]超级格雷码 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 301 Solved: 159[Submit][Statu ...
- CoreGraphics--饼状图
//传入数据,饼状图 pieChartView.dataArr = @[@20,@50,@80,@70,@40]; - (void)drawRect:(CGRect)rect { // Drawing ...
- 通过Servlet生成验证码图片
原文出自:http://www.cnblogs.com/xdp-gacl/p/3798190.html 一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类, ...
- 双系统删除Ubuntu后出现grub界面而无法正常启动Windows系统的解决方法
第一次安装双系统的时候由于不怎么会弄,设置了ubuntu引导windows,这种方法是非常不推荐的,因为当ubuntu出现问题或者是当你不再使用ubuntu的时候,删除ubuntu就会成为一个很麻烦的 ...
- Office 365 开发概览系列文章和教程
Office 365 开发概览系列文章和教程 原文于2017年2月26日首发于LinkedIn,请参考链接 引子 之前我在Office 365技术社群(O萌)中跟大家提到,3月初适逢Visual St ...
- 如何修改SVN客户端中保存的密码
本文主要讲述Linux命令行下怎么修改已经保存的客户端密码: 第一步,删除 subvision文件: rm -rf ~/.subvision 第二步:执行任意需要访问服务器的svn命令,会提示是否永久 ...
- iOS开发之数据存储之XML属性列表(plist)归档
1.概述 “归档”意思是持久化存储数据.plist文件是一种XML格式的文件,拓展名为plist.如果对象是NSString.NSDictionary.NSArray.NSData.NSNumber等 ...
- nodejs npm常用命令 转
npm是一个node包管理和分发工具,已经成为了非官方的发布node模块(包)的标准.有了npm,可以很快的找到特定服务要使用的包,进行下载.安装以及管理已经安装的包. 1.npm install m ...



