人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

csvファイルの編集について質問です。

例えば下記のようなメールアドレスが重複していて、その後ろのデータな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でお願いします。

●質問者: pipi_n
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:555 AAA BB CC CSV
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● mkonomi
●15ポイント

テキストエディタは何をお使いでしょうか?

秀丸エディタをお使いでしたら、そのマクロで簡単に実現できますが。

http://hide.maruo.co.jp/index.html

http://www.vector.co.jp/vpack/browse/pickup/pw0/pw000054.htm...

http://www.vector.co.jp/soft/win95/writing/se086280.html

◎質問者からの返答

ありがとうございます。

秀丸エディタ使用してますがマクロを使ったことがないので、どのマクロをどうやって使えばいいのか・・・


2 ● mkonomi
●10ポイント

秀丸エディタ実行中に

メニューバーから

マクロ(M)⇒マクロヘルプ(H)

をご覧ください。

これらのマクロを用いて、処理手順は自分で作成します。

論理は簡単ですよね。


3 ● n_koji72
●50ポイント

#!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で変換したものを一部修正しました。

連想配列は出力の順番が不定なのでソートは別に行ってください

◎質問者からの返答

ありがとうございます。

この処理でちょっと手を加えてできました!!


4 ● okuryu
●15ポイント

$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 を使えばもう少し簡単に書けそうですが。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ