2016-12-12 8 views
1

私はオンラインで検索して検索しましたが、私は何も動作していないようです。私はこれが愚かに簡単な質問であることを知っていますが、私は本当に立ち往生しています...CSVファイルのデータをPerlの配列に追加するにはどうすればよいですか?

私はファイルのディレクトリを持っていて、CSVファイルにディレクトリの名前を保存しました。単にデータなどの1列で構成されています:

100 
101 
102 
103... 

私は(ちょうどその関連する場合)ファイルを作成するには、次のコードを使用:

open (my $fileh, '>', '/Users/Shared/serials.csv') or die "Could not open file!"; 
print $fileh `ls -1 $path`; 
close $fileh; 
print "Saved Serials!"; 

私が望むすべてを読み込むことですファイル内のデータを配列に格納し、各値をループしてタスクを完了します。前述したように、私が代わりに自動的に書きたい、

@ser_list = (100,101,102,103,...); 

:私は

は現在、私は次のように、配列にコード内で手動で番号を入力しています...これを行う方法を見つけ出すことはできません lsコマンドラインクエリを使用してファイル名(数値)を取得し、そこからスクリプトに読み戻します。 これを行う方法があれば、別の値のファイルを作る必要はありません。

この例では、配列は@ser_listと呼ばれています。そこから、配列から次の$ ser_numを読み込み、ループ内でそれを処理しています。

foreach $ser_num (@ser_list) {....} 

ご協力いただきありがとうございます。

答えて

6

をPerlプログラムで使用しないでください。あなたは代わりにglobを使用することができます。

my @files = glob "$path/*"; 

あなたはパスとファイル名で作業する必要がある場合は、Path::Tinyを確認してください。ちょうど

open my $fh, '<', $filename or die $!; 
chomp(my @paths = <$fh>); 

を使用し、アレイへのパスを持つ行を読み取るために

openchomp、および詳細readlineを参照してください。

+0

デフォルトの 'glob()'は 'csh'に基づいており、ファイル名にスペースを入れません。 'glob()'関数を 'use File :: Glob qw(:bsd_glob);に置き換えてください。 – shawnhcorey

+0

@shawnhcorey:引数にスペースを入れません。空白を含むファイル名は大丈夫です。引数を区切りにしたくない場合は、引数のスペースをバックスラッシュする必要があります。 – choroba

+0

あなたは正しいです。それは、最も難しい原因となっている姓のスペースです。ディレクトリツリーを歩き回っているときは、ディレクトリ名のスペースをエスケープする必要があります。あるいは ':bsd_glob'を使って心配する必要はありません。 – shawnhcorey

関連する問題