免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: beyondlee1
打印 上一主题 下一主题

提取数字 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2016-07-28 19:18 |只看该作者
写一个函数行吗?我到时传入字符串,就出结果了,谢谢

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
12 [报告]
发表于 2016-07-28 19:26 |只看该作者
本帖最后由 sunzhiguolu 于 2016-07-28 19:28 编辑

回复 10# beyondlee1
锡厚:工艺要求QFP位置:2.5-40um,单点2.0um,平均>=2.5um;;锡条:SN100N(指定);锡面积(pnl):0.155sq/ft(8.52%)";
锡厚:工艺要求QFP位置:2.5-40um,单点2.0um,平均>=2.8um;,锡厚内部要求控制2.5-40um 锡条(指定):ANCHEN SN100N 锡面积(PNL):0.814sq/ft(11.44%)   
锡厚:2um(min);锡面积(pnl):0.6sq/ft(13.6%)

这是你 3 次提供的示例文本.
假设记录中没有 平均>=2.8um 这样的串, 那么就提取 锡厚内部要求控制2.5-40um 锡条(指定),
有一点我不太明白, 当记录中没有包含 平均>=2.8um 这样的串, 需要提取的那个 锡厚内部要求控制2.5-40um 锡条(指定) 中的 那个数值 有什么规律吗?
   

论坛徽章:
0
13 [报告]
发表于 2016-07-28 19:52 |只看该作者

1,如果有类似 “2.5-40um,和平均>=2.5um,”这样的字串,只取 >=2.5um中的2.5数字;
  否则只取类似2.5-40um中的数字2.5(即最小值);
  "0.155sq/ft(8.52%)",这个类似字串一般来说都会有

2,锡厚:2um(min);锡面积(pnl):0.6sq/ft(13.6%),这个字串出现的情况也有,只取2um中的2,和0.6就好了。

谢谢!~最好能写个函数,感谢~

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
14 [报告]
发表于 2016-07-28 19:56 |只看该作者
本帖最后由 sunzhiguolu 于 2016-07-28 19:56 编辑

我的意思是, 当记录中没有包含 平均>=2.8um 这样的串, 需要提取的那个 锡厚内部要求控制2.5-40um 锡条(指定) 中的 数值 2.5 所在记录中的位置有没有
什么规律, 比如一行记录中除了没有 平均>=2.8um 却包含多个数值, 进行数值提取的时候, 如何取舍? 不知道我说明白没有...

论坛徽章:
0
15 [报告]
发表于 2016-07-28 20:03 |只看该作者
位置没有固定的,也没有规律。

但如:2.5-40um,单点2.0um,平均>=2.5um;;锡条:SN100N(指定);锡面积(pnl):0.155sq/ft(8.52%)";

类似"2.5-40um" 一般来在前 ," 平均>=2.5um "在中间,"0.155sq/ft(8.52%)"在最后。

可不可以判断2.5-40中的"-"符号,和">="符号,来取值?

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
16 [报告]
发表于 2016-07-28 20:13 |只看该作者
试下,

  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. sub get_values{
  5.     local $_ = pop;
  6.     my @aData = />=([\d.]+)/ ? $1 : /([\d.]+)um/;
  7.     push (@aData, m~([\d.]+)sq/ft~);
  8.     \@aData;
  9. }

  10. my @aData;
  11. push (@aData, get_values ($_)) while (<>);
  12. print "@$_\n" for @aData;

复制代码

论坛徽章:
0
17 [报告]
发表于 2016-07-28 20:27 |只看该作者

my $str="锡厚:工艺要求QFP位置:2.5-40um,单点2.0um,平均>=2.6u';;锡条:SN100N(指定);锡面积(pnl):0.155sq/ft(8.52%)";

sub get_values{
    local $_ = pop;
    my @aData = />=([\d.]+)/ ? $1 : /([\d.]+)um/;
    push (@aData, m~([\d.]+)sq/ft~);
    \@aData;
}

my @aData;

push (@aData, get_values ($str)) while (<>);
print "@$_\n" for @aData;

是这样调用?感觉一死循环,一直在运行

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
18 [报告]
发表于 2016-07-28 20:46 |只看该作者
本帖最后由 sunzhiguolu 于 2016-07-28 20:47 编辑

如果是这样的话, 这样试下:
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. sub get_values{
  5.     local $_ = pop;
  6.     my @aData = />=([\d.]+)/ ? $1 : /([\d.]+)um/;
  7.     push (@aData, m~([\d.]+)sq/ft~);
  8.     \@aData;
  9. }

  10. my $str = "锡厚:工艺要求QFP位置:2.5-40um,单点2.0um,平均>=2.6u';;锡条:SN100N(指定);锡面积(pnl):0.155sq/ft(8.52%)";
  11. my $ra = get_values ($str);
  12. print "@$ra\n";
复制代码
perl abc.pl
--------------------------------
2.6 0.155

论坛徽章:
0
19 [报告]
发表于 2016-07-28 21:21 |只看该作者
2.5-40um,这里你取值是后面的最大数40 ?

就这个,其它还没有发现问题

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
20 [报告]
发表于 2016-07-28 21:27 |只看该作者
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. sub get_values{
  5.     local $_ = pop;
  6.     my @aData = />=([\d.]+)/ ? $1 : /([\d.]+)/;
  7.     push (@aData, m~([\d.]+)sq/ft~);
  8.     \@aData;
  9. }

  10. my $str = "锡厚:工艺要求QFP位置:2.5-40um,单点2.0um,平均>=2.6u';;锡条:SN100N(指定);锡面积(pnl):0.155sq/ft(8.52%)";
  11. my $ra = get_values ($str);
  12. print "@$ra\n";
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP