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

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 2807 | 回復(fù): 10
打印 上一主題 下一主題

關(guān)于文件內(nèi)字符替換的問題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2012-10-10 16:56 |只看該作者 |倒序瀏覽
最近在處理數(shù)據(jù)的時候遇到一個問題,關(guān)于匹配替換的。
text1.txt


1432;3551;51135;5518;5519;5520;5522;55844;5970
1432;3551;51701;5608;9020;9064
1432;3551;5595;5601;5602;5608
1432;3551;5595;5601;5602;5970;8767
1432;3551;5608;7186;9020;9064
1432;3659;5610;5970;9451
1432;3659;5610;673;9451
1432;3725;5595;5601;5602


text2.txt文件里面只有兩列,分別是數(shù)字對應(yīng)字符,例如

1432 adec
2778 lkhj
2799 snjkl
2811 sdf
2821 pop
2885 myc
2977 myb
3033 cde
.....

現(xiàn)在想把text1.txt中的字符匹配到text2.txt中,然后輸出到text3.txt中。


之前也做過匹配替換的
但是對于多次出現(xiàn)的字符“1432",總是自動去重。這樣得不到我想要的結(jié)果。

論壇徽章:
78
雙子座
日期:2013-10-15 08:50:09天秤座
日期:2013-10-16 18:02:08白羊座
日期:2013-10-18 13:35:33天蝎座
日期:2013-10-18 13:37:06獅子座
日期:2013-10-18 13:40:31雙子座
日期:2013-10-22 13:58:42戌狗
日期:2013-10-22 18:50:04CU十二周年紀(jì)念徽章
日期:2013-10-24 15:41:34巨蟹座
日期:2013-10-24 17:14:56處女座
日期:2013-10-24 17:15:30雙子座
日期:2013-10-25 13:49:39午馬
日期:2013-10-28 15:02:15
2 [報告]
發(fā)表于 2012-10-10 17:07 |只看該作者
自動去重是什么意思

論壇徽章:
0
3 [報告]
發(fā)表于 2012-10-10 17:08 |只看該作者
回復(fù) 2# yybmsrs

就是說原始文件每一行里面都有”1432”,可是結(jié)果里面只有一個1432的對應(yīng)了。


   

論壇徽章:
78
雙子座
日期:2013-10-15 08:50:09天秤座
日期:2013-10-16 18:02:08白羊座
日期:2013-10-18 13:35:33天蝎座
日期:2013-10-18 13:37:06獅子座
日期:2013-10-18 13:40:31雙子座
日期:2013-10-22 13:58:42戌狗
日期:2013-10-22 18:50:04CU十二周年紀(jì)念徽章
日期:2013-10-24 15:41:34巨蟹座
日期:2013-10-24 17:14:56處女座
日期:2013-10-24 17:15:30雙子座
日期:2013-10-25 13:49:39午馬
日期:2013-10-28 15:02:15
4 [報告]
發(fā)表于 2012-10-10 17:16 |只看該作者
你是怎么處理的?

論壇徽章:
0
5 [報告]
發(fā)表于 2012-10-10 17:21 |只看該作者
回復(fù) 4# yybmsrs

首先是把原始文件的數(shù)字都變成一列,如下


1432
2212
2214
3684
3689
1432
27330
2885
3667
3845
4804
5163
5290
5595
673
1432
27330
3845
5290
5595
5604
673
1432
27330
3845
5290
5595
673
1432
27330
3845
5290
5595
673
1432
2932
4772
4773
5530
5532
5534
1432
3551
3725
51135
5518
5519
5520
...


然后
  1. my $a="text2.txt";
  2. my $b="text1.txt";
  3. open IN1, $a or die "can't open $a";
  4. open IN2, $b or die "can't open $b";
  5. open OUT, '>', "out.txt" or die "can't open out.txt";

  6. my @data = <IN1>;
  7. sub func
  8. {

  9.         my ($str, @arr) = @_;
  10.         for (my $i=0; $i<=$#arr; ++$i)
  11.         {
  12.                 chomp($arr[$i]);
  13.                 if ($str eq $arr[$i])
  14.                 {
  15.                         return 1;
  16.                 }
  17.         }        
  18.         return 0;
  19. }

  20. my @names = <IN2>;

  21. foreach my $i (0..$#data){
  22.                  my @line2 = split(/\s+/,$data[$i]);
  23.                  my $name2 = shift @line2;
  24.                  if (func($name2, @names))
  25.                  {
  26.                         print OUT $data[$i];
  27.                        }
  28.             }   
復(fù)制代碼
結(jié)果...
不是我想要的

   

論壇徽章:
0
6 [報告]
發(fā)表于 2012-10-10 17:33 |只看該作者

我寫了一個,
  1. #!/usr/bin/perl -w

  2. use strict;

  3. my $a="text1.txt";
  4. my $b="text2.txt";
  5. open IN1, $a or die "can't open $a";
  6. open IN2, $b or die "can't open $b";
  7. open OUT, '>', "out.txt" or die "can't open out.txt";

  8. while(<IN2>)
  9. {chomp;@m=split(" ",$_);$h{$m[1]}=$m[2];
  10. }
  11. while(<IN1>)
  12. {
  13. chomp;
  14. @m=split(";";$_);
  15. for (0..$#m){$m[$_]=$h{$m[$_]} if exists($h{$m[$_]});}
  16. print OUT join(";",@m);
  17. print OUT "\n";
  18. }
復(fù)制代碼
顯示好多錯誤

論壇徽章:
78
雙子座
日期:2013-10-15 08:50:09天秤座
日期:2013-10-16 18:02:08白羊座
日期:2013-10-18 13:35:33天蝎座
日期:2013-10-18 13:37:06獅子座
日期:2013-10-18 13:40:31雙子座
日期:2013-10-22 13:58:42戌狗
日期:2013-10-22 18:50:04CU十二周年紀(jì)念徽章
日期:2013-10-24 15:41:34巨蟹座
日期:2013-10-24 17:14:56處女座
日期:2013-10-24 17:15:30雙子座
日期:2013-10-25 13:49:39午馬
日期:2013-10-28 15:02:15
7 [報告]
發(fā)表于 2012-10-10 17:41 |只看該作者
回復(fù) 6# xingzhou823


錯誤是因為變量沒有定義,應(yīng)該用my定義一下再用。
   
$h{$m[1]}=$m[2]改為$h{$m[0]}=$m[1],然后把use strict;去掉試試

論壇徽章:
145
技術(shù)圖書徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11獅子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龍
日期:2014-01-08 15:26:12技術(shù)圖書徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
8 [報告]
發(fā)表于 2012-10-10 17:49 |只看該作者
本帖最后由 jason680 于 2012-10-10 17:50 編輯

回復(fù) 1# xingzhou823

$ perl number_to_word.pl
file in  = text1.txt
file key = text2.txt
file out  = text3.txt

$ cat text1.txt
1432;3551;51135;5518;5519;5520;5522;55844;5970
1432;3551;51701;5608;9020;9064

$ cat text2.txt
1432 adec
3551 xxx


$ cat text3.txt
adec;xxx;51135;5518;5519;5520;5522;55844;5970
adec;xxx;51701;5608;9020;9064

$ cat number_to_word.pl
#! /usr/bin/env perl

use strict;
use warnings;

my $sFile_in  = "text1.txt";
my $sFile_key = "text2.txt";
my $sFile_out = "text3.txt";

open(my $FHin,  "<", $sFile_in)  or die "can't open $sFile_in\n";
open(my $FHkey, "<", $sFile_key) or die "can't open $sFile_key\n";
open(my $FHout, ">", $sFile_out) or die "can't open $sFile_out\n";

my %hWord;
while(<$FHkey>;){
  chomp;
  my ($sKey, $sWord) = split;
  $hWord{$sKey} = $sWord;
}
while(<$FHin>;){
  s/(\d+)/defined $hWord{$1}?$hWord{$1}:$1/ge;
  print {$FHout} $_;
}
close $FHin;
close $FHkey;
close $FHout;

print "file in  = $sFile_in\n";
print "file key = $sFile_key\n";
print "file out  = $sFile_out\n";


   

論壇徽章:
0
9 [報告]
發(fā)表于 2012-10-10 17:55 |只看該作者
  回復(fù) 7# yybmsrs

我改了一下,把@m改成了my @m,再有修改了你說的 $h{$m[1]}=$m[2]改為$h{$m[0]}=$m[1],然后把use strict

還是顯示錯誤,關(guān)鍵是我還看不明白是什么錯誤:



syntax error at gene.pl line 16,near "";";"
syntax error at gene.pl line 16,near "$_)"
Execution of gene.pl aborted due to compilation errors.



其中第16行的內(nèi)容是
  1. my @m=split(";";$_);
復(fù)制代碼
我把“;”改成了“,”,然后就成功了
   

論壇徽章:
0
10 [報告]
發(fā)表于 2012-10-10 18:26 |只看該作者
回復(fù) 8# jason680

嗯,按照你的code,稍微改了兩個標(biāo)點,跑出了正確的結(jié)果。

我知道你的意思,可我是個菜鳥,沒有系統(tǒng)的學(xué)習(xí),基礎(chǔ)很差,卻被硬硬的處理這些數(shù)據(jù),哎


   
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP