• ベストアンサー

プログラミング初心者です。CSVファイルのデータ編集がうまくできません。

学校の課題が全く進まなくて困ってます・・・ 問題:「販売日」,「顧客名」,「商品名」,「単価」,「数量」のデータがコンマ区切りで記述されているCSV ファイルが与えられたとする. そこで,以下のことを実行するプログラムを作成せよ. 1. CSV ファイルのデータに加え,各行に「売上金額」のデータを追加したファイルを出力する.  なお,「売上金額」は「単価×数量」である. 2.顧客別の売上金額を記述したCSVファイルを出力する.なお,売上金額の降順でデータを記述すること. 3. 商品別の売上金額を記述したCSVファイルを出力する.なお,売上金額の降順でデータを記述すること. 4. 商品別の販売数を記述したCSVファイルを出力する.なお,販売数の昇順にデータを記述すること. 与えられたCSVファイルの一部↓ 販売日,顧客名,商品名,単価,数量 2006/4/1,菓子工房 春,季節のアイスセット,1800 ,5 2006/4/1,有)井上製パン,ゼリーセット,1500 ,3 2006/4/4,グルメット下条,クッキー詰め合わせ,2300 ,2 2006/4/4,北野フルーツプラザ,フローズンフルーツ,2200 ,6 2006/4/5,TEA LON,紅茶ケーキ,1000 ,2 2006/4/5,北野フルーツプラザ,フローズンフルーツ,2200 ,1 2006/4/8,有)井上製パン,シナモンパンセット,900 ,4 ・・・ 1はなんとかクリアできたのですが、2以降で完全に詰まりました。 顧客別(商品別)に売上をまとめる方法が思いつかないんです。 どなたか知恵を貸していただけないでしょうか・・・

  • Perl
  • 回答数2
  • ありがとう数6

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

  • ベストアンサー
回答No.1

自分だったら、顧客(商品)をキーとして、CSVの行を値とするハッシュ(連想配列ともいう)を使って実装すると思います。まずは値の昇順、降順を考えずにCSVの行になるような形式で追加だけしていって、出力するときにsplitしてsortして、出力します。 というのでどうでしょうか?

kapperxxxx
質問者

お礼

お礼遅れて申し訳ありません、おかげさまでどうにか提出に漕ぎ着けることができました! 取っ掛かりすら見いだせていなかったので本当に助かりました。ありがとうございました。

その他の回答 (1)

  • kuroizell
  • ベストアンサー率55% (95/170)
回答No.2

while等で一行毎に読み込むのはOKですね? 次は各行を配列に入れます。 顧客名をキーとして、売上(単価×数量)をハッシュに入れましょう。 最後はソートして、各キーとハッシュ値を出力しておしまいです。 $a<=>$b ←こんなのに見覚えがあればソートも上手く行くと思います。

kapperxxxx
質問者

お礼

お礼遅れて申し訳ありません。「顧客名をキーとしたハッシュ」というアドバイスをもとになんとか解決できました。本当にありがとうございます。

関連するQ&A

  • カンマ区切りのCSVファイルから""を削除したい

    初めて質問いたします 以下のような形式のCSVファイルがあります 例) 品名,数量,単価,金額 "りんご",1,150,150 "バナナ",10,200,2000 "メロン","1,000","2,000","2,000,000" 上記のように、品名にはダブルクォーテションがつき、 数量、単価、金額については桁区切りのカンマが発生する場合、ダブルクォーテーションで囲まれています 上記のようなデータを りんご,1,150,150 バナナ,10,200,2000 メロン,1000,2000,2000000 のように別ファイルへ出力するにはどのようにすればよいでしょうか? プログラムでの処理で、WSHを使ったものを教えていただけますと、幸いです よろしくお願いいたします

  • CSVファイルを自動で加工したいのです

    お世話になります。データをダウンロードすると、添付ファイルの水色部分のようになります。 そのCSVファイルを元に、売り上げ明細(納品書)を作成する際、今までは、データをダウンロード後、エクセルに落とし、1行のデータにするために、 1.必要な項目列(添付ファイルの水色の部分)(型番2、商品名2、数量2、単価2、型番3、商品名3、数量3、単価3・・・・単価5)を挿入します。 2.水色の部分を挿入した項目列にコピー&ペーストします。 3.数量*単価を計算します。(単価の隣に列を挿入し計算し、その後、値でコピーしています) 4.アクセスに取り込み、納品書をプリンターします。 以上が簡単な手作業の手順です。 当方、BV,マクロ記述の知識はありません。 毎回のダウンロードは、同じ項目、順番です。 アクセスに取り組む際は、『1行』でないといけないという固定観念がありますが、 当方のスキルがもっとあれば、CSVファイルをアクセスに直接取り込める方法があるのでしょうか? できるだけ作業を減らしたいという考えからの、おもいつき程度のことです。しかしながら、元のCSVファイルは、1発注1行形式のデータ形式でないため、やはり無理なのか? とも思います。 作業1から3までを自動でできたら、どんなに効率が良いかと何度もトライしましたが、出来ずに ずっと悩んでおります。 どなたかの確かなスキル(BV記述例)、アドバイスをお願い致したく、投稿いたしました。 よろしくお願い致します。

  • CSVファイルからEXCELへのインポート

    下記の項目のCSVファイルをEXCELにインポートしようと思っております。 得意先コード、得意先名(漢字)、商品コード、商品名、売上数量、売上金額 このCSVファイルをEXCELにインポートする際、得意先ごとに別のシートにしたい(シート名は得意先名としたい)場合どのようにすればよいのか、アドバイスいただければと思っております。 宜しくお願い致します。

  • エクセルで行数の多いCSVデータの集計方法

    はじめまして。 会社の売上げデータを集計していてわからないことがありご質問させていただきます。 得意先の納品伝票のデータをCSVで出力してそれをエクセルのピボットテーブルで月間の日別商品別の納品数量の表を作っていたのですが、データ件数が多くなり65535行を超えてしまいデータが全て表示できなくなってしまいました。CSVで出力するデータの日付の範囲を一ヶ月ではなく、半月ごとに分けて2つのファイルにして集計しようと思ったのですが、うまく集計する方法がわかりません。このような場合どうやってやるのがよいのでしょうか。 CSVデータは例えて書きますと以下のような配置です。 日付・便・商品名・店舗名・数量・金額・その他・・・ 8/1   1   ビール  名古屋  5   50  8/1   1   日本酒  大阪   3   150 8/2   2   ビール  札幌   4   40 8/3   1   焼酎   東京   2   80 8/3   1   焼酎   名古屋  1   40 このうち店舗別には集計しない為8/3の1便の焼酎の数量は3として集計します。 ピボットテーブルでは縦に商品名、横に日付、でその数量を集計します。また、シートに便を指定できるようにしています。 当社には専門のプログラマーがおらず、業者の方に依頼すると高額な費用が掛かってしまうため予算が無い私には自分で何とかするしか方法が無いです。 どなたかよい方法を教えて頂けませんでしょうか。 よろしくお願い致します。

  • アクセス・ファイルメーカーを使っての枝番処理

    はじめまして。データベースソフトに外部CSVファイルを取り込んで伝票処理を行いたく思っています。 取り込むCSVファイルには 伝票番号 枝番 品名 数量 123456  1  ○○  2 123456  2  △△  5 123456  3  ■■  9 123457  1  ◎◎  3 123457  2  ※※  6 ~~~~~~~~~~~~~~ このような感じのCSVデータをデータベースソフトに取り込みたいのですが、一つのレコードに同一伝票番号のデータを多段にして枝番フィールド順に取り込む事は可能でしょうか? 伝票番号 123456 品名1  数量 単価 金額 品名2  数量 単価 金額 品名3  数量 単価 金額 品名4  数量 単価 金額 ~~~~~~~~~~~~ 品名10 数量 単価 金額 ------------------------- 合計      合計金額 こんな感じで表示されたいです。 お知恵を貸してください。

  • CSVデータから納品書を作成したいのですが

    注文番号別に納品書を作りたいと思っています。 エクセルで開くと1商品につき1行のCSVファイルがあります。 そのデータを、作成したフォーマットを使って、注文番号毎に印刷がしたいです。 たとえば、 注文番号  商品  単価  数量  注文者名 1234  ああ  30   1  いろはに 1234  いい  40   2  いろはに 1234  うう  50   3  いろはに 2345  ああ  30   1  ほへとち 2345  うう  50   5  ほへとち 3456  いい  40  10  りぬるを というCSVデータの場合、注文番号別に3枚の納品書が印刷されるのが目的です。 使用するCSVデータの内容は毎日異なります。(もちろん項目名等は固定です) ワードの差し込み印刷かと思いましたが、注文番号別に行を認識させて読み込ませる方法がわかりませんでした。 エクセルかワードで実現できれば幸いです。 ただし、CSVデータは一切編集せずに実現させたいと思ってます。 よろしくお願いいたします。

  • 行をまとめる計算式

    エクセルで以下のような表があるとします。 顧客 商品名 販売数量 コスト 売単価 売上 ああ かかか 10 200 300 3000 ああ ききき 10 300 400 4000 いい かかか 10 200 300 3000 いい かかか 10 200 300 3000 いい ききき 10 300 400 4000 うう かかか 10 200 300 3000 うう ききき 10 300 400 4000 うう ききき 10 300 400 4000 うう ききき 10 300 400 4000 この表を以下のようにするにはどうしたらいいでしょうか? 顧客 商品名 販売数量 コスト 売単価 売上 ああ かかか 10 200 300 3000 ああ ききき 10 300 400 4000 いい かかか 20 200 600 6000 いい ききき 10 300 400 4000 うう かかか 10 200 300 3000 うう ききき 30 300 400 12000 つまり、顧客と商品名が同一の行は、販売数量と売上を合計して一行にまとめてしまいたいと考えています。 上記の表からは分からないようになっていますが、売単価は基本的に顧客ごとに違います。コストは同じ顧客の中でも違うことがあり、顧客と商品名が同一の行があった場合、その平均値を出したいと考えています。 一番目の表を元に別シートに二番目の表を作成したいと考えています。 二番目の表のそれぞれの列にどのような計算式を入れればいいでしょうか? ご教示お願いいたします。

  • CSVファイルへ出力

    jspとjavaBeansを使用しています。 顧客情報をDBから検索して明細を画面出力し帳票印刷する ために、データをCSVファイルへ出力したいのですが、 どうやってCSVファイルへ出力するのでしょうか? ごく簡単な形式でいいので教えて下さい。

    • ベストアンサー
    • Java
  • ファイルメーカーでcsv出力

    ファイルメーカーのcsv出力で質問があります。 明細テーブルと顧客テーブルの内容を連結してcsvファイルを出力したいのですが、 (明細テーブルの内容に顧客テーブルより顧客名称を付与する) どういった方法で出力するのが良いのでしょうか? ちなみに件数は毎回1000件前後です。 今は出力するcsvファイルのレイアウトのテーブルcを作成し、 いったん明細テーブルをインポートし、その後顧客テーブルより顧客名称を設定、 その後エクスポートでテーブルcのcsvファイルを出力しています。 あまり余計なテーブルを増やしたくないので 他に良い方法があればと思い質問しました。 よろしくお願いします。

  • 飲食店のレジデータの編集

    お世話になります。 飲食店で新しいレジを導入したのですが 経営管理ソフトが高くて購入できません。 商品別の番号、部門、個数、売上金額が毎日CSVでメモリーに記録されています。 今はエクセルシートに毎日データを貼り付けています。メニューの変更(単価や新商品)が生じた場合など整理が大変な状況です。 CSVのファイルをそのまま読み込めて整理表示してくれる機能を持ったソフトを作製するにはどうすればいいでしょうか?また、この様な機能を持った格安ソフトは有りますでしょうか?