2017-06-02 44 views
0

我想打開並讀取文本文件,然後將每行這行文件的內容寫入HTML文件。到目前爲止,我已經想出了這一點:用Perl讀寫文本文件

use strict;  
use locale; 

my (@datei, $i); 
open (FHIN,"HSS_D.txt") || die "couldn't open file $!"; 
@datei= <in>; 
close FHIN; 

open (FHOUT, ">pz2.html"); 
print FHOUT "<HTML>\n"; 
print FHOUT "<HEAD>\n"; 
print FHOUT "<TITLE>pz 2</TITLE>\n"; 
print FHOUT '<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">'; 
print FHOUT "\n</HEAD>\n"; 
print FHOUT "<BODY>\n"; 

for ($i = 0; $i < @datei; $i++) { 
    print FHOUT "<p>$datei[$i]</p>\n"; 
} 

print FHOUT "</BODY></html>\n"; 
close (FHOUT); 

然而,每次我得到一個編譯錯誤,我無法弄清楚什麼是錯的。謝謝你的幫助!

+6

發佈您收到的EXACT錯誤消息。你的代碼爲我編譯。 – toolic

+0

'charset = iso-8859-1'? 1998年是什麼? – melpomene

+0

@melpomene,請不要以charsets開頭,這是一片沼澤。我寧願看到它的指定,然後盲目地相信它是UTF-8 ......它不是指定爲描述Perl文件中使用的編碼的頂部的附註,也不是在輸入到輸出處指定的編碼。 。也許這是拉丁語-1的確? – vanHoesel

回答

1

問題在你的腳本

你存儲你的數組,它是你的問題不正確的處理程序。 @datei = <in>應該

@datei = <FHIN>; 

有些事情等你應該知道

1)始終把警告和使用該程序的頂部使用嚴格。

2)不要將整個文件存儲在數組中,而是必須逐行處理文件。

while (my $line = <FHIN>) 
{ 
    Do your stuff here. 

3)使用三個參數作爲文件句柄。就像如下

open my $fh,'<', "filename" 

4)從陣列訪問的每一個元素,你可以使用Perl的foreach而不是C風格的循環

for my $elemnts(@arrray) 
{ 

如果你想希望通過其索引的使用迭代循環格式如下。

for my $index(0..$#arrray) 
{ 

以上..意味着一系列操作$#會給最後的指數值

+0

我不認爲第4點是一個好的建議... – NetMage

+0

@NetMage。謝謝你的評論。發佈編輯。 – mkHun

1

如果您已使通過use warningswarningsuse warnings qw(all),你應該總是做 —你會看到這樣的事情:

Name "main::in" used only once: possible typo at foo.pl line 6.

也就是說,當然,這條線:

@datei= <in>; 

問題的根本原因是,你打開一個名爲FHIN文件句柄,但是你試過從一個名爲in文件句柄來讀取。然而,整個操作將能更好地使用詞彙句柄和open的三個參數的形式,這被認爲是best practice寫着:

open(my $fh, '<', 'HSS_D.txt') or die "couldn't open file $!"; 

順便說一句,我已經投票決定關閉這一問題作爲題外話因爲這是一個簡單的印刷錯誤造成的問題。