2010-12-23 66 views
0

我写了一个模块,只是为了将文件分成训练集和测试集。输出很好,但如果两个引用变量@$test@$training的输出被重定向到两个不同的文件,那对学生来说真的很容易。下面是代码:将derefrenced变量的输出打印到文件中

use Cut; 

my($training,$test)=Cut::cut_80_20('data.csv') ; 
print"======TRAINING======\n"."@$training\n"; 
print"======TEST==========\n"." @$test\n"; 
+0

等等,我有这个权利吗?你是在教Perl吗? – 2010-12-23 16:25:58

回答

2

这很容易:

open my $fh1, '>', "training.out" or die "failed to open training.out ($!)"; 
print $fh1 "======TRAINING======\n"; 
print $fh1 "@$training\n"; 
close $fh1; 
open my $fh2, '>', "test.out" or die "failed to open test.out ($!)"; 
print $fh2 "======TEST==========\n"; 
print $fh2 "@$test\n"; 
close $fh2; 

注意没有在打印报表的文件句柄后一个逗号。您可以根据需要添加换行符等。

3

在要输出的数据之前,打印需要一个可选的文件句柄。打开文件并打印:

open(my $training_fh, '>', 'training.csv') or die "Couldn't open training.csv: $!"; 
print $training_fh "======TRAINING======\n"."@$training\n"; 
open(my $test_fh, '>', 'test.csv') or die "Couldn't open test.csv: $!"; 
print $test_fh "======TEST==========\n"." @$test\n"; 
+0

谢谢,只是想通了,这里是代码使用Cut; my($ training,$ test)= Cut :: cut_80_20('data.csv'); my @ tr = @ $ training; my @ te = @ $ test; foreach(@tr) { open FH,“>> trainingset”or die“boo”; print FH $ _; } 关闭FH; foreach(@te) open FG,“>> testset”或die“boo”; print FG $ _; } close FG; – hari 2010-12-23 07:59:12