2010-01-15 83 views
3

我正在嘗試編寫一個配置腳本。 對於每個客戶,它會詢問變量,然後編寫幾個文本文件。Perl:打開一個文件並在編輯後以不同的名稱保存

但是每個文本文件都需要多次使用,所以不能覆蓋它們。我更喜歡它從每個文件讀取,進行更改,然後將它們保存到$ name.originalname。

這可能嗎?

+0

這不是很清楚。你能告訴我們「多次使用」的意思嗎,你試過了什麼 – 2010-01-15 12:07:31

+0

我還沒有試過任何東西,我正在計劃。 「多次使用」表示不同變量組的相同文件。 因此它需要保持不變。 – Soop 2010-01-15 12:44:28

回答

1

爲什麼不先複製文件,然後編輯複製文件

+0

好吧,我會給它一個去:)似乎很明顯,但我是一個小菜 – Soop 2010-01-15 12:25:39

0

下面的代碼希望爲每個客戶找到一個配置模板,其中,例如,喬的模板是joe.originaljoe和輸出寫入joe

foreach my $name (@customers) { 
    my $template = "$name.original$name"; 
    open my $in, "<", $template or die "$0: open $template"; 
    open my $out, ">", $name  or die "$0: open $name"; 

    # whatever processing you're doing goes here 
    my $output = process_template $in; 

    print $out $output   or die "$0: print $out: $!"; 

    close $in; 
    close $out     or warn "$0: close $name"; 
} 
+0

我已經想通了一些東西:我忘了perl不像......「流」像其他腳本。我卡住了 $ customer_name =「placeholder」;那裏有 ,並且有一個名爲CPE_Option_A.txt.placeholder的文件。 所以我認爲問題是我必須確保它最後複製文件。 – Soop 2010-01-15 15:01:33

4

你想要類似Template Toolkit。您讓模板引擎打開模板,填充佔位符並保存結果。你不應該自己做任何魔法。

對於非常小的工作,我有時使用Text::Template

0

假設你想在一個文件中讀取,進行更改行由行,然後寫入到另一個文件:

#!/usr/bin/perl 

use strict; 
use warnings; 

# set $input_file and #output_file accordingly 

# input file 
open my $in_filehandle, '<', $input_file or die $!; 
# output file 
open my $out_filehandle, '>', $output_file or die $!; 

# iterate through the input file one line at a time 
while (<$in_filehandle>) { 

    # save this line and remove the newline 
    my $input_line = $_; 
    chomp $input_line; 

    # prepare the line to be written out 
    my $output_line = do_something($input_line); 

    # write to the output file 
    print $output_line . "\n"; 

} 

close $in_filehandle; 
close $out_filehandle; 
相關問題