アプリ版:「スタンプのみでお礼する」機能のリリースについて

perlを使用してcsv形式のテキストファイルを下記のように変換したいと思っています。

【変換前】
10, abc , def , ghi ,jkl    ----1行目
10, abc , def , aaa, bbb   ----2行目
10, abc , def , ccc , ddd  ----3行目
11, abc , def , eee , fff   ----4行目
11, abc , def , aaa , ggg ----5行目
11, zzz , def , aaa , ggg  ----6行目
12, abc , def , aaa ,ggg ----7行目
12, zzz , def, aaa , ggg   ----8行目

【変換後】
10, abc , def , ghi ,jkl    ----1行目
11, abc , def , eee , fff   ----4行目
11, zzz , def , aaa , ggg  ----6行目
12, abc , def , aaa ,ggg ----7行目
12, zzz , def, aaa , ggg   ----8行目

変換内容はcsv形式のテキストファイルで、”,”で区切った先頭3列が
前の行の先頭3列と同じならその行は出力しない、といった
変換をしたいと思っております。
(例えば2行目ですと先頭3列は10, abc ,defになっており、
 1行目の先頭3列と同じ文字列になっているためこの行は出力しない)

当方、Perl初心者で上記のようなことがPerlでできるかも
よくわかっておりません。
そこで、上記のような変換はPerlで可能なのか、そしてもし可能であるのなら
どのようにPerlで記述すればできるのか教えていただけないでしょうか。

よろしくお願いいたします。

A 回答 (1件)

そのまま実装しました。


省略表現が初心者には難しいかもしれませんが、その分見やすいと思います。
インデントは全角スペースになっています。

#!/usr/bin/perl
use strict;

my($m1, $m2, $m3);
open(IN, "in.csv") or die;
open(OUT, "> out.csv") or die;

while(<IN>){
 my($n1, $n2, $n3) = split /,/;
 if($n1 eq $m1 && $n2 eq $m2 && $n3 eq $m3){
  next;
 }else{
  ($m1, $m2, $m3) = ($n1, $n2, $n3);
  print OUT;
 }
}
    • good
    • 0
この回答へのお礼

教えていただいたとおりにやってみたところ
所望の結果が得られることが確認できました。
困っていましたので、本当に助かりました。
ありがとうございました。

お礼日時:2011/02/11 01:44

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