• 締切済み

CGIでgrap関数を使用してデーター抽出

grep関数を使用して、以下のDATファイルより 現在の時間の近似値を求め、データーを抽出して、 さらにその時間のwhillまたはforeachループを使用して前後のデータを抽出したいのですが 方法が思いつきません。どなたか教授頂けますでしょうか。 DATファイルの内容 1,201304251700,aaa,fff 2,201304251500,avg,jjj 3,201304251300,kkk,bbb 4,201304251100,lll.rrr 5,201304250900,yyy,ccc 例えば現在時間2013年4月25日12時00分としますと 抽出されるものは4番と5番の前後の時間の値を抽出して変数に格納したいのですが。

  • CGI
  • 回答数2
  • ありがとう数1

みんなの回答

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

まず、CGIは仕組みの名前であって、仕組み通りに動作するなら言語を問いません。 言語が違えば、「grep関数」の仕様も違います。「grep関数」なるものが無い言語もあります。 以前は、CGIにはPerlがよくつかわれていたので、CGI=Perlと勘違いされている方がいらっしゃいます。 なので、Perlでやろうとしている、として回答します。 Perlのgrep関数は次の通りです。 http://perldoc.jp/func/grep なので、 grep { $_の日付と現在時刻を比較して「近い」なら真 } 元データのリスト として、「近い」ものを抽出することはできます。 ですが「一番近い」ものを抽出することはできないし、「近い」ものが無い場合もあります。 grepを使わずに 順番に走査して、「一番近い」要素番号を控える →その番号の前後を使う とするのがよいのでは?

ohmiyakoito
質問者

お礼

ありがとうございます。 検討してみます。

  • notnot
  • ベストアンサー率47% (4845/10256)
回答No.1

grepでは無理です。何らかのプログラミング言語が必要。

関連するQ&A

  • PerlでCSV形式のファイルの一部分だけを抽出する方法

    Perlをやっていて困っていることがあります。 CSV形式のファイルを開いて、変数に代入した後の処理がわかりません。 どのようにしたいかというと・・・ aaa,bbb,ccc,ddd,eee,fff ggg,hhh,iii,jjj,kkk,lll mmm,nnn,ooo,ppp,qqq,rrr sss,ttt,uuu,vvv,www,xxx yyy,zzz,111,222,333,444 というファイルを読み込んだとします。その後 'fff' の部分だけをスカラー変数に取り込みたいときにはどのような 関数を実行すればいいのでしょうか。 困っています、お願いします。

    • ベストアンサー
    • Perl
  • csv形式のデータの一部を削除して、上書きする方法

    前回も似たような(?)質問をしたんですが 今回も質問させてください。CSVに関して(CSVだけというわけではありませんが) 以下のようなデータを読み込んで、配列変数に格納後... aaa,bbb,ccc,ddd eee,fff,ggg,hhh iii,jjj,kkk,lll mmm,nnn,ooo,ppp qqq,rrr,sss,ttt ↑のデータを、下のようなデータにして、保存しなおすにはどうすればよいでしょうか。(上から二列目を削除して前のデータに保存しなおす) aaa,bbb,ccc,ddd iii,jjj,kkk,lll mmm,nnn,ooo,ppp qqq,rrr,sss,ttt 変な質問でもうしわけございませんが、回答できるかたお願いします。

    • ベストアンサー
    • Perl
  • EXCEL VBA split関数について

    Excel VBA初心者です。 split関数についてどなたか教えていただけないでしょうか。 aaa,bbb,ccc,eee fff,ggg,hhh,iii jjj,kkk,lll,mmm というデータがあるとして、そこから aaa bbb fff ggg jjj kkk これだけ(左から2個分)を抜き取りたいのですが可能でしょうか? カテ違いな質問でしたらスミマセン。

  • SQL文を教えてください

    いつもお世話になっております。 ウェブサイトを作っているのですが、以下のようなデータを表示するのに良いSQL文が分からず悩んでいます。 ID | DATE     | DATA --+----------+----- 1 | 2010-11-11 | aaa 2 | 2010-11-11 | bbb 1 | 2010-11-10 | ccc 3 | 2010-11-12 | ddd 3 | 2010-11-11 | eee 4 | 2010-11-10 | fff 1 | 2010-11-12 | ggg 2 | 2010-11-12 | hhh 1 | 2010-11-12 | iii 3 | 2010-11-12 | jjj 1 | 2010-11-09 | kkk 1 | 2010-11-09 | lll 1 | 2010-11-08 | mmm 1 | 2010-11-08 | nnn 1 | 2010-11-07 | ooo 1 | 2010-11-07 | ppp 1 | 2010-11-06 | qqq 3 | 2010-11-05 | rrr 2 | 2010-11-13 | sss 5 | 2010-11-08 | ttt 6 | 2010-11-05 | uuu 7 | 2010-11-04 | vvv 8 | 2010-11-03 | www 9 | 2010-11-02 | xxx 10| 2010-11-01 | yyy 11| 2010-10-30 | zzz 上のようなテーブルから、各IDを10件まで日付順に取り出すことはできるでしょうか? 具体的には、1つのページに以下のように表示したいのです。 2 | 2010-11-13 | sss 2 | 2010-11-11 | bbb 1 | 2010-11-12 | ggg 1 | 2010-11-11 | aaa 1 | 2010-11-10 | ccc 1 | 2010-11-12 | iii 1 | 2010-11-09 | kkk 1 | 2010-11-09 | lll 1 | 2010-11-08 | mmm 1 | 2010-11-08 | nnn 1 | 2010-11-07 | ooo 1 | 2010-11-07 | ppp 3 | 2010-11-12 | ddd 3 | 2010-11-11 | eee 3 | 2010-11-05 | rrr 4 | 2010-11-10 | fff 5 | 2010-11-08 | ttt 6 | 2010-11-05 | uuu 7 | 2010-11-04 | vvv 8 | 2010-11-03 | www 9 | 2010-11-02 | xxx 10| 2010-11-01 | yyy ・各IDのうち、最も新しい日付のものが上にくる ・表示するIDは10件まで ・表示はIDごとにまとめて行う ・一つのIDに属するデータは10件までしか取り出さない 上記のことを実現する方法をご教授ください。 よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • Excelで同一のデータを抽出して横並びに

    A     B  C     D 商品コード 注文数  商品コード 注文数 aaa     15  ccc     4 bbb      12  ddd     6 ccc     10  aaa     22 ddd     6   eee     10 eee     5   bbb     7 fff       8 kkk 9 kkk 7 lll 4 上記のようなデータを 以下のように同じ商品コードを横並びに表示させたいのですが どういったcountifとかで試したのですが上手くいかず、どのような関数を使えば可能でしょうか? A     B  C     D 商品コード 注文数  商品コード 注文数 aaa     15  aaa     22 bbb      12  bbb     7 ccc     10  ccc     4 ddd     6   ddd     6 eee     5   eee     10 fff       8 kkk 7 kkk 9 lll 4 宜しくお願い致します。

  • セルの数字を抽出して一列にする方法を教えてください

    下記のような結果を出したいのですが、 関数を教えていただけませんでしょうか。 ※1はaaaとbbbがあるので、それをまとめてaaabbbとしたいです。 イメージとしてはCONCATENATEのような。 ●元データ 1 aaa 1 bbb 2 fff 2 ggg 2 hhh 3 iii 3 jjj 3 kkk 3 lll 3 mmm 3 nnn 4 ooo 5 ppp 5 qqq ●完成 1 aaabbb 2 fffggghhh 3 iiijjjkkklllmmmnnn 4 ooo 5 pppqqq よろしくお願いいたします。

  • エクセル関数 同順位を別名前で抽出する方法

    エクセル2003を使用しています。 【表1】は別表から重複外のみを抽出。 【表2】は【表1】から順位付けの為、抽出。 【表2】から【表3-2】のようにTOP10を自動抽出したいのですが、 同順位があると【表3-1】のようになり項目名がうまく表示されません。 【表3-1】に於いては、重み付けし試みたのですが、うまく表示されませんでした。 どのようにしたら需要家No.と項目名が別名にて表示されるのでしょうか。 御教授願います。 【表1】 J K L M 4 需要家NO 需要家名 総台数 基本料金総額 5 15027 (株)AAA 1 \25,200 6 15256 (株)BBB 1 \28,000 7 20604 (株)CCC 1 \23,800 8 20609 DDD(株) 1 \23,800                                 〈以下にデータ有〉 セルL…=COUNTIF($D$5:$D$81,J5) →別表から セルM…=SUMIF($D$5:$D$81,J5,$H$5:$H$81) →別表から 【表2】 P Q R 4 順位 需要家NO 需要家名 5 16 15027 (株)AAA 6 1 26492 EEE(株) 7 7 26500 FFF(株) 8 4 28267 (株)GGG 9 7 26535 (株)HHH 10 16 26697 (株)JJJ 11 1 41301 (株)KKK 12 1 42897 LLL(株) (以下にデータ有) セルP…==RANK(L5,$L$5:$L$1000) →表1から 【表3-1】 T U V W 4 順位 需要家NO 需要家名   重み付け 5 1 26492 EEE(株)    1.005 6 1 26492 EEE(株)    1.006 7 1 26492 EEE(株)    1.007 8 4 28267 (株)GGG    1.008 9 5 22763 (株)ZZZ    1.009 10 5 22763 (株)ZZZ    1.01 11 7 25628 (株)YYY    1.011 12 7 25628 (株)YYY    1.012 (以下にデータ有) セルT=RANK(LARGE($L$5:$L$1000,ROW(C1)),$L$5:$L$1000) →表2から セルU=VLOOKUP(T5,$P$5:$Q$53,2,FALSE) →表2から セルV=VLOOKUP(T5,$P$5:$R$53,3,FALSE) →表2から セルW=RANK(P5,$P$5:$P$1000)+ROW()/1000 →表2から 【表3-1】を以下【表3-2_10位まで抽出】のようにしたい 【表3-2】 T U V 4     順位 需要家NO 需要家名 5      1 26492 EEE(株) 6      1 41301 (株)KKK 7      1 42897 LLL(株) 8      4 28267 (株)GGG 9      5 22763 (株)ZZZ 10      5 30446 (株)aa 11      7 25628 (株)YYY 12      7 26426 OOO(株) 13      7 26500 FFF(株) 14      7 26535 (株)HHH また、基本的には1位から10位まで枠があればいいのですが、同順位の場合、以下【表3-3】のように自動でセルを増やし、抽出するにはどのようにしたら宜しいでしょうか。 【表3-3】 T U V 4     順位 需要家NO 需要家名 5      1 26492 EEE(株) 6      1 41301 (株)KKK 7      1 42897 LLL(株) 8      4 28267 (株)GGG 9      5 22763 (株)ZZZ 10      5 30446 (株)aa 11      7 25628 (株)YYY 12      7 26426 OOO(株) 13      7 26500 FFF(株) 【同順位分自動で下記行を増やしたい】 14      7 26535 (株)HHH 15      7 27264 ddd(株) 16      7 27818 (株)SSS 17      7 28134 WWW(株) 18      7 30520 (株)UUU 19      7 30531 TTT(株) 以上、宜しくお願い致します。

  • 大量データから抽出する効率よいperlプログラムは

    以前も質問させていただきましたが、 大量データから抽出する際の効率よいperlプログラム作成について また、教えてください。 例) 大量データ Aファイル 3列 可変値(数値、URL、数値)タブ区切り 重複値あり 123 http://www.XX.co.jp/XX 4567 1111 http://www.XX.co.jp/XX 3333 3 http://www.XX.co.jp/YZ 4567 1111 http://www.YYY… 116 … 抽出対象データ Bファイル 1列(URL)重複なし http://www.XX.co.jp/X http://www.YYY.co.jp … BファイルにあるURLで始まるURLがAファイルにある場合 Aファイルのその行を抽出したい。 grepで実施すると すごい時間がかかってしまうため、効率よい抽出方法をおしえてください。 今回は、完全一致ではなく、Bファイルに入っているリストのURLから始まるものにしたいと考えているので、前の手法(hash連想配列)が使えないと考えております。 Aファイルが容量大きいため、grep処理では1週間たっても終わらないのです。

    • ベストアンサー
    • Perl
  • Excelのマクロでの部分的な重複データの抽出方法

    お世話になります。 Excelのマクロで部分的な重複データの抽出をしたいと考えています。 データの内容は下記のような感じです。 名称 No. AAA 111-11 BBB 111-12 CCC 111-21 DDD 111-23 EEE 121-13 FFF 201-31 GGG 201-32 HHH 53-1 JJJ 53-2 KKK 91-1 桁数(文字数)が2通りあり、前述のものは-(ハイフン)のすぐ後の文字(基本的に数字ですが、アルファベットの場合もあります)までの内容で重複データを削除したいです。後述の短いものは-(ハイフン)の直前までの内容で重複データを削除したいです。最後の文字は無視して重複を省きたいという事です。 最終的なデータの希望内容は、 名称 No. AAA 111-11 CCC 111-21 EEE 121-13 FFF 201-31 HHH 53-1 KKK 91-1 です。 現状、関数のLENなどを利用してある程度手を加えていますが、できれば全てマクロでできないかと欲を出してます・・・・。お願いします。

  • Excelで、自動でデータのナンバー付けをしたい

    エクセルで、商品管理をしているのですが、以下のようなエクセルファイルのデータをフィルタ後(件数が0より多いものでフィルタをかけた後)、項目のナンバーを再び1から順につけていきたいと思っています。 ------------------エクセルファイル------------------ 項目  商品名  商品ID   単価   件数   金額  1    AAA   BBB    ¥2,000   1    ¥2,000  2    CCC   DDD    ¥1,200   19    ¥22,800  3    EEE   FFF     ¥1,000   0    ¥0  4    GGG   HHH    ¥1,000   3    ¥3,000  5    III     JJJ     ¥500    0    ¥0  6    KKK   LLL     ¥400    2    ¥800                          小計   ¥28,600 --------------------------------------------------- 上記のファイルを、件数が0より多いものでフィルタをかける。 つまり、エクセルファイルは、以下のようになります。 ------------------エクセルファイル------------------ 項目  商品名  商品ID   単価   件数   金額  1    AAA   BBB    ¥2,000   1    ¥2,000  2    CCC   DDD    ¥1,200   19    ¥22,800  4    GGG   HHH    ¥1,000   3    ¥3,000  6    KKK   LLL     ¥400    2    ¥800                          小計   ¥28,600 --------------------------------------------------- この場合、項目のナンバーが1、2、4、6、という順番になっているので、 これを1、2、3、4、という順番に置き換えていきたいと思っています。 データ数が少なければ手動でやっても良いのですが、 データ数が膨大な量になるので、これを自動で出来るようにしたいと思っています。 VBAで挑戦を試みましたが、なかなか上手くいきませんでした。 何か上手くできる方法はございませんか? どなたかご教授をお願いします。             

専門家に質問してみよう