【问题标题】:how to read all text files in a directory and output as links to a html page如何读取目录中的所有文本文件并作为指向 html 页面的链接输出
【发布时间】:2017-04-27 20:12:46
【问题描述】:

我正在尝试读取目录中的所有 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;

检索文本文件的代码,我从终端执行此代码为“perl showtxtfiles.pl > somefile.html”,它检索文件夹中的所有 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;

【问题讨论】:

  • 好的...有什么问题? (提示:变量不会被插入到单引号字符串中。)

标签: regex perl


【解决方案1】:

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

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

明显的问题

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

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

可能的问题

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

这将对&lt;a&gt; 元素中的href 属性的外观产生影响。您需要 URL 还是文件路径?这需要深思熟虑。

一些改进

  • 您在输出行之间添加换行符,但 HTTP 客户端(如浏览器)通常会忽略换行符。您可以将\n 替换为&lt;br&gt; 元素,但最好有一个项目符号列表(使用&lt;ul&gt;&lt;li&gt;

  • 我建议对目录句柄使用标量变量而不是裸字 - 即 opendir my $dir_h, $dir 而不是 opendir MYDIR, $dir

  • 我不知道这个程序会变得多么复杂,但您几乎肯定会从代码中删除 HTML 并改用模板引擎中受益。

【讨论】:

  • 嗨@Dave Cross,我已经添加了检索文件夹中的txt文件并将它们输出到html页面上的代码。我想将每个 txt 文件显示为 html 页面上的链接
  • @sqljavadev:如果您遵循我的回答中的建议,那么您将更接近解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-23
  • 1970-01-01
  • 2018-07-02
  • 1970-01-01
  • 1970-01-01
  • 2015-07-08
  • 1970-01-01
相关资源
最近更新 更多