【问题标题】:Perl - Save each entry in file at new linePerl - 将每个条目保存在文件中的新行
【发布时间】:2017-10-16 19:45:44
【问题描述】:

我正在编写一个 Perl 脚本,该脚本使用 glob 检查目录的内容,然后将输出写入新文件。但是文件中的每个条目都使用空格分隔,我需要它在新行中打印每个条目。我的代码是这样的

open(New, ">/u/smanik/xyz.txt");

@files = glob('/user/manik/*.csv');
$size  = @files;

print "Total no of files: $size \n";

print New @files;

open(New, "/user/manik/xyz.txt");
while ( <New> ) {
    print "$_";
}

close(New);

这是通过在文件中打印来给出输出

/user/manik/A.csv /user/manik/B.csv

但我需要像这样将它打印在文件中

A.csv
B.csv
C.csv

我尝试在第五行添加\n,但没有奏效。

【问题讨论】:

  • 我认为两者之间没有空格。如果这是您的完整代码,它应该是/user/manik/A.csv/user/manik/B.csv。也许你有print New "@files"
  • \n 是换行符,而不是 /n
  • 抱歉打印错误我只用了\n
  • 这是一个快速的代码审查 首先,您应该始终在代码中使用use strictuse warnings,并使用my 以词法方式声明所有变量,即my $size = @files。您还应该使用词法文件句柄而不是全局变量(您的New,按照惯例应该全部大写,所以NEW)。如果您的文件名来自 var 并且在前面包含元字符,您还应该使用三参数 open 以避免安全问题。最后,检查错误:open my $fh, '&gt;', '/user/manikxyz.txt' or die $!.
  • 我已经修复了您的代码示例中的缩进。不客气,但下次请自己做。一致的缩进是理解代码的重要工具,如果你要求一群人阅读和理解你的代码,让他们尽可能简单是礼貌的

标签: perl


【解决方案1】:

如果你想让它打印换行符,你需要告诉它。

my @foo = (1, 2, 3);
print @foo;

这将打印出来

123

这是因为数组@foo被当作print的参数列表,它只会一个接一个地输出所有参数。

my @foo = (1, 2, 3);
print "@foo";

现在这将打印出来

1 2 3

因为双引号 "" 字符串内的数组是使用 $, output field separator 插入的,默认情况下是空格

如果您希望它使用换行符,最简单的方法是使用\njoin 您的数组作为print 的参数生成一个字符串。

my @foo = ( 1, 2, 3 );
print join "\n", @foo;

这会给你

1
2
3

【讨论】:

  • 谢谢,这可以解决问题。但我还需要从每个条目的开头删除 /user/manik/
  • @ManikSharma 如果您有新问题,请提出新问题。但我建议你先自己试试。
  • 我对@9​​87654336@ 成语有着非理性的仇恨!这主要是因为我认为\n 是记录终止符,而不是记录分隔符。因此我认为print "$_\n" for @foo(字符数相同)或say for @foo要好得多,但请忽略我。
  • @Borodin 我明白你的意思。事实上,我正在考虑for 解决方案,但决定不采用它,因为我认为它更复杂。
猜你喜欢
  • 2013-01-17
  • 1970-01-01
  • 2014-01-23
  • 2022-01-04
  • 1970-01-01
  • 2015-08-16
  • 1970-01-01
  • 2021-11-11
  • 2013-02-08
相关资源
最近更新 更多