こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

CSVファイルの処理方法

PerlでCSVファイルの処理をしようとしています。

CSVファイル(ここではdata1.csvとします)の中身は、A列とB列に数値が1000行程表記されています。

-5,1
-4,2
-3,3
 ・
 ・
 ・

作成したPerlのファイル(ここではtest1.plとします)下のようにし、

while ($_=<stdin>){
print"$_\n";
}

Cygwinコマンド上で、

$ perl test1.pl <data1.csv

と入力すると、CSVファイル(data1.csv)の数値がCygwinコマンド上に全て表記されます。

前置きが長かったのですが、CSVファイル(data1.csv)の3行目までの数値だけをCygwinコマンド上に表記したい場合、どのようにプログラムすればよいのですか。

お願いします。

投稿日時 - 2012-10-14 15:49:57

QNo.7748176

すぐに回答ほしいです

質問者が選んだベストアンサー

この例だとCSVとか列とか全然関係無いですね。

常套手段として方針は2つ
(1)先に3行だけのCSVにする
(2)Perlで3行だけ

(1)なら、Cygwinの(というか、UNIX系OSで標準的な) headコマンドとセットにして
head -3 data1.csv | perl test1.pl

# headコマンドがなんだかわからなければ、man head を実行してみる。
# | (パイプ)がなんだかわからなければ、「標準入出力」「リダイレクト」「パイプ」あたりで検索して概念を覚えておくといろいろ便利

(2)なら、#1を参考に。

投稿日時 - 2012-10-14 16:27:58

お礼

回答ありがとうございます。

headコマンド、 | (パイプ)も教えて頂きありがとうございます。

投稿日時 - 2012-10-14 18:33:49

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

>CSVファイル(data1.csv)の3行目までの数値だけをCygwinコマンド上に表記したい場合、どのようにプログラムすればよいのですか。

意味が不明です。次のうちどれですか?
1.データをコマンドライン上で指定したい
2.データをファイルから読むのだが、ファイルのデータの前に3行分だけコマンドラインで指定したい
3.その他

1.の場合
$ ( echo -5,1; echo -4,2; echo -3.1 ) | perl test1.pl

2.の場合
$ ( echo -5,1; echo -4,2; echo -3.1; cat data1.csv ) | perl test1.pl

投稿日時 - 2012-10-14 16:13:00

お礼

回答ありがとうございます。

説明が良くなかったのですが、、、

やりたかったことは、CSVファイルのA列B列記載の数値を、(全ての行ではなく)3行目までコマンド上に表示です。

投稿日時 - 2012-10-14 18:34:06

ANo.1

Wr5

>3行目までの数値だけをCygwinコマンド上に表記したい場合

whileループで何行目まで処理したかカウントして、必要な行数処理したらループから抜ける。

$line = 0;
while ($_=<stdin>){
 print"$_\n";
 $line++;
 if($line == 3) last;
}

みたいな感じでしょうか。
まぁ、そういう場合ならforループにすると思いますが。

for($line = 0;$_=<stdin> && $line < 3;$line++) {
 print"$_\n";
}

でしょうかね。

CSVファイルかどうかは関係ないみたいですが……。

投稿日時 - 2012-10-14 16:05:45

お礼

回答ありがとうございます。

上記プログラムで実行出来ました。

投稿日時 - 2012-10-14 18:28:03

あなたにオススメの質問