複数ファイルから合計&ソートについて

このQ&Aのポイント
  • 複数のファイルから合計を出し、数字の大きい順に表示する処理について
  • 各フォルダに同一のファイル名で存在する複数のファイルの中身を合計し、数字の大きい順にソートする方法について教えてください
  • ファイルの中のデータを合計し、数字の大きい順に表示する処理について教えてください
回答を見る
  • ベストアンサー

複数ファイルから合計&ソートについて

はじめまして、こんにちわ。 下記の処理がわからなくて困っています(^^; どなたか知恵を貸して頂ければ幸いですm(_ _)m 処理したいのは複数のファイルから合計を出し、数字の大きいものから順番に表示することなのです。 ファイルは各フォルダに同一のファイル名で存在します。 例: ./1/data.dat ./2/data.dat ./3/data.dat といった感じで 各data.datファイルの中身は 例(./1/data.dat): Aさん,56,… Bさん,28,… Cさん,75,… 例(./2/data.dat): Dさん,12,… Eさん,90,… Fさん,100,… といった感じです。 これを数字の大きい人からソートすると F・E・C・A・B・Dさん となるような感じの処理をご教授くださいm(_ _)m

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

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

  • ベストアンサー
  • Dpop
  • ベストアンサー率51% (279/544)
回答No.1

ロジックだけですが。。。 まず、それぞれのファイルをソートして置き、テンポラリファイルへ書き出して置きます。 次に、各ファイルから、1行づつ読み込んで行き、値の多いものを取り出し、取り出したファイルからは、次の1行を読み込みます。 これを繰り返すと、望みの通りソートされます。実際には、2ファイル以上同時に行うと、処理が面倒になるので、2ファイル単位に行い、途中の情報はテンポラリファイルへ吐き出す。と言う方法を利用するのが一般的な方法です。 こういう処理を「マージ処理」と言います。 もっとも、データ数が多く無いなら、連想配列に読み込みソートすれば良いような。。。 とも思いますが。 データ数が多い事が想定される場合には、マージ処理を行うことで解決します。

関連するQ&A

  • 2006/5/20形式、複数フィールドのソート

    ↓のような感じでデータが入っているとします。 @hogehoge = [ 1020,2006/5/13,B 1020,2006/5/1,B 1020,2006/5/1,C 1020,2006/5/13,E 1023,2006/5/2,D 1020,2006/5/20,D 1023,2006/5/7,C 1020,2006/5/9,E 1022,2006/5/9,D }; これを第1フィールド、第2フィールド(年月日)、第3フィールドの順でソートしたいのですが、具体的にどのようにやればよいのでしょうか? 一番困る点が、2006/05/20形式で保存してあるという 点です。これはやはり分解しないとソートできない のでしょうか?そうなると複雑になります。 http://www.din.or.jp/~ohzaki/perl.htm#SortST は見て試しに作ったのですが、うまくソートされません。 データがそのまま保存されています。 上のURLにある文章を読んだので、特定のフィールドを もとにソートする方法は大体わかりましたが、複数フィー ルドのソートや2006/05/20形式のソートもまじってくる のでわからなくなります。 @hogehoge = [ 1020,2006/5/1,B 1020,2006/5/1,C 1020,2006/5/9,E 1020,2006/5/13,E 1020,2006/5/13,B 1020,2006/5/20,D 1022,2006/5/9,D 1023,2006/5/2,D 1023,2006/5/7,C }; こんな感じでソートさせて保存(書き込み)したいので すが、ご教授よろしくお願いします。

    • ベストアンサー
    • Perl
  • 配列のソートについて質問です。

    配列のソートについて質問です。 2つのキーで配列の中身をソートしたいのですが、スマートな書き方があれば教えてください。 そもそも間違っている、などのご指摘でもありがたいです。 @t1 = map {(split /,/)[1]} @data; @t2 = map {(split /,/)[2]} @data; @data = @data[sort {$t1[$a] <=> $t1[$b] or $t2[$a] <=> $t2[$b]} 0 .. $#t1]; @dataの内容 A,1,2 B,1,3 C,2,1 D,3,2 E,3,1 F,1,1 出力結果 F,1,1 A,1,2 B,1,3 C,2,1 E,3,1 D,3,2 よろしくお願いします。

    • ベストアンサー
    • Perl
  • phpでのソートについて

    phpのソートについて教えてください。 以下のようなカンマ区切りのログファイルlog.txtがあるとしまして、 100,200,a,b,c, 300,100,d,e,f, 500,60,g,h,i, 50,300,j,k,l, 1000,60,m,n,o, このデータから 1番目のデータ(数値)が2番目のデータ(数値)より大きいデーターのみを対象にして ※つまりは以下のみ対象 300,100,d,e,f, 500,60,g,h,i, 1000,60,m,n,o, ここから1番目のデータ(数値)から2番目のデータ(数値)を引いた数が大きい順に ソートしてファイルに保存させたいのですが、 200,d,e,f,(300-100なので200) 440,g,h,i,(500-60なので440) 940,m,n,o,(1000-60なので940) ↓ ※最終的にこの順番で新しいログファイルnewlog.txtへ保存させたい 940,m,n,o, 440,g,h,i, 200,d,e,f, これらの処理を効率よく1度で行う方法はございますでしょうか。 わかりにくい説明で申し訳ありません。 お忙しい中恐縮ですがご教授いただけましたら幸いです。 何卒宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 【Excel2010】複数の範囲をソートするには?

    初めまして、dtraと申します。 早速ですが質問を。 Excel2010を使用しているのですが、以下のような状態でExcelの機能・またはマクロを使ってソートをする方法はあるでしょうか? 1枚目 氏名 データ1 データ2 データ3... Bさん... Cさん... Dさん... 2枚目 氏名 データ1 データ2 データ3... Eさん... Fさん... と、データ数が多くなり印刷時の用紙が2枚以上になってしまう時に、 1枚目 氏名 データ1 データ2 データ3... Bさん... Cさん... Dさん... 2枚目 氏名 データ1 データ2 データ3... Eさん... Fさん... Aさん... このようにAさんのデータを入力した後、 1枚目 氏名 データ1 データ2 データ3... Aさん... Bさん... Cさん... 2枚目 氏名 データ1 データ2 データ3... Dさん... Fさん... Gさん... と、名前の昇順で全体をソートしたいのです。 今の所はデータを配列に格納してから新たに書き込ませる方法を取っていますが、データ量が多くなる事が予想されるので何か方法が無いかと質問に来ました。 解決策が思い浮かぶ方、どうか回答をお願いします。

  • こんなソートがしたいです。教えてください!

    エクセル2003で 下記のようなデータをソートし、 【ソート前】 2208550 92059184 92059174 92059174B 92059174A 92059174C 1348535 19777225 2519034 2519034D 2519034B 2519035A 2519035C 【ソート後】 1348535 19777225 2208550 2519034 2519034B 2519034D 2519035A 2519035C 92059184 92059174 92059174A 92059174B 92059174C 上記ソート後の結果を得られるマクロを作りたいです。 よろしくお願いいたします。

  • 多段ソート

    C言語というよりはアルゴリズムの話です。 [名前], [生年月日] の2つのカラムで表される固定長の行データが羅列されたファイルがあります。 また、各カラムを比較して行をソートした場合にどの行が何番目にくるかといったインデックス情報を木構造で保持したファイルがあります。 (このファイルは行データの追加・削除時に更新される) これらのファイルを利用して、生年月日でソートし、かつ日時が同じ場合は名前順にソートした場合の上から10個分だけのデータを取り出したいのですが、効率のよい方法は無いでしょうか? 全データを読み込んでから、バブルソート等の順序を崩さないソートを多重にかけることはなるべく避けたいのです。 そのためにソート済みのインデックス的な役割を持つファイルを用意しているのですが、多段ソート時にどう応用すればよいのかわからなくなってしまいました。 例 日時、名前の順にソートされた上4つ分のデータが欲しい。 【一覧】 [1行目] 10/20, Aさん [2行目] 11/30, Fさん [3行目] 9/10, Cさん [4行目] 11/30, Bさん [5行目] 12/10, Dさん 【生年月日でソートされた インデックス】 9/10, 3行目 10/20, 1行目 11/30, 2行目 11/30, 4行目 12/10, 5行目 【名前でソートされた インデックス】 Aさん, 1行目 Bさん, 4行目 Cさん, 3行目 Dさん, 5行目 Fさん, 2行目 得たい結果 [3行目] 9/10, Cさん [1行目] 10/20, Aさん [4行目] 11/30, Bさん [2行目] 11/30, Fさん

  • powershellでのソート

    powershellでのソート処理に関して教えてください。 list.csv F1,F2,F3 file01.txt,c:\dirA,100kb file20.txt,c:\dirC,100kb file100.txt,c:\dirG,100kb file200.txt,c:\dirG,100kb CSVで上記の様なデータがあり、F1のデータにおいて、 ファイル名の数字部分でソートしたいのですが、 意図したソートができません。 数字を考慮してのソートってどうやればよいでしょうか。 PS c:\>Get-Content .\list.csv|ConvertFrom-CSV |Sort-Object f1 F1 F2 F3 -- -- -- file01.txt c:\dirA 100kb file100.txt c:\dirG 100kb file20.txt c:\dirC 100kb file200.txt c:\dirG 100kb file01.txt→file02.txt→file100.txt→file200.txtの並びでソートさせたいです。 よろしくお願いします。

  • [Excel]複数の要素が合致するレコード数をカウントする

    Excelにおいて 1,A,B,C,D,E,F, 2,A,C, 3,E,D,C,A, 4,B,E,F,A, 5,D,A,F,C,B, のようなデータがあったとして(数字はレコード番号で、コンマはエクセルのセル区切りだと思ってください。) このデータから「"A"と"C"が両方含まれるレコードの数」 (この場合は4件)を抽出するには、どのように関数を組み合わせればよいでしょうか? ちなみに要素A~Fはソートされておりません。 COUNTIF,VLOOKUPやMATCH関数を使いそうなことはなんとなくわかるのですが、詳しい方よろしくご教示ください。

  • またまたエクセルの関数?ソート??

    甘えてすみません。またご指導願います。 A A A A B C C C D E E F というようなリストがあります。 このリストから B D F だけを省く。 (一回しかでてこない数字を全て省く) というような方法はありますでしょうか? A,B,C,D,E,Fはそれぞれ7桁の数字です。 同じアルファベットは、同じ数字です。 横のセルにも必要情報が入っています。 意味解っていただけるでしょうか・・・・・ すみません・・

  • 配列のソートについて

    配列をソートした時、もともとデータのあった配列番号を記憶しておきたいのですが いい方法はないでしょうか (31,55,84,20,96,14); //1 2 3 4 5 6 ↓ (14,20,31,55,84,96) //6 4 1 2 3 5    ※ソート前の配列番号 いくつかの行(配列A)の、違う列にあるデータを抜き出して配列Bにまとめた後、配列Bをソート その後、配列Bのもともとの順番の位置の行にあるデータを上からコピーしていく感じで行ごとのソートを考えています イメージはこんな感じです a[0]=[1,512,200]; a[1]=[3,100,1]; a[2]=[4,100,265]; a[3]=[8,300,1]; //ソート対象を抜き出す b[0]=a[0][1]; b[1]=a[1][2]; b[2]=a[2][0]; b[3]=a[3][1]; b.sort(); c[0]=a[b[0]のソート前の配列番号]; c[1]=a[b[1]のソート前の配列番号]; c[2]=a[b[2]のソート前の配列番号]; c[3]=a[b[3]のソート前の配列番号];

専門家に質問してみよう