CSVファイルの内容をまとめて表示する方法

このQ&Aのポイント
  • CSVファイルの内容をまとめて表示する方法を考えています。名前とURLの集計を行い、書き込み件数と各項目の出現回数を表示します。
  • 具体的には、CSVファイルのデータを読み込んで各行を解析し、名前とURLの出現回数をカウントします。その結果を集計して表示します。
  • 名前の集計とURLの集計は同じ方法で行えます。名前とURLをキーとしてカウントすることで、各項目の出現回数を求めることができます。
回答を見る
  • ベストアンサー

CSVファイルの内容をまとめて表示するには

現在CSVの内容をまとめて表示する方法を思考しています。 例えば(data.csv) ========================= [ID][名前][好きなページURL] [01][山田][http://yahoo.co.jp] [02][鈴木][http://google.co.jp] [03][山田][http://www.goo.ne.jp] [04][加藤][http://google.co.jp] [05][武田][http://yahoo.co.jp] ・ ・ ・ ============= 各項目はカンマ区切りのcsvファイルです。 このCSVファイルを下記のようにまとめて表示する方法を検討しています。 <集計結果表示> 書き込み件数 山田:2件 鈴木:1件 加藤:1件 武田:1件 <好きなURL集計結果> http://yahoo.co.jp = 2件 http://google.co.jp = 2件 http://www.goo.ne.jp = 1件 =========================-- といった具合です。 自分で考えたプログラムを下記に記載します。 <?PHP $Data = file("data.csv"); for($i=0;$i<sizeof($Data);$i++){ $line = explode(",",$Data[$i]); list($id,$name,$url) = $line; ここに名前の集計ができるプログラムを考えています。ここがわからず悩んでいます。 } echo "書き込み件数:{$n}件" ?> 名前の集計の方法がわかればURLの集計も同様の方法で解決が可能だと思うのです。 大変恐縮ですが、お教えいただけないでしょうか。 宜しくお願いいたします。

  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

こんな感じ <?PHP $fp = fopen("list.csv", "r"); while (($data = fgetcsv($fp, 1024))!==FALSE) { list($id, $name, $url) = $data; $WRITED[$name]++; $URLS[$url]++; } fclose($fp); echo "<集計結果表示>\n"; echo "書き込み件数\n"; foreach($WRITED as $name => $count){ echo "$name:{$count}件\n"; } echo "\n<好きなURL集計結果>\n"; foreach($URLS as $url => $count){ echo "$url = {$count}件\n"; } ?>

yun100
質問者

お礼

大変お忙しい中ご返信下さいまして本当にありがとうございました。 先ほど検証したところ、自分の理想通りに動くことが確認できました。 このプログラムを参考に、件数のソートはarsort()関数でソートができました。 BLUEPIXY様、お力を貸していただき本当にありがとうございました。

関連するQ&A

  • CSV形式のファイル名をCSVの先頭に入れる方法

    EXCEL CSV形式のファイル名をCSVファイルの先頭に入れるたいのですが,EXCELのマクロやBVなどで簡単にできるよい方法はないでしょうか。 例えば, ファイル名:  123_001.csv 123_001.csvの内容:  氏名,年齢  山田,25歳    ↓ の123_001.csvを  コード,氏名,年齢  123_001,山田太郎,25歳 というデータにしたいのです。 できれば,フォルダ内に保存されているCSVファイルを一括で処理したいのですが...。 例) 123_001.csvの内容:  氏名,年齢  山田,25歳 123_002.csvの内容:  氏名,年齢  吉田,30歳 123_003.csvの内容:  氏名,年齢  鈴木,50歳    ↓ 123_001.csvの内容:  コード,氏名,年齢  123_001,山田,25歳 123_002.csvの内容:  コード,氏名,年齢  123_002,吉田,30歳 123_003.csvの内容:  コード,氏名,年齢  123_003鈴木,50歳 よろしくお願いします。

  • CSV形式での集計

    PHPでクイズのプログラムを作ったのですが、 CSVデータの件数が多いので処理に時間がかかり、 回答の集計で困ってます。 具体的に、 PHPクイズの回答をCSV形式でanswer.txtに記録させます。 記録の内容は、 問題1の回答番号、問題2の回答番号、問題3の回答番号、 というように記録させます。 このとき、1万件くらいの回答データが入ったanswer.txtから、 問題1で回答番号を1で答えた人の数、2で答えた人の数というように、 データの集計をしたいのですが、 効率の良い集計方法を教えていただければありがたいです。 自分が考えたのは、 1.file文で全行一括読み込みしてから 2.for文でデータを検証(総データ数分だけ繰り返す) 3.回答番号が一致したら、flagに+1をする 4.flagの数が集計結果となり、これを出力する というルーチンです。 1万件くらいになると、あまり速くないです。 ちなみに、このルーチンで処理できるデータ件数って、 どのくらいが限度となるんでしょうか。 文章が稚拙で、長くなってしまい、すみません。 よろしくご指導、お願いします。

    • 締切済み
    • PHP
  • Excelで名寄せしてデータ個数を集計する方法

    このような表があります。 001 山田 001 山田 002 鈴木 003 田中 004 高橋 004 高橋 005 鈴木 005 鈴木 005 鈴木 006 高橋 007 鈴木 008 鈴木 この名前(「山田」等)を基準にして名寄せをし、かつデータ個数を集計しなくてはなりません。 普通に集計をすると、 001 山田 001 山田 山田 データ個数 2 002 鈴木 鈴木 データ個数 1 003 田中 田中 データ個数 1 004 高橋 004 高橋 高橋 データ個数 2 005 鈴木 005 鈴木 005 鈴木 鈴木 データ個数 3 006 高橋 高橋 データ個数 1 007 鈴木 008 鈴木 鈴木 データ個数 2 ・・・という具合になりますが、番号(001等)の枠を超えて名寄せしたいのです。 希望する集計結果としては、 001 山田 001 山田 山田 データ個数 2 002 鈴木 005 鈴木 005 鈴木 005 鈴木 007 鈴木 008 鈴木 鈴木 データ個数 6 003 田中 田中 データ個数 1 004 高橋 004 高橋 006 高橋 高橋 データ個数 3 ・・・という表示になるようにしたいのです。(番号も必要データなので消去せずに残したいです) 今までは、番号&名前レベルでまず集計し、あとは検索して同じ名前があればカット&ペーストという非常に面倒な作業をマニュアルでしてきました。 何かもっと楽にできる方法をご存知の方はぜひ教えてください。

  • Fortranでcsvファイルを読むには?

    はじめまして、プログラム超初心者です。 今エクセルで作ったデータがあるのですが それをcsvファイルで保存し、 プログラムを回して集計しようと思うのですが 読み込む形式をどのようにしたらいいのでしょうか? 125、14、近藤、5 52、、南、1 このようになっていると I3,A,I2,I4,I というようにその列の最も大きいデータを 読むようにすればいいのでしょうか? 全く良くわかっていませんが 誰か救いの手を差し伸べてください。 お願いしますm(__)m

  • CSVファイルのダウンロード方法について

    CSVファイルのダウンロード方法についてご教授願います。 (いろんなサイトやFAQをみてきましたが、いまいちわからなかったのでここで質問させていただきます。) 現在、 (1)アンケート項目データ採取.cgi(集計プログラミング込み)…ブラウザ上表示はではcgiにhtmlテンプレートを読み込み ↓ (2)集計.CSVにてデータ集計 ↓ (3)検索.cgiにて(2)集計.CSVのソートや詳細の検索ができる ---------- 他、(4)修正phpがあり、(2)集計.cgiを集計できます。 ---------- (1)、(3)、(4)各ページで<a href="***/***/集計.csv">_CSVダウンロード_</a>なるものをリンク表記したのですが、ダウンロードできません。 どうしたらよいでしょうか?

    • 締切済み
    • CGI
  • PHPで指定件数のデータを表示させる方法

    お世話になっております。 下記のようなPHPブログラムでitem.csvのデータをランダムに指定件数表示させようと思っています。 このままですとデータは1件か2件表示され、$i<=3にすると2件か3件表示されます。 require_once('common.php'); $Data=file('item.csv'); shuffle ($Data); for ( $i=1; $i<=2; $i++ ){ $line=explode(",",$Data[$i]); print($line[2]); print($line[3]); } これを1を設定すれば1件、3を設定すれば3件というように、数字の件数を表示させたいと思います。 ご教授いただければ幸いです。よろしくお願いいたします。

    • 締切済み
    • PHP
  • csvファイルをAccessに取り込むとデータ数が増える

    項目をカンマで区切っただけの単純なcsvファイルをAccessでインポートしてテーブルを作成したら、データ数が増えてしまいました。 (csvファイルをテキストで開いたときの行数と、Accessの行数が異なる) 5000件ぐらいなら、csvもAccessもデータ数は同じなのですが、データ数が大きくなると、csvとAccessのテーブルで6万件とかの差分が出てしまいます。 csvファイルとAccessで、データ数を同じにするにはどうしたら良いでしょうか。 参考になるURLでも良いので、教えて頂ければと思います。 よろしくお願いします!

  • Excel2007条件付きで重複分はカウントしない

    以下のようなCSVデータがあり、A列、B列、C列のみを使用して 集計を行うことになりました。B列のランクは8種類あります。 A列  B列   C列 地域  区別  担当 東京  高    山田太郎 東京  中    山田花子 埼玉  高    佐藤太郎 東京  中    山田太郎 東京  高    山田太郎 東京  花    佐藤花子 埼玉  夢    加藤太郎 地域と区別については、counfifやsumproductを使用して、 以下のような感じでカウントすることができました。 地域  件数  「高」 「中」……  東京  4件  3件  2件…… 埼玉  2件  1件  0件…… 今回、「重複するデータは1として数える」ということになり、 お力を貸していただきたく書き込みさせていただきました。 ・「地域」で重複分を1としてカウントした件数 ・「地域」と「区別」を条件に重複分を1としてカウントした件数 上記の件数をカウントしたいのですが、 何かいいアイディアがございましたらご教授お願いいたします。 地域  件数  「高」 「中」…… 東京  3件  1件  2件…… 埼玉  2件  1件  0件……

  • CSVを「,」区切りでわける方法について

    PHPのプログラムで以下のようなCSVを「,」区切りで分解する方法を教えてください。 山田,太郎,"123,000",鈴木,康嗣 ← CSVの1行(サンプル) 上記のCSVを「,」区切りで以下のように区切りたいと思っています。 山田 太郎 123,000 鈴木 康嗣  しかし普通に分解すると「123,000」も「123」と「000」に分解されてしまいます。 「123,000」は、金額を表すのでここだけは、分解したくないのです。  なんとなく正規表現でできそうな気がするのですが、勉強があまりできてないせいか、 よく分かりません。どのようにすればいいのでしょうか?よろしくお願いいたします。  使用する関数は、「preg_split()」、「split()」、「preg_match()」を使って作ろうとしています。

    • ベストアンサー
    • PHP
  • 二つのCSVを共通のカラムで照合して1つのファイルに

    お世話になります。 今回の質問は、分かりやすく言うと シェアウェアの「ズバリ自動化」の 結合機能のみを再現するエクセル用マクロを知りたい、ということです。 http://shop.vector.co.jp/service/catalogue/sr049619/ (上記ソフトは持っていません) 質問を図示してみます。 データ量は少ないのですが、 毎日の作業なので、一発でできれば最高です。 まず二つのCSVがあります。 注文データ(A)と発送データ(B)です。 (*は任意のデータです。) CSV(A)   A B C  D    E F G H I 1 * * * 佐藤A作 * * * * * 2 * * * 鈴木B三 * * * * * ・・・・・・・ 数行続きます。 CSV(B)   A B  C    1 * * 佐藤A作 2 * * 鈴木B三  ・・・ 氏名を照合カラムとして、それ以外のデータを結合して、 (注:CSV(B)の氏名を除いた後ろにCSV(A)を追加する) 別ファイルとして、出力するにはどういうマクロを使うのか? ということです。 二つのCSVでは名前の出てくる順序が違う場合があります。 また、 CSV(B)には(A)にない氏名も入っているので、 その場合、(B)のデータのみ引き継ぐようにするのも条件です。 よろしくお願いいたします。