在Perl数组中包含文件数据

在Perl数组中包含文件数据,perl,Perl,我试图将文件中的所有数据传递到Perl数组中,然后尝试使用foreach循环来处理数组中的每个字符串。问题是foreach不是打印每一行而是打印整个数组 while (<FILE>) { $_ =~ s/(\)|\()//g; push @array, $_; } foreach $n(@array) { print "$n\n"; } while(){ $\=~s/(\)\()///g; 推送@数组,$\; } foreach$n(@array){ 打印“$n\n”

我试图将文件中的所有数据传递到Perl数组中,然后尝试使用foreach循环来处理数组中的每个字符串。问题是foreach不是打印每一行而是打印整个数组

while (<FILE>) {
  $_ =~ s/(\)|\()//g;
  push @array, $_;
}

foreach $n(@array) {
  print "$n\n";
}
while(){
$\=~s/(\)\()///g;
推送@数组,$\;
}
foreach$n(@array){
打印“$n\n”;
}
例如,假设数组中的数据是
@array=qw(他每天上学)

数组打印正确,但foreach循环不是在不同的行上打印每个元素,而是打印整个数组。

阅读您的评论后,我猜您的问题是源文件不包含任何换行符:即整个文件只有一行。一些文本编辑器只是包装文本,而没有实际添加任何换行字符

这个问题没有“解决办法”;必须在需要换行符的位置添加换行符。你可以写一个脚本来做这件事,但我怀疑它是否有意义。这完全取决于你想对这篇文章做什么

以下是我对您的代码片段的代码建议

chomp(@array = <FILE>);
s/[()]//g for @array;
print "$_\n" for @array;
chomp(@array=);
s/[()]//g表示@array;
为@array打印“$\un”;

@array=;
s/[()]//g表示@array;
打印@数组;
请注意,如果您有来自另一个文件系统的文件,则可能会在字符串末尾的
\r
字符位于
chomp
之后,导致输出看起来已损坏,从而覆盖自身

补充说明:

  • (\)\()
    最好作为字符类编写:
    [()]
  • @array=
    将把整个文件读入数组。不需要 循环
  • 如我的示例所示,
    print
    可以分配一个项目列表 (例如数组)作为参数。你可以有一个后缀循环来 按顺序打印
  • 使用(后缀)循环时,所有循环元素的别名都是
    $\uuu
    , 这是对数组进行替换的一种简便方法

阅读您的评论后,我猜您的问题是源文件中没有任何换行:即整个文件只有一行。一些文本编辑器只是包装文本,而没有实际添加任何换行字符

这个问题没有“解决办法”;必须在需要换行符的位置添加换行符。你可以写一个脚本来做这件事,但我怀疑它是否有意义。这完全取决于你想对这篇文章做什么

以下是我对您的代码片段的代码建议

chomp(@array = <FILE>);
s/[()]//g for @array;
print "$_\n" for @array;
chomp(@array=);
s/[()]//g表示@array;
为@array打印“$\un”;

@array=;
s/[()]//g表示@array;
打印@数组;
请注意,如果您有来自另一个文件系统的文件,则可能会在字符串末尾的
\r
字符位于
chomp
之后,导致输出看起来已损坏,从而覆盖自身

补充说明:

  • (\)\()
    最好作为字符类编写:
    [()]
  • @array=
    将把整个文件读入数组。不需要 循环
  • 如我的示例所示,
    print
    可以分配一个项目列表 (例如数组)作为参数。你可以有一个后缀循环来 按顺序打印
  • 使用(后缀)循环时,所有循环元素的别名都是
    $\uuu
    , 这是对数组进行替换的一种简便方法

因为整个文件只有一行。您可以根据空格分割字符串,并在新行中打印数组的每个元素

use strict;
use warnings;

open(FILE,'YOURFILE' ) || die ("could not open");
my $line= <FILE>;
my @array = split ' ',$line;
foreach my $n(@array)
{
print "$n\n";
  }
close(FILE);
输出

In
recent
years
many
risk
factors
for
the
development
of
breast
cancer
that
.....

因为整个文件只有一行。您可以根据空格分割字符串,并在新行中打印数组的每个元素

use strict;
use warnings;

open(FILE,'YOURFILE' ) || die ("could not open");
my $line= <FILE>;
my @array = split ' ',$line;
foreach my $n(@array)
{
print "$n\n";
  }
close(FILE);
输出

In
recent
years
many
risk
factors
for
the
development
of
breast
cancer
that
.....

考虑到
@array
,我看不出这个循环除了产生
“他\ngooes\n\n学校\daily\n”
之外还能产生什么。是否有可能获得一个完整的最小脚本以及示例输入和输出?@muistooshort是正确的。显示您的输入文件和预期的输出文件以及script@muistooshort请查看我(或TLP)提供的答案,它将打印“He\n\ngoes\n\nto\n\n…”等@nandini如果您在表达您的意思时遇到问题,一个非常简单的方法是展示1)你期望的,2)你实际得到的。@nandini请不要以我之前的评论为借口重复
qw(他去学校)
示例。=)因为这显然是错误的。使用实际的输入/输出。考虑到
@array
,我不知道该循环将如何产生除
“他\ngoos\nto\n学校\daily\n”
之外的任何东西。是否有可能获得一个完整的最小脚本以及示例输入和输出?@muistooshort是正确的。显示您的输入文件和预期的输出文件以及script@muistooshort请查看我(或TLP)提供的答案,它将打印“He\n\ngoes\n\nto\n\n…”等@nandini如果您在表达您的意思时遇到问题,一个非常简单的方法是展示1)你期望的,2)你实际得到的。@nandini请不要以我之前的评论为借口重复
qw(他去学校)
示例。=)因为这显然是错误的。使用您的实际输入/输出。我的数据文件-------------------------------------------近年来,许多与雌激素相关的乳腺癌发病风险因素已经被确定,选择性细胞周期素依赖性激酶(CDK)抑制剂roscovitine(ROSC),已被证明是人类乳腺癌细胞增殖的有效抑制剂。因此,我们检查了雌激素信号干扰的可能性。@nandini您是否考虑过您的文件不包含任何换行符的可能性?一些文本处理器只是包装文本而没有实际添加换行符。那么解决方案是什么呢