使用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的更多相关文章

  1. Perl读取Excel中的数据

    #!usr/bin/perl -W use strict; use Spreadsheet::ParseExcel;#PERL的Spreadsheet::ParseExcel模块支持Excel的读操作 ...

  2. 如何用Perl对Excel的数据进行提取并分析

    巡检类工作经常会出具日报,最近在原有日报的基础上又新增了一个表的数据量统计日报,主要是针对数据库中使用较频繁,数据量又较大的31张表.该日报有两个sheet组成,第一个sheet是数据填写,第二个sh ...

  3. 通过正则表达式提取excel特定列中含有关键字的所有行数据

    在 Excel 中打开需要提取数据excel文件,使用 Alt+F11 快捷键打开 VBA 项目窗口,在左侧的工作表名称上点右键,选择查看代码,即可出现右侧的编辑代码窗口(如下图) 在代码窗口中输入以 ...

  4. 从输出日志中提取接口的入参和返回做为用例导入到excel中

    1  背景 接口用例已经在项目中的yml文件中编写,但是yml文件不能做为交付文档用,本文对工作中从接口输出日志中提取用例信息,并导入到excel文件中做了总些 2  工具 idea,notepad+ ...

  5. 如何在Excel中提取小数点后面的数字?

    Excel中,如果某个单元格中包含一个带小数,要用公式提取该数值小数点后面的数字,例如A1单元格中包含一个数值“59178.68”,在B1单元格中输入下面的公式: =RIGHT(A1,LEN(A1)- ...

  6. Excel中数字和字母混合时提取某些字符进行排序

    在excel中,当数字和字母混合在一起的时候,会出现排序错误的情况 比如下图的这种情况.我们希望的是2排在1后面,但是实际上10却排在了1的后面.这时候我们就需要把字符串中的数字提取出来进行排序 第一 ...

  7. 使用perl读取Excel

    使用perl读取Excel 环境 windows 7 ActiveState Perl Win32::OLE[perl package] 基本功能 循环处理多个sheet 读取Excel单元,提取in ...

  8. 用python在excel中读取与生成随机数写入excel中

    今天是我第一次发博客,就关于python在excel中的应用作为我的第一篇吧. 具体要求是:在一份已知的excel表格中读取学生的学号与姓名,再将这些数据放到新的excel表中的第一列与第二列,最后再 ...

  9. perl 读取Excel写入txt 乱码

    用perl读出excel的内容(中文),然后输出在txt中乱码,但是打印在控制台正常. 解决办法: use Encode qw/from_to/; from_to($value, 'gb2312', ...

随机推荐

  1. 通过 Composer Github Packagist制作发布共享PHP包

    参考来源: https://laravel-china.org/topics/1002 https://rivsen.github.io/post/how-to-publish-package-to- ...

  2. 3522: [Poi2014]Hotel

    3522: [Poi2014]Hotel Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 253  Solved: 117[Submit][Status ...

  3. HTML5学习笔记<六>: HTML5框架, 背景和实体

    HTML5框架 1. 框架标签(frame): 框架对于页面的设计有着很大的作用 2. 框架集标签(<frameset>): 框架集标签定义如何将窗口分割为框架 每个frameset定义一 ...

  4. 手把手教你怎么搭建angular+gulp的项目(一)

    大多时候,我们要学习一个新东西,不是不肯去学,而是不知道该如何开始.比如学angular,我要怎么开始学?怎么应用到自己项目中?这篇文章就是我根据自己边学习边应用,构建一个项目的切身体会,来讲下怎么开 ...

  5. Bootstrap 组件之 Navbar

    一.简介 Navbar 指导航条,它在移动设备上显示为折叠状态,在宽屏幕上水平展开.这里 是一个线上例子. 响应式导航条依赖 collapse 插件,定制 Bootstrap 时务必要包含. {设备的 ...

  6. Tcl与Design Compiler (二)——DC综合与Tcl语法结构概述

    1.逻辑综合的概述 synthesis = translation + logic optimization + gate mapping . DC工作流程主要分为这三步 Translation : ...

  7. x战警 天启高清完整版下载

    天启出生于埃及第一王朝,是地球上最古老.最强大的变种人沙巴泊,曾拥有无数信众,但后来遭人背叛,被人活埋.几千年后,强大无匹而且永生不朽的天启从数千年的深埋中获释,愤怒的他发现同类不再被视为神祇,他对人 ...

  8. web works importScripts

    html: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <tit ...

  9. TFS发布计划发送到钉钉消息群

    由于工作中需要用到钉钉,每天都要和钉钉打交道:上下班打卡.出差请假流程.各种工作讨论组,不一而足,工作已然和钉钉绑在了一起,难怪有广告词: 微信是一个生活方式,钉钉是一个工作方式. 我们是钉钉机器人内 ...

  10. Alamofire源码解读系列(十)之序列化(ResponseSerialization)

    本篇主要讲解Alamofire中如何把服务器返回的数据序列化 前言 和前边的文章不同, 在这一篇中,我想从程序的设计层次上解读ResponseSerialization这个文件.更直观的去探讨该功能是 ...