如何读取目录中的所有文本文件并输出为html页面的链接

时间:2017-04-27 20:12:46

标签: regex perl

我试图读取目录中的所有txt文件,并将它们作为链接输出到单个html页面上。当我打开html页面时,txt文件应显示为链接。当我点击链接时,txt文件中的内容应该在html页面上打开。这是我在perl中的代码。

my $dir = '/';               ## rem trailing slash
my $body;                    ## our file list
my $saveFile = '/dev/null';  ## file to save links

opendir( MYDIR, $dir ) or die 'opendir';
$body =
   join( "\n",                           ## make it legible
      map  { '<a href="$_">$_</a><br>' } ## format each file
      sort { $a cmp $b }                 ## sort them
      grep { ! /^\./ }                   ## no .name files
      grep { -T "$dir$_ }                ## only text files
      readdir MYDIR
   );
closedir MYDIR;

## build your link page
## using $body
open( FILE, $saveFile ) or die 'open';
print FILE <<EOF;
<HTML>
<HEAD>
<TITLE>My Files</TITLE>
<BODY>
$body
</BODY>
</HTML>
EOF
close FILE;

检索文本文件的代码,我从终端执行此代码为&#34; perl showtxtfiles.pl&gt; somefile.html&#34;它检索文件夹中的所有txt文件并在html页面上显示它们。但是,我只需要在打开somefile.html页面时将每个txt文件显示为链接。

#!/usr/bin/perl
    use strict;
    use warnings;

    my $dir = '/home/ubuntu/uisacad5.uis.edu/~rloui2/540/project2';


    opendir(DIR, $dir) or die $!;

    while (my $file = readdir(DIR)) {

        # We only want files
        next unless (-f "$dir/$file");

        # Use a regular expression to find files ending in .txt
        next unless ($file =~ m/\.txt$/);

        print "$file\n";
    }

    closedir(DIR);
    exit 0;

1 个答案:

答案 0 :(得分:1)

您实际上并没有问过问题,所以我无法确定代码中哪些问题让您感到困惑。

我可以看到一个明显的问题,一个可能出现的问题,以及一些可以做出的改进。

明显的问题

map  { '<a href="$_">$_</a><br>' }

变量仅以双引号字符串进行插值。这是一个单引号字符串,因此您不会获得$_的值,您只需获取文字字符串$_(后跟下划线的美元符号)。

可能出现的问题

看起来此程序运行一次以生成静态HTML页面,但您没有说明如何使用此页面。它是由网络服务器提供还是您只是在浏览器中使用file://网址在本地打开它?

这将对href元素中的<a>属性需要的样子产生影响。您需要URL还是文件路径?这需要深思熟虑。

一些改进

  • 您在输出行之间添加换行符,但HTTP客户端(如浏览器)通常会忽略换行符。您可以将\n替换为<br>元素,但使用<ul><li>可能会更好(使用opendir my $dir_h, $diropendir MYDIR, $dir

  • 我建议对目录句柄使用标量变量而不是裸字 - 即adb devices而不是adb devices

  • 我不知道这个程序会有多复杂,但你几乎可以肯定会从代码中取出HTML并使用模板引擎。