我有一个带有数字的文本文件,我按如下方式分组,用空行分隔:
42.034 41.630 40.158 26.823 26.366 25.289 23.949
34.712 35.133 35.185 35.577 28.463 28.412 30.831
33.490 33.839 32.059 32.072 33.425 33.349 34.709
12.596 13.332 12.810 13.329 13.329 13.569 11.418
Run Code Online (Sandbox Code Playgroud)
注意:组总长度相等,如果组很大,可以排列多行,比如500个数字.我正在考虑将组放在数组中并沿着文件的长度进行迭代.
我的第一个问题是:如何从数组1中减去数组2的第一个元素,从数组2中减去数组3,类似于第二个元素,依此类推直到组的末尾?
即:
34.712-42.034,35.133-41.630,35.185-40.158 ...till the end of each group
33.490-34.712,33.839-35.133 ..................
Run Code Online (Sandbox Code Playgroud)
然后将第一个元素的差异保存在一个组中(第二个问题:如何?)直到结束
即:
34.712-42.034 ; 33.490-34.712 ; and so on in one group
35.133-41.630 ; 33.839-35.133 ; ........
Run Code Online (Sandbox Code Playgroud)
我是初学者,所以任何建议都会有所帮助.
这是我的问题:
我有一个像数据结构的文件系统:
%fs = (
"home" => {
"test.file" => {
type => "file",
owner => 1000,
content => "Hello World!",
},
},
"etc" => {
"passwd" => {
type => "file",
owner => 0,
content => "testuser:testusershash",
},
"conf" => {
"test.file" => {
type => "file",
owner => 1000,
content => "Hello World!",
},
},
},
);
Run Code Online (Sandbox Code Playgroud)
现在,为了得到/etc/conf/test.file我需要的内容$fs{"etc"}{"conf"}{"test.file"}{"content"},但我的输入是一个数组,看起来像这样:("etc","conf","test.file").
因此,因为输入的长度是变化的,所以我不知道如何访问散列的值.有任何想法吗?
如何在perl中合并两个哈希值,其中键可以碰撞,值是数组.如果发生冲突,我想合并值数组.
正常合并会不会很好?
我很抱歉,如果这是一个重复,但我试着抬头,但没有任何这样的具体出现.
谢谢!
我正在使用Digest :: MD5模块,并在该hexdigest中为windows和linux返回不同的值.
请帮我解决这个问题.
use Digest::MD5;
my $ctx=Digest::MD5->new();
open RD, "input.txt";
$ctx->addfile(*RD);
close RD;
print $ctx->hexdigest;
Run Code Online (Sandbox Code Playgroud)
input.txt文件具有以下内容:
hello
Run Code Online (Sandbox Code Playgroud)
输出:窗口
5d41402abc4b2a76b9719d911017c592
Run Code Online (Sandbox Code Playgroud)
输出:Linux
af5597c29467a96523a70787c319f4db
Run Code Online (Sandbox Code Playgroud)
谢谢,
Saravanan
我正在查看一些使用File :: Path制作和删除文件路径的示例代码.
http://perldoc.perl.org/File/Path.html
我可以让函数正常工作但我在使错误消息正常工作时遇到了一些困难.在捕获错误消息的示例中,他们使用\之前的my.这是什么目的\?
# Sample code from the link above
remove_tree( 'foo/bar', 'bar/rat', {error => \my $err} ); # why escape the my?!?!
if (@$err) {
for my $diag (@$err) {
my ($file, $message) = %$diag;
if ($file eq '') {
print "general error: $message\n";
}
else {
print "problem unlinking $file: $message\n";
}
}
}
else {
print "No error encountered\n";
}
Run Code Online (Sandbox Code Playgroud)
我以前从未见过这个,我无法在任何地方找到解释.我尝试删除了\,我得到一个语法错误,所以很明显它是必要的,但为什么?
我试图通过以下几行来调试一个令人费解的问题,深入研究我继承的程序,
my $log = [];
$root->validate_subtree($log);
Run Code Online (Sandbox Code Playgroud)
导致以下错误
Treex :: PML :: Node :: validate:log必须是ARRAY引用
$root是一个类型的对象Treex::PML::Node,并且这两条线确实相邻 - 我没有留下任何东西.我去了错误消息的来源,并validate_subtree()检查其参数如下(Node.pm第423行):
sub validate_subtree {
my ($node, $log) = @_;
if (defined $log and UNIVERSAL::isa($log,'ARRAY')) {
croak __PACKAGE__."::validate: log must be an ARRAY reference";
}
Run Code Online (Sandbox Code Playgroud)
我认为这$log = [] 会初始化$log为数组引用!我错过了什么?
鉴于以下转储程序输出,有没有办法遍历每个散列以仅列出每个results->id记录下的项目?我希望能够说这样的话:
print $results{1342}{'domain'};
并让语句返回testing11.com结果。
我是否必须首先通读所有results数组,然后使用它$results[$counter]{id}来访问那里的数据?我不知道如何继续。
$VAR1 = {
'end_time' => 1466017739,
'options' => {
'hour_offset' => '00',
'timezone' => 'America/New_York'
},
'field_headers' => {
'priority' => 'Priority',
'status' => 'Status',
'assignee_external_id' => 'Assignee external id',
'initially_assigned_at' => 'Initially assigned at'
},
'results' => [
{
'priority' => 'High',
'status' => 'Open',
'domain' => 'testing11.com',
'generated_timestamp' => 1546547669,
'id' => 1342
},
{
'priority' => 'Low',
'status' => 'Open',
'domain' => 'testing22.com',
'generated_timestamp' …Run Code Online (Sandbox Code Playgroud) 我认为对于有经验的人来说这应该很容易解决,对我来说虽然我在谷歌上尝试和搜索这个但是找不到适合我情况的东西.我只想让$ amountok和$ amountko给出它们在索引0和1处的值,但它不是这样的(参见#mark).
print ERGEBNIS "ID;Amount;Amount OK;Amount KO\n";
foreach my $key (keys %elementhash){
my $sum = 0;
foreach $valueofkey(@{$elementhash{$key}}){
$sum += $valueofkey;
}
#my $amountok= @{$elementhash{$key}[0]};
#my $amountko= @{$elementhash{$key}[1]};
print ERGEBNIS $key.";".$sum.";".$amountok.";".$amountko."\n";
}
Run Code Online (Sandbox Code Playgroud)
这会让我错误:"不能使用字符串"7"作为数组引用.",这必须是可能的,但我只是不知道如何!感谢你们
这是%elementhash的Dumper输出:
$VAR1 = { '1000' => [7],
'2000' => [5],
'3000' => [56, 12]
};
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Hash::Mergeperl 模块合并 2 个 yml 文件。并尝试使用DumpfromYMAL模块将其转储到 yml 文件。
use strict;
use warnings;
use Hash::Merge qw( merge );
Hash::Merge::set_behavior('RETAINMENT_PRECEDENT');
use File::Slurp qw(write_file);
use YAML;
my $yaml1 = $ARGV[0];
my $yaml2 = $ARGV[1];
my $yaml_output = $ARGV[2];
my $clkgrps = &YAML::LoadFile($yaml1);
my $clkgrps1 = &YAML::LoadFile($yaml2);
my $clockgroups = merge($clkgrps1, $clkgrps);
my $out_yaml = Dump $clockgroups;
write_file($yaml_output, { binmode => ':raw' }, $out_yaml);
Run Code Online (Sandbox Code Playgroud)
合并 yml 文件后,我可以看到重复的条目,即两个 yml 文件中的以下内容相同。合并时,它将它们视为不同的条目。我们有处理重复的隐式方法吗?
为了使我的数据更易于访问,我想将表格数据存储在复杂的哈希中.当脚本循环遍历我的数据时,我正在尝试增加'HoHoHoA'.根据'perldsc'中的指南:
push @ { $hash{$column[$i]}{$date}{$hour} }, $data[$i];
Run Code Online (Sandbox Code Playgroud)
该脚本编译并运行没有问题,但不会向哈希添加任何数据:
print $hash{"Frequency Min"}{"09/07/08"}{"15"};
Run Code Online (Sandbox Code Playgroud)
即使密钥应该存在,也不返回任何内容.在哈希上运行'exists'表示它不存在.
我正在阅读的数据文件如下所示:
DATE TIME COLUMN1 COLUMN2 COLUMN3...
09/06/2008 06:12:56 56.23 54.23 56.35...
09/06/2008 06:42:56 56.73 55.28 54.52...
09/06/2008 07:12:56 57.31 56.79 56.41...
09/06/2008 07:42:56 58.24 57.30 58.86...
.
.
.
Run Code Online (Sandbox Code Playgroud)
我希望将任何给定日期和小时的数组中每列的值组合在一起,因此{COLUMN},{DATE}和{HOUR}的三个哈希值.
结果结构如下所示:
%monthData = (
"COLUMN1" => {
"09/06/2008" => {
"06" => [56.23,56.73...],
"07" => [57.31,58.24...]
}
},
"COLUMN2" => {
"09/06/2008" => {
"06" => [54.23,55.28...],
"07" => [56.79,57.30...]
}
},
"COLUMN3" => {
"09/06/2008" => { …Run Code Online (Sandbox Code Playgroud)