我正在尝试将if语句@Autowired
private ArticleRepository ar;
@RequestMapping(value="/article/{id}/{ignored}") @ResponseBody
public Article getByIdAndIgnorePermalink(@PathVariable String id, @PathVariable String ignored){
return ar.getById(id);
}
@RequestMapping(value="/article/{title}.html") @ResponseBody
public Article getByPermalink(@PathVariable String permalink){
return ar.getByPermalink(permalink);
}
中定义的变量发送到新文件。代码似乎是正确的,但我知道它没有用,因为文件没有被创建。
数据文件示例:
$abc
Perl代码:
bos,control,x1,x2,29AUG2016,y1,y2,76.4
bos,control,x2,x3,30AUG2016,y2,y3,78.9
bos,control,x3,x4,01SEP2016,y3,y4,72.5
bos,control,x4,x5,02SEP2016,y4,y5,80.5
答案 0 :(得分:4)
在你的代码中,你有一些可能出错的奇怪事情。
my $abc = print "$var1,$var2,$var3\n" if ($var1 =~ "c01" && $var2 =~ "$newdate");
print
将返回成功,其作为1
。因此,您将字符串打印到STDOUT,然后将1
分配给新的词法变量$abc
。 $abc
现在是1
。$abc
可能为undef
。或者是其他东西。谁知道?open my $abc, '>', '/home/.../.../newfile.txt';
close $abc;
$abc
的新文件句柄。 my
将重新声明它。如果你的代码中有use warnings
,那么你会得到警告。它还会使用新的文件句柄对象覆盖旧的$abc
。 ...
是奇怪的foldernames,但这可能只是你的例子的混淆我认为你真正想做的是:
use strict;
use warnings 'all';
# ...
open my $fh, '<', $filename or die $!;
while ( my $line = <$fh> ) {
chomp $line;
my @fields = split( ',', $line );
my $site = $fields[0];
my $var1 = $fields[1];
my $var2 = $fields[4];
my $var3 = $fields[7];
open my $fh_out, '>', '/home/.../.../newfile.txt';
print $fh_out "$var1,$var2,$var3\n" if ( $var1 =~ "c01" && $var2 =~ "$newdate" );
close $fh_out;
}
close $fh;
根本不需要$abc
变量。您只需打印到可以写作的新文件句柄$fh_out
。
请注意,每次在newfile.txt
内的一行中匹配时,您都会覆盖$filename
文件。
答案 1 :(得分:2)
您当前的代码:
open
成功)你的逻辑看起来应该更像这样:
if ( $var1 =~ "c01" && $var2 =~ "$newdate" ) {
my $abc = "$var1,$var2,$var3\n"
open (my $file, '>', '/home/.../.../newfile.txt') || die("Could not open file: " . $!);
print $file $abc;
close $file;
}
答案 2 :(得分:0)
您的代码存在许多问题。除了别人提到的之外
每次找到匹配的输入行时,都会创建一个新的输出文件。这将使文件只包含 last 打印的字符串
您的测试会检查第二列中的文本是否包含c01
,但示例输入中的所有行都在第二列中有control
,因此不会打印任何内容
我猜你要测试字符串相等,在这种情况下你需要eq
而不是=~
来做正则表达式模式匹配
我认为它看起来应该更像这样
use strict;
use warnings 'all';
use POSIX 'strftime';
my $currdate = uc strftime '%d%b%Y', localtime;
my ($input, $output) = qw/ data.txt newfile.txt /;
open my $fh, '<', $input or die qq{Unable to open "$input" for input: $!};
open my $out_fh, '>', $output or die qq{Unable to open "$output" for output: $!};
while ( <$fh> ) {
chomp;
my @fields = split /,/;
my ($site, $var1, $var2, $var3) = @fields[0,1,4,7];
next unless $var1 eq 'c01' and $var2 eq $currdate;
print $out_fh "$var1,$var2,$var3\n";
}
close $out_fh or die $!;