例えば下記のようなメールアドレスが重複していて、その後ろのデータなcsvのファイルがあります。
aaa@aaa.aaa,りんご,123
aaa@aaa.aaa,みかん1,456
aaa@aaa.aaa,いちご2,789
bb@xxx.xx,データ1,098
bb@xxx.xx,データ3,028
bb@xxx.xx,データ2,198
cccc@cc.cc,ライオン,555
cccc@cc.cc,象,634
これを以下のように
重複しているメールアドレスのデータを一つにまとめたいのですがなにかいい案はないでしょうか?
aaa@aaa.aaa,りんご,123,みかん,456,いちご,789
bb@xxx.xx,データ1,098,データ3,028,データ2,198
cccc@cc.cc,ライオン,555,象,634
使用ツールはエクセル。
言語だったらperlかPHPでお願いします。
テキストエディタは何をお使いでしょうか?
秀丸エディタをお使いでしたら、そのマクロで簡単に実現できますが。
http://hide.maruo.co.jp/index.html
http://www.vector.co.jp/vpack/browse/pickup/pw0/pw000054.htm...
秀丸エディタ実行中に
メニューバーから
マクロ(M)⇒マクロヘルプ(H)
をご覧ください。
これらのマクロを用いて、処理手順は自分で作成します。
論理は簡単ですよね。
#!perl
$\ = "\n";
$FS = ',';
while (<>) {
chomp;
@Fld = split(/[,\n]/, $_, -1);
for ($i = 1; $i <= $#Fld; $i++) {
$list{$Fld[0]} = $list{$Fld[0]} . ',' . $Fld[$i];
}
}
foreach $item (keys %list) {
print $item . $list{$item};
}
AcitvePerl 5.8.8で確認しました。
gawkの1行野郎
$ awk 'BEGIN{FS=","} {for(i=2;i<=NF;i++){list[$1] = list[$1]","$i}} END{for(item in list){print item list[item]}}'
をa2pで変換したものを一部修正しました。
連想配列は出力の順番が不定なのでソートは別に行ってください
ありがとうございます。
この処理でちょっと手を加えてできました!!
$csv = file('hoge.csv');
foreach($csv as $line){
$values = explode(',',trim($line));
$list[$values[0]] = $values[0];
for($i=1;$i<count($values);$i++){
$list[$values[0]] .= $values[$i];
}
}
foreach($list as $line){
echo $line."\n";
}
確認してませんが PHP だとこんな感じでしょうか。
連想配列の key を使えばもう少し簡単に書けそうですが。
ありがとうございます。
秀丸エディタ使用してますがマクロを使ったことがないので、どのマクロをどうやって使えばいいのか・・・