使用Perl读写文本文件

时间:2017-06-02 17:13:34

标签: perl

我正在尝试打开并读取文本文件,然后将每行的此文件行的内容写入HTML文件。到目前为止,我已经想出了这个:

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);

但是,每次都会出现编译错误,我无法弄清楚是什么问题。谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

脚本中的问题

您在阵列中存储的错误处理程序是您的问题。 @datei = <in>它应该是

@datei = <FHIN>;

您应该知道的其他一些事情

1)始终使用警告并在程序的顶部使用strict。

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)
{

高于..表示范围运算符$#将给出最后一个索引值

答案 1 :(得分:1)

如果您通过use warningsuse warnings qw(all) - 启用了warnings,那么您应该总是这样做 - 您会看到类似这样的内容:

  

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 $!"; 

顺便说一下,我已经投票决定将这个问题作为一个主题来关闭,因为这是一个由简单的印刷错误引起的问题。