簡體   English   中英

在Perl數組中包含文件數據

[英]Include file data in Perl array

我試圖將文件中的所有數據傳遞到Perl數組中,然后嘗試使用foreach循環來處理數組中的每個字符串。 問題是foreach而不是打印每一行都在打印整個數組。我正在使用以下腳本。

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

foreach $n(@array) {
  print "$n\n";
}

舉例來說,數組中的數據為@array=qw(He goes to the school everyday)該數組可以正確打印,但是foreach循環而不是在不同行上打印每個元素,而是在打印整個數組。

閱讀您的評論后,我猜您的問題是您的源文件不包含任何換行符:即整個文件只是一行。 一些文本編輯器只是包裝文本而沒有實際添加任何換行符。

這個問題沒有“解決方案”。 您必須在所需的位置添加換行符。 您可以編寫腳本來執行此操作,但是我懷疑這樣做是否有意義。 這完全取決於您要如何處理此文本。

這是我對您的代碼段的建議。

chomp(@array = <FILE>);
s/[()]//g for @array;
print "$_\n" for @array;

要么

@array = <FILE>;
s/[()]//g for @array;
print @array;

請注意,如果您有另一個文件系統中的文件,則在chomp之后,您可能會在字符串的末尾留下\\r字符,從而導致輸出看起來已損壞,從而覆蓋了自身。

補充筆記:

  • (\\)|\\()最好寫為字符類: [()]
  • @array = <FILE>會將整個文件讀入數組。 無需循環。
  • 如我的示例所示,可以為print分配一個項目列表(例如數組)作為參數。 並且您可以有一個postfix循環來順序打印。
  • 使用(postfix)循環,所有循環元素都別名為$_ ,這是在數組上進行替換的便捷方法。

由於整個文件只有一行,因此您可以根據空格分割字符串並在新行中打印數組的每個元素

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 .....

輸出量

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM