Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将单词从一个文件删除到输出文件的Perl脚本_Perl_Text_Split - Fatal编程技术网

将单词从一个文件删除到输出文件的Perl脚本

将单词从一个文件删除到输出文件的Perl脚本,perl,text,split,Perl,Text,Split,我很确定这是非常基本的。然而,我不知道Perl,只需要使用它一次。所以我感谢你的耐心 我正在尝试从下面一行HTML中删除不需要的文本: 我只想剩下运行可打印的TCI列表(修订版),它是前面末尾的文本。我有大约500行这样的代码,因为它们将来可能会被更改,所以创建一个程序是有意义的。以下是我迄今为止的Perl代码: open(SEARK,'C:\\HTMLsorter\\sources.txt'); 打开(OUTSEARK,'>C:\\HTMLsorter\\OUTSEARK.txt'); w

我很确定这是非常基本的。然而,我不知道Perl,只需要使用它一次。所以我感谢你的耐心

我正在尝试从下面一行HTML中删除不需要的文本:


我只想剩下
运行可打印的TCI列表(修订版)
,它是
前面末尾的文本。我有大约500行这样的代码,因为它们将来可能会被更改,所以创建一个程序是有意义的。以下是我迄今为止的Perl代码:

open(SEARK,'C:\\HTMLsorter\\sources.txt');
打开(OUTSEARK,'>C:\\HTMLsorter\\OUTSEARK.txt');
while(){
咀嚼;
如果($);

@itemsb=split(/您可以在一行中完成此操作

cat inputfile|perl -ne 'if (s#<a\s+target[^>]+>(.+?)</a>##is){print "$1\n";}'>outputfile
cat输入文件| perl-ne'if(s#
'|\
perl-ne'if(s#]+>(.+?)##is){print“$1\n”;}
运行可打印的TCI列表(修订版)
运行可打印的TCI列表1(修订版)
运行可打印的TCI列表2(修订版)
运行可打印的TCI列表3(修订版)
#!/usr/bin/perl
严格使用;
使用警告;
打开IFH,'output.txt';
而(){
如果(/(.*)/i)
{
$_ = $1;
s///g;
打印H“$\n”;
}
}
关闭IFH;
关闭OFH;

您应该使用一个合适的HTML解析器,例如。该程序演示的代码并不复杂

使用严格;
使用警告;
使用HTML::TreeBuilder;
my$tree=HTML::TreeBuilder->new_from_file(*数据);
将$打印为文本,“\n”表示$树->向下查看(_tag=>a',target=>qr/);
__资料__
输出

运行可打印的TCI列表(修订版)

编辑

要在示例中的文件上使用此技术,代码如下所示

使用严格;
使用警告;
使用HTML::TreeBuilder;
my$tree=HTML::TreeBuilder->new_from_文件('C:\HTMLsorter\sources.txt');
打开我的$out,“>”,“C:\HTMLsorter\outseark.txt”或die$!;
将$out$打印为文本,“\n”表示$tree->look\u down(_tag=>a',target=>qr/);

编辑2

现在我更好地了解了您需要什么,我可以提供这个替代解决方案。它使用模块访问HTML文档的文档对象模型,因为使用
HTML::TreeBuilder
获得所需的结果相对比较困难

我还注意到,您的示例HTML包含
修订版
,显然应该是
修订版
,我已经在这个示例测试中对其进行了更正。无论如何,Perl尝试像浏览器一样解析坏HTML,即使有错误,输出也是可用的

使用严格;
使用警告;
使用HTML::DOM;
my$dom=HTML::dom->new;
$dom->parse_文件('C:\HTMLsorter\sources.txt')或die$!;
打开我的$out,“>”,“C:\HTMLsorter\outseark.txt”或die$!;
打印$out$\->innerHTML,“\n”表示grep$\->attr('target'),$dom->getElementsByTagName('a');
输出

(已更正标签)

运行可打印的TCI列表(修订版)
(带原始标签)

运行可打印的TCI列表(修订版)

cat
是一个无用的额外过程。放下它,让Perl直接读取输入文件:
Perl-ne'…'inputfile>outputfile
是的,这是可能的,但我喜欢这种方式。它显示了将脚本嵌入管道的能力。谢谢你的评论。谢谢你的帮助!这对我帮助很大。我不明白当应用于示例数据时,您的代码会精确地生成您所说的所需的输出(减去双引号)。您是否可以稍后通过添加
s/\//g
等来修复它?问题是,我想保留这些,因为它们在那里是有原因的。很抱歉,让您感到困惑,因为此时我正在修补,以检查这是否真的是问题。谢谢您的评论。我现在明白了为什么我误解了您的问题。StackOverflow标记吞没了您使用的HTML标记,它们在显示的问题中是不可见的。此外,您发布的两个示例输出字符串完全相同,只是其中一个字符串中有一个虚假的双引号。我编辑了您的帖子,以显示我认为您的意图,并在我的答案中添加了一个新的工作解决方案。请让我知道我的假设是否正确。感谢您的回答,并对迟来的答复表示抱歉。这帮助很大。这是一个非常糟糕的做法,因为它依赖于HTML中属性的顺序。不要这样做。
echo '<a target="_blank"          href="http://sharepoint/sites/cerner/quickreferenceguides/Documents/EXP001_Run_Printable_TCI_List.pdf" onmouseover="return overlib('This guide outlines the process for running a printable TCI List', CAPTION, 'TCI LIST');" onmouseout="return nd();">Run Printable TCI List (<i>Revised<i>)</a>
<a target="_blank"          href="http://sharepoint/sites/cerner/quickreferenceguides/Documents/EXP001_Run_Printable_TCI_List.pdf" onmouseover="return overlib('This guide outlines the process for running a printable TCI List', CAPTION, 'TCI LIST');" onmouseout="return nd();">Run Printable TCI List 1(<i>Revised<i>)</a>
<a target="_blank"          href="http://sharepoint/sites/cerner/quickreferenceguides/Documents/EXP001_Run_Printable_TCI_List.pdf" onmouseover="return overlib('This guide outlines the process for running a printable TCI List', CAPTION, 'TCI LIST');" onmouseout="return nd();">Run Printable TCI List 2(<i>Revised<i>)</a>
<a target="_blank"          href="http://sharepoint/sites/cerner/quickreferenceguides/Documents/EXP001_Run_Printable_TCI_List.pdf" onmouseover="return overlib('This guide outlines the process for running a printable TCI List', CAPTION, 'TCI LIST');" onmouseout="return nd();">Run Printable TCI List 3(<i>Revised<i>)</a>'|\
perl -ne 'if (s#<a\s+target[^>]+>(.+?)</a>##is){print "$1\n";}'

Run Printable TCI List (<i>Revised<i>)
Run Printable TCI List 1(<i>Revised<i>)
Run Printable TCI List 2(<i>Revised<i>)
Run Printable TCI List 3(<i>Revised<i>)
#!/usr/bin/perl
use strict;
use warnings;

open IFH, '<myfile.txt';
open OFH, '>output.txt';

while (<IFH>) {
  if (/<a\s+target.*?>(.*?)<\/a>/i)
  {
    $_ = $1;
    s/<.*?>//g;
    print OFH "$_\n";
  }
}

close IFH;
close OFH;