perl對欄位替換的小問題

來源:互聯網
上載者:User

標籤:style   blog   color   使用   ar   for   strong   檔案   sp   

今天做一份東西需要對一些檔案特定的欄位進行修改,其實這改一下很方便,甚至不需要去寫一個指令碼,但是為了方便使用,同時也是鞏固一下perl的知識,便寫了這個小指令碼。

但在寫的過程中還是碰到了幾個小問題,首先是perl目錄切換的問題,我在目前的目錄readdir、opendir一個目錄,並獲得檔案名稱以後,需要將這些檔案開啟處理,但是開啟這些檔案必然需要一個絕對路徑或者是相對路徑,所以導致直接開啟這些檔案會提示檔案不存在的錯誤,當然開啟檔案的時候使用了open .... or warn "can not open file : $!";這樣的處理。所以這個時候我採用了拼接一個目錄的方法。

 1 foreach my $myFile (readdir SCNDIR) { 2   my $localFile; 3   if ($scnDir =~ /\/$/) { 4     $localFile = $scnDir . $myFile; 5   } else { 6     $localFile = $scnDir . ‘/‘ . $myFile; 7   } 8   if (-f $localFile) { 9     editFileWord ($localFile);10   }11 }

其中$scnDir = $ARGV[0] 接收的,這裡對$scnDir 做了一個判斷,判斷末尾是否加入了“/"符號。

這樣就能解決檔案路徑的問題。

然後在匹配的時候發現自己犯了一個很大的錯誤。

就是通常使用open直接開啟檔案,然後就用while (<FILE>)的方式接收檔案的每一句了,其中FILE是檔案控制代碼。

然後對就收的到每一句進行匹配

$lines =~ s/$editWord/$editedWord/g

s表示搜尋,g表示匹配所有,整句就標題把所有的$editWord替換成$editedWord

寫完以後運行,查看檔案,發現檔案沒有發生任何更改,想了一會發現自己真是蠢到家了。

$lines接收到了檔案中讀取的句子,但是我替換完以後並未將重新寫回到檔案中,開始想用seek的方法去寫,發現如果替換的長短不一樣,可能會造成一點問題。

也想過直接寫入到一個新的檔案,然後進行覆蓋,不過終究感覺有點麻煩,然後搜了一個cpan,找到一個好模組

Tie::File

Tie::File - Access the lines of a disk file via a Perl array

用這個可以非常便捷地修改檔案,方法如下:

sub editFileWord {  my $file = shift;  my $existWord = 0;  tie my @arrayLines, ‘Tie::File‘, $file or die "can not open file : $!";  for (@arrayLines) {    if (s/$editWord/$editedWord/g) {      $existWord = 1;    }  }  if ($existWord) {    print $file . "\n";  }}

這樣就完成了欄位的替換,很簡單的一個小程式,但是卻存在著不少的小問題。

Tie對檔案的處理還是有神奇的作用的,有心的朋友可以去關注一下。

對perl還在摸索中,願各位大神能留下寶貴的意見。

perl對欄位替換的小問題

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.