プロが教える店舗&オフィスのセキュリティ対策術

現在、Perlにて外部のcsvファイルを読み込み、"重複行"と"空白行"を削除するプログラムを作成しています。
重複行を削除する部分は
------
open(IN, "csvtime.csv");
@data = <IN>;
close(IN);

@data = grep {!$count{$_}++} @data;

open(OUT, "> csvtime.csv");
print(OUT @data);
close(OUT);
------
でできたのですが、空白行を削除する部分がわかりません。
申し訳ないのですが、お教えいただけないでしょうか。

また、空白行で最初の空白行は残すようにしたいです。
よろしくお願いいたします。

例)
読み出しデータ
-----
(ヘッダ1行目)
(ヘッダ2行目)
(ヘッダ3行目)
(必要な空白)
(ヘッダ4行目)
00:00:00,302
00:01:00,274
00:02:00,272
00:03:00,248


00:04:00,237
00:05:00,239
00:05:00,239
00:06:00,256

00:07:00,260
00:08:00,250
00:09:00,253
00:10:00,241
-----

加工後データ
-----
(ヘッダ1行目)
(ヘッダ2行目)
(ヘッダ3行目)
(必要な空白)
(ヘッダ4行目)
00:00:00,302
00:01:00,274
00:02:00,272
00:03:00,248
00:04:00,237
00:05:00,239
00:06:00,256
00:07:00,260
00:08:00,250
00:09:00,253
00:10:00,241
-----

A 回答 (3件)

grepした後に、単純にforeachで回してみたら如何でしょう。



それとも、foreachは使いたくない??
    • good
    • 0
この回答へのお礼

foreachを使ってみたいと思います。
ありがとうございます。

お礼日時:2012/10/20 22:56

あれ、このコードで空白行削除されませんか?



読み出しファイルの「(必要な空白)」って最初の空白行ですよね?

>@data = grep {!$count{$_}++} @data;
これはハッシュに存在しないものだけ配列に格納してるんで、最初の空白行だけに整形されるはずですが。

空白行にひとつ以上のタブや半角・全角スペース文字が来たりしてたら動作しないとは思いますが。
    • good
    • 0
この回答へのお礼

実際のログファイルの容量が多く、手元になかったため、別のファイルを作成してテストをしていたのですが、
そのファイルにご指摘のように 空白 が入っていました。

実際のファイルを取り寄せ、実行したところ正常に動作していました。
ありがとうございました。

お礼日時:2012/10/20 23:04

@data = <IN>;


――でデータを読み込んでるなら、空行が「\n」で表されてるので、

@data = grep {!$count{$_}++} @data;
――で、望み通り最初の空行だけが出力されると。
「Perlで空白行を削除」の回答画像3
    • good
    • 0
この回答へのお礼

別の回答の返答にも書かせていただきましたが、テストのデータに空白が挿入されていたため、
正常に削除ができていませんでした。

実際にチェックまでしていただきありがとうございます。

お礼日時:2012/10/20 23:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています