- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在处理三个文本文档。第一个是主输入(输入 1),其中单词和单词类型(名词、动词等)由制表符分隔。
输入1
John N
goes V
to P
school N
. S
Mary N
comes V
from P
home N
. S
第二个和第三个输入文本文件如下所示:
输入2
John
Mary
输入3
to
from
我的目标是将第二个和第三个文本文件与主输入进行比较和匹配,并获得如下输出:
预期输出:
John N N
goes V
to P P
school N
. S
Mary N N
comes V
from P P
home N
. S
所有三列均应以制表符或空格分隔。但是,我得到这样的输出:
John N
N
goes
V
to P
P
school
N
.
S
Mary N
N
comes
V
from P
P
home
N
.
S
我相信当我将第一个文本文件的输入放入数组并打印值时,就会发生这种情况。请建议一种获得所需输出的方法。
我使用的程序代码如下:
#!/usr/bin/perl
use warnings;
use strict;
my @file = ('Input 1.txt');
open my $word_fh, '<', 'Input 2.txt' or die $!;
open my $word2_fh, '<', 'Input 3.txt' or die $!;
my %words_to_match = map {chomp $_; $_ => 0} <$word_fh>;
my %words_to_match2 = map {chomp $_; $_ => 0} <$word2_fh>;
close $word_fh;
close $word2_fh;
check($_) for @file;
sub check {
my $file = shift;
open my $fh, '<', $file or die $!;
while (<$fh>){
chomp;
my @words_in_line = split;
for my $word (@words_in_line){
$word =~ s/[(\.,;:!)]//g;
$word .= ' N' if exists $words_to_match{$word};
$word .= ' P' if exists $words_to_match2{$word};
print "$word\n";
}
print "\n";
}
同样,目标是获得所有三列均由制表符或空格分隔的输出。
最佳答案
如果您首先读取所有引用文件并从中构建数据结构,然后读取主要输入文件并对其进行转换,事情就会变得容易得多
您使用两个哈希值,%words_to_match
和 %words_to_match2
并存储每个元素的值为零。这是浪费信息,最好的办法是构建一个单个哈希,将每个引用文件中的单词与其词性相关联。 Input 2.txt
中的单词是名词,因此它们得到 N
,而 Input 3.txt
中的单词是介词,因此它们得到一个P
然后您只需检查是否存在与Input 1.txt
中的每个单词匹配的哈希元素,如果存在,则在打印记录之前附加其值
下面的程序创建一个如下所示的哈希 %pos
,它将两个引用文件中的每个单词与其词性关联起来
( from => "P", John => "N", Mary => "N", to => "P" )
在最后的输入循环中,我使用了替换 s///
将所有尾随空格(包括换行符)替换为三个空格和词性。制表符对于布局表格来说没有什么用处,首先是因为没有人能就制表符停止位置达成一致,其次是因为单个制表符并不总是将列对齐。根据前面数据中有多少个字符,您有时可能需要两个或更多
我希望它是清楚的
use strict;
use warnings 'all';
use autodie;
my %words;
my %files = (
'input 2.txt' => 'N',
'input 3.txt' => 'P',
);
while ( my ( $file, $pos ) = each %files ) {
open my $fh, '<', $file;
while ( <$fh> ) {
s/\s+\z//;
$words{$_} = $pos;
}
}
{
open my $fh, '<','input 1.txt';
while ( <$fh> ) {
next unless /\S/;
my ($word) = split;
my $pos = $words{$word};
s/\s+\z/ $pos\n/ if $pos;
}
continue {
print;
}
}
John N N
goes V
to P P
school N
. S
Mary N N
comes V
from P P
home N
. S
关于perl - 用制表符/空格分隔输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37974486/
使用制表符 - 最初,当我构建表时,我可以在列定义中提供验证选项: {title:"Rating", field:"rating", editor:"input", validator:"requir
在 Notepad++ 中有一个非常方便的按钮,我可以按下它来查看空格、制表符和换行符所在的符号,这样我就可以看到哪些空格是由空格引起的,哪些是由制表符引起的。我可以在 emacs 中做到这一点吗?如
我在 .NET Windows 窗体应用程序中使用 RichTextBox 控件。我允许用户在文本框本身内按 TAB 键。但是,当我将 .Text 值保存在文本框中时,它将显示如下: "This[]i
我想知道如何使用 Interactive Demo 上使用的选择器来清除过滤器对于性别标题。 最佳答案 如果您询问如何向选择 header 过滤器添加空选项,则只需在 headerFilterPara
我有一个包含搜索结果的制表器。这是代码: var table = new Tabulator("#json-table", { layout:"fitDataFill", //init
我正在尝试构建一个可由用户修改的交互式表格。就我而言,原始数据集是本地对象数组。 制表符具有用于删除行的buttonCross选项,但它仅影响表格视觉效果。如何让它找到该行呈现的匹配对象并将其从表数据
我正在制作许多原始 html 表格并使用它们将它们转换为制表符 var table = new Tabulator("#main", { layout:"fitColumns", to
这个问题在这里已经有了答案: Any way for a combo box with 2 values per line? (3 个答案) 关闭 9 年前。 我有一个包含各种项目的 CSV 文件。
我是 JavaScript 的新手,目前正在学习如何使用 Tabulator(除此问题外它工作得很好)。 我想为每个列标题添加一个菜单按钮,然后打开一个下拉菜单。从此菜单中,用户应该能够选择“Grou
我正在尝试处理文本区域中的粘贴代码,并希望对粘贴到第一个非间距字符的内容进行左 trim 。我想采用以下代码: if (foo) { console.log(bar);
我预计 TAB 字符会比 SPACE 字符宽,但在 HTML5 canvas 中,它们是相同的。加上其他一些,这不是那么重要: var c=document.getElementById('mycan
在 shell(GNU bash,版本 4.2.47(1)-release (x86_64-suse-linux-gnu))中,当我点击自动完成选项卡时,“$”在之后被转义变量名称已完成,但如果没有完
我正在制作一个程序,我将从 mysql 表中的 txt 文件加载数据。我将创建具有特定字段的表,然后我将从其中的 txt 文件加载数据。我正在使用 java 来执行该程序。 我写的是下面的内容: pr
Tabulator 有一个名为Column Calculations 的模块。 我需要添加页面总和和总和 例如,我可以添加页脚来计算总和,但我无法添加可见行总和,或者换句话说当前页面的总和仅在同一时间
我不是 javascript 专家,所以我有一个简短的问题,有人知道如何在这里使用 JavaScript tabifier - http://www.barelyfitz.com/projects/t
这是我之前问题的延续(如果你好奇,请检查它们)。 我已经看到了隧道尽头的曙光,但还有最后一个问题。 出于某种原因,每一行都以制表符开头。 我怎样才能忽略第一个字符(在我的例子中是“制表符”(\t))?
请指教以下理解问题??? 我在我的 Linux 机器上输入:(以便通过 top 命令获取总内存) top -n1 | grep Mem: Mem: 2075024k total, 2059064
我该如何解决这个问题: 原因: java.lang.IllegalArgumentException: String [\t] with length 2 cannot be co
1.用法 \t 表示制表符,相当于制表符 前面的输出内容位数为8的倍数,\t将输出8个空格 前面的输出内容位数不是8的倍数,\t将补足8位 2.测试用例 少于8位 等于8位 大于8位
我正在尝试将 Tabulator v4.6.3 与 fitData 布局一起使用。这是我的代码: var table = new Tabulator("#cowTable", { da
我是一名优秀的程序员,十分优秀!