亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: 提取數(shù)字 [打印本頁]

作者: beyondlee1    時(shí)間: 2016-07-28 11:26
標(biāo)題: 提取數(shù)字
如下字符串:
錫厚:工藝要求QFP位置:2.5-40um,單點(diǎn)2.0um,平均>=2.5um;;錫條:SN100N(指定);錫面積(pnl):0.155sq/ft(8.52%)";

如何提供 平均>=2.5um中的2.5,
還有0.155sq/ft中的0.155

這幾個(gè)數(shù)字是變化的,如何提?

謝謝
作者: beyondlee1    時(shí)間: 2016-07-28 11:27
還有,數(shù)字不一定有小數(shù)點(diǎn)
作者: sunzhiguolu    時(shí)間: 2016-07-28 12:19
  1. perl -ple '$_=join("\n",m!(?|>=([\d.]+)|([\d.]+)sq/ft)!g)' f
復(fù)制代碼
2.5
0.155

作者: beyondlee1    時(shí)間: 2016-07-28 14:20
感謝,我嘗試把提取的數(shù)字放在數(shù)組里,要怎么改一下?

謝謝~
作者: beyondlee1    時(shí)間: 2016-07-28 14:26
可以了,非常感謝~

如果數(shù)字后面有空格結(jié)果不對,能改一下嗎?
作者: sunzhiguolu    時(shí)間: 2016-07-28 17:25
如果數(shù)字后面有空格結(jié)果不對,能改一下嗎?

請給出示例文本, 不太明白是啥意思.
作者: beyondlee1    時(shí)間: 2016-07-28 18:02
錫厚:工藝要求QFP位置:2.5-40um,單點(diǎn)2.0um,平均>=2.8um;,錫厚內(nèi)部要求控制2.5-40um 錫條(指定):ANCHEN SN100N 錫面積(PNL):0.814sq/ft(11.44%)                                                                                                                                                                                                                                                                                                                                                                                                                                                                              

如上字符串,需要條件判斷一下 :

1, 如果 沒有 平均>=2.8um的2.8,則取值2.5-40um中的2.5;
2,把每條字符串的提取結(jié)果放在一個(gè)數(shù)組里。

空格我已經(jīng)用軟件清空了,

請幫忙一下,謝謝!



作者: sunzhiguolu    時(shí)間: 2016-07-28 18:43
  1. perl -nle 'BEGIN{$r=qr/([\d.]+)/}{@a=/>=$r/g?$1:/$r/g;print "$a[0]\n",m~${r}sq/ft~g;}' f
復(fù)制代碼
2.8
0.814

作者: sunzhiguolu    時(shí)間: 2016-07-28 18:59
試下,
  1. perl -nle 'BEGIN{$r=qr/([\d.]+)/}{$a[$.]=[/>=$r/g?$1:/$r/g];push(@{$a[$.]},m~${r}sq/ft~g)}END{print "@{$a[$_]}" for 1..$#a}' f
復(fù)制代碼
2.8 0.814

作者: beyondlee1    時(shí)間: 2016-07-28 19:13
錫厚:2um(min);錫面積(pnl):0.6sq/ft(13.6%)

在這個(gè)字符串中,只有一個(gè)數(shù)據(jù)0.6,為何 ?

還有,哥,麻煩你當(dāng)一個(gè)腳本寫,我好移植;
你寫一行,我看不大懂,不方便修改!

感謝感謝!
作者: beyondlee1    時(shí)間: 2016-07-28 19:18
寫一個(gè)函數(shù)行嗎?我到時(shí)傳入字符串,就出結(jié)果了,謝謝
作者: sunzhiguolu    時(shí)間: 2016-07-28 19:26
本帖最后由 sunzhiguolu 于 2016-07-28 19:28 編輯

回復(fù) 10# beyondlee1
錫厚:工藝要求QFP位置:2.5-40um,單點(diǎn)2.0um,平均>=2.5um;;錫條:SN100N(指定);錫面積(pnl):0.155sq/ft(8.52%)";
錫厚:工藝要求QFP位置:2.5-40um,單點(diǎn)2.0um,平均>=2.8um;,錫厚內(nèi)部要求控制2.5-40um 錫條(指定):ANCHEN SN100N 錫面積(PNL):0.814sq/ft(11.44%)   
錫厚:2um(min);錫面積(pnl):0.6sq/ft(13.6%)

這是你 3 次提供的示例文本.
假設(shè)記錄中沒有 平均>=2.8um 這樣的串, 那么就提取 錫厚內(nèi)部要求控制2.5-40um 錫條(指定),
有一點(diǎn)我不太明白, 當(dāng)記錄中沒有包含 平均>=2.8um 這樣的串, 需要提取的那個(gè) 錫厚內(nèi)部要求控制2.5-40um 錫條(指定) 中的 那個(gè)數(shù)值 有什么規(guī)律嗎?
   
作者: beyondlee1    時(shí)間: 2016-07-28 19:52

1,如果有類似 “2.5-40um,和平均>=2.5um,”這樣的字串,只取 >=2.5um中的2.5數(shù)字;
  否則只取類似2.5-40um中的數(shù)字2.5(即最小值);
  "0.155sq/ft(8.52%)",這個(gè)類似字串一般來說都會(huì)有

2,錫厚:2um(min);錫面積(pnl):0.6sq/ft(13.6%),這個(gè)字串出現(xiàn)的情況也有,只取2um中的2,和0.6就好了。

謝謝!~最好能寫個(gè)函數(shù),感謝~

作者: sunzhiguolu    時(shí)間: 2016-07-28 19:56
本帖最后由 sunzhiguolu 于 2016-07-28 19:56 編輯

我的意思是, 當(dāng)記錄中沒有包含 平均>=2.8um 這樣的串, 需要提取的那個(gè) 錫厚內(nèi)部要求控制2.5-40um 錫條(指定) 中的 數(shù)值 2.5 所在記錄中的位置有沒有
什么規(guī)律, 比如一行記錄中除了沒有 平均>=2.8um 卻包含多個(gè)數(shù)值, 進(jìn)行數(shù)值提取的時(shí)候, 如何取舍? 不知道我說明白沒有...
作者: beyondlee1    時(shí)間: 2016-07-28 20:03
位置沒有固定的,也沒有規(guī)律。

但如:2.5-40um,單點(diǎn)2.0um,平均>=2.5um;;錫條:SN100N(指定);錫面積(pnl):0.155sq/ft(8.52%)";

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

可不可以判斷2.5-40中的"-"符號,和">="符號,來取值?
作者: sunzhiguolu    時(shí)間: 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;

復(fù)制代碼

作者: beyondlee1    時(shí)間: 2016-07-28 20:27

my $str="錫厚:工藝要求QFP位置:2.5-40um,單點(diǎn)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;

是這樣調(diào)用?感覺一死循環(huán),一直在運(yùn)行
作者: sunzhiguolu    時(shí)間: 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,單點(diǎn)2.0um,平均>=2.6u';;錫條:SN100N(指定);錫面積(pnl):0.155sq/ft(8.52%)";
  11. my $ra = get_values ($str);
  12. print "@$ra\n";
復(fù)制代碼
perl abc.pl
--------------------------------
2.6 0.155
作者: beyondlee1    時(shí)間: 2016-07-28 21:21
2.5-40um,這里你取值是后面的最大數(shù)40 ?

就這個(gè),其它還沒有發(fā)現(xiàn)問題
作者: sunzhiguolu    時(shí)間: 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,單點(diǎn)2.0um,平均>=2.6u';;錫條:SN100N(指定);錫面積(pnl):0.155sq/ft(8.52%)";
  11. my $ra = get_values ($str);
  12. print "@$ra\n";
復(fù)制代碼

作者: beyondlee1    時(shí)間: 2016-07-28 21:31
可以了,沒有問題。

非常感謝,我學(xué)PERL沒多久,感覺你的代碼太深?yuàn)W了。有一些找資料都沒有找到解釋

謝謝~  有什么推薦的書看嗎?
作者: sunzhiguolu    時(shí)間: 2016-07-28 22:28
Perl 語言入門, 這是我現(xiàn)在正在學(xué)習(xí)的入門書籍.
作者: beyondlee1    時(shí)間: 2016-07-29 13:53
有新情況,看看大俠有沒有時(shí)間看看

$str="錫厚:表面錫厚1-40um,孔內(nèi)錫厚最小7.5um,孔拐角處錫厚最小1um;錫面積(pnl):a:0.557sq/ft(13%),b:0.279sq/ft(13%);鉆咀為0.4和0.5mm的via孔接受錫珠入孔";

之前的要求不變,但出新變化,就是出現(xiàn)a:0.557sq/ft(13%),b:0.279sq/ft(13%),要求將其中的0.557+0.279,謝謝
現(xiàn)在只提取到0.557

如果出現(xiàn)這種情況,我要這兩個(gè)數(shù)的相加值.

感謝!
作者: 104359176    時(shí)間: 2016-07-29 14:12


哥,麻煩你當(dāng)一個(gè)腳本寫,我好移植.
作者: sunzhiguolu    時(shí)間: 2016-07-29 14:42
回復(fù) 23# beyondlee1
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

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

  10. my $str = "錫厚:工藝要求QFP位置:2.5-40um,單點(diǎn)2.0um,平均>=2.6u';;錫條:SN100N(指定);錫面積(pnl):0.155sq/ft(8.52%)";
  11. $str = "錫厚:表面錫厚1-40um,孔內(nèi)錫厚最小7.5um,孔拐角處錫厚最小1um;錫面積(pnl):a:0.557sq/ft(13%),b:0.279sq/ft(13%);鉆咀為0.4和0.5mm的via孔接受錫珠入孔";
  12. my $ra = get_values ($str);
  13. print "@$ra\n";
復(fù)制代碼
1 0.836

   
作者: beyondlee1    時(shí)間: 2016-07-29 15:19
可以了,謝謝~!

但有新情況,如 $str1="無鉛錫型號:SN100CL噴錫厚度:2-36um噴錫面積:0.11ft/sq(set)";

直接提取100,后面的忽略了。

2和0.11?
作者: sunzhiguolu    時(shí)間: 2016-07-29 15:54
回復(fù) 26# beyondlee1
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. sub get_values{
  5.     local $_ = pop;
  6.     my ($v1, $v2);
  7.     ($v1) = />=([\d.]+)/ ? $1 : do {/錫厚/g and /([\d.]+)/g};
  8.     $v2 += $1 while (m~\b([\d.]+)(?:sq/ft|ft/sq)~g);
  9.     [$v1, $v2];
  10. }

  11. my $str = "錫厚:工藝要求QFP位置:2.5-40um,單點(diǎn)2.0um,平均>=2.6u';;錫條:SN100N(指定);錫面積(pnl):0.155sq/ft(8.52%)";
  12. $str = "錫厚:表面錫厚1-40um,孔內(nèi)錫厚最小7.5um,孔拐角處錫厚最小1um;錫面積(pnl):a:0.557sq/ft(13%),b:0.279sq/ft(13%);鉆咀為0.4和0.5mm的via孔接受錫珠入孔";
  13. $str = "無鉛錫型號:SN100CL噴錫厚度:2-36um噴錫面積:0.11ft/sq(set)";
  14. my $ra = get_values ($str);
  15. print "@$ra\n";
復(fù)制代碼
perl abc.pl
-------------------------------------------------
2 0.11

   
作者: beyondlee1    時(shí)間: 2016-07-29 16:20
$str="廠內(nèi)管控:錫厚:1-40um 噴錫面積(PNL):0.378spft(6.7%)";
my $ra = get_values ($str);
print "@$ra\n";

出現(xiàn)此錯(cuò)誤:
Use of uninitialized value in join or string at ef3.pl line 18.

有空幫忙看看,謝謝~

作者: beyondlee1    時(shí)間: 2016-07-29 16:38
知道原因了,謝謝~,少量的數(shù)據(jù)我手動(dòng)查看一下吧,太亂了,少量一數(shù)據(jù)完全沒有規(guī)律。

謝謝~
作者: sunzhiguolu    時(shí)間: 2016-07-29 17:54
本帖最后由 sunzhiguolu 于 2016-07-29 17:55 編輯
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. sub get_values{
  5.     local $_ = pop;
  6.     my ($v1, $v2);
  7.     ($v1) = />=([\d.]+)/ ? $1 : do {/錫厚/g and /([\d.]+)/g};
  8.     $v2 += $1 while (m~\b([\d.]+)(?:sq/ft|ft/sq|spft)~g);
  9.     [$v1, $v2];
  10. }

  11. my @aData;
  12. $aData[0] = "錫厚:工藝要求QFP位置:2.5-40um,單點(diǎn)2.0um,平均>=2.6u';;錫條:SN100N(指定);錫面積(pnl):0.155sq/ft(8.52%)";
  13. $aData[1] = "錫厚:表面錫厚1-40um,孔內(nèi)錫厚最小7.5um,孔拐角處錫厚最小1um;錫面積(pnl):a:0.557sq/ft(13%),b:0.279sq/ft(13%);鉆咀為0.4和0.5mm的via孔接受錫珠入孔";
  14. $aData[2] = "無鉛錫型號:SN100CL噴錫厚度:2-36um噴錫面積:0.11ft/sq(set)";
  15. $aData[3] = "廠內(nèi)管控:錫厚:1-40um 噴錫面積(PNL):0.378spft(6.7%)";

  16. print "@{get_values($_)}\n" for @aData;
復(fù)制代碼
perl abc.pl
-------------------------------------------------
2.6 0.155
1 0.836
2 0.11
1 0.378

作者: sunzhiguolu    時(shí)間: 2016-07-29 17:57
如果你的文本, 一點(diǎn)規(guī)律都沒有. 那么所謂的文本處理只能是窮舉所有變化, 與你手工處理文本基本沒啥區(qū)別了.




歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2