使用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', ...
随机推荐
- Summary Ranges leetcode
Given a sorted integer array without duplicates, return the summary of its ranges. For example, give ...
- SQL server 数据库——数学函数、字符串函数、转换函数、时间日期函数
数学函数.字符串函数.转换函数.时间日期函数 1.数学函数 ceiling()--取上限 select ceiling(oil) as 油耗上限 from car floor()--取下限 sele ...
- KoaHub平台基于Node.js开发的Koa的模板系统handlebars插件代码详情
koahub-handlebars koahub-handlebars koahub handlebars templates Installation $ npm install koahub-ha ...
- Redis-port安装使用实现redis迁移codis,以及简单redis pipe实现将mysql迁移redis
(0)Redis-port原理: 首先是看到下面这篇文档开始研究的redis-port http://www.itnpc.com/news/web/146085373656602.html 简要截图 ...
- 一段获取app性能指标的py脚本
#coding:utf-8 import os import timeimport datetimeimport subprocess ActivityManager = 'homepage.Main ...
- 2017年你需要一个VPN
还有29天就2017年了,今天跟同事还在讨论这个问题,2016你都做了些什么事情?2017你有什么计划和期待?有空我们一起来聊聊,今天我们就先来聊聊VPN. 记得2016年11月初的时候,我写过一篇文 ...
- Java学习笔记 11/15:一个简单的JAVA例子
首先来看一个简单的 Java 程序. 来看下面这个程序,试试看是否看得出它是在做哪些事情! 范例:TestJava.java // TestJava.java,java 的简单范例 public ...
- [笔记]LibSVM源码剖析(java版)
之前学习了SVM的原理(见http://www.cnblogs.com/bentuwuying/p/6444249.html),以及SMO算法的理论基础(见http://www.cnblogs.com ...
- web从入门开始(3)-----第一个网页
<meta>:是进行网页格式初始化的命令,确定网页使用的文本格式和编码格式 Background:中的路径,必须为相对路径 l HTML文本标记 <b>HTM文本</b ...
- 关于数组和集合的冒泡排序中容易出现的IndexOutOfBoundsException
数组只能存错一种相同的数据类型,集合只能存储引用数据类型(用泛型),集合的底层就是一个可变的数组. 数组的冒泡排序: public static void arrayMaxPaiXu(int[] ar ...



