CSV読み込み時の特定条件に合う行を抜き出す方法

このQ&Aのポイント
  • CSV読み込み時に特定の条件に合う行を抜き出す方法について教えてください。
  • 現在、ショッピングカートを改造しています。デフォルトでは全ての商品データを読み込みソートして表示するようになっていますが、特定の条件に合う行だけを読み込みたいです。
  • 一度全てのデータを読み込んで条件ごとに行ごとに調べる方法以外に、効率的な処理方法はありますか?
回答を見る
  • ベストアンサー

CSV読み込み時に条件に合う行(複数)の抜き出し

現在、既存のショッピングカートを改造していているのですが、デフォルトでは 全ての商品データ(CSV)を読み込みソートし、表示する様になっています。 これを特定の条件に当てはまる行だけ@lineとして読み込みたいと考えています。 (例えば新製品の発売日を元に発売中のモノだけ表示など) この場合、今の知識では一旦全て読み込んで、for文などを使ったりして行毎に 調べて行くくらいしか思いつかないのですが、何か良い処理方法は有りますか? また、全部読み込んで出力の段階でif文などで条件分岐する方法では スクリプトの構造上得策ではありませんでした。 説明も拙く申し訳ないですが、ご存じの方ご教授下さい。

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

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

  • ベストアンサー
  • in_dow
  • ベストアンサー率77% (7/9)
回答No.1

readline(*filehandle)もしくは<filehandle>を再復帰構文(foreachやwhile)で読み出し、その中で、if構文でマッチさせた物のみをpush(@line,$_);などのようにしてインポートさせてやればいいのではないかと思います 詳細なデータ構体が分らないのですが、例を挙げますと、 #exp(year,month,day,hour,min,sec), $nowTime = int(&numTime(0)); $chrSplitter = '<>'; open(ITEM,$fileName) || die 'cannot load file'; foreach(readline(*ITEM)){ #期限が現在時刻よりも前だったら、配列に挿入(ぁ、逆かも) if(int((split(/$chrSplitter/o))[0])<=$nowTime){ push(@line,$_); } } close(ITEM); sub numTime(){ my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time+$_[0]); return sprintf("%04d%02d%02d%d%02d%02d%02d",($year + $factorYear),$mon,$mday,$wday,$hour,$min,$sec); } #わかりにくかったらゴメンナサイ

jiro2100
質問者

お礼

回答ありがとうございます なるほど、こういう手も有るのですね。 とりあえ一度全て@lineとして読み込んでからforeachで 条件に合うモノだけ@line2としてインポートしていたのですが、 2度手間なので、この方法を使わせていただきます。 ありがとうございました。

関連するQ&A

  • CSVの3行目だけを…

    はじめまして!Nakanoと申します。 えっと、以下質問になります。おねがいします。。 CGI/Perlを始めて1週間程度の素人なのですが、 CSVファイルをHTMLのテーブル表示させる 様にしたいなと思っています。 そこで用意したCSVファイルが5行と8列で カンマ区切りのみで構成されています。 このCSVファイルから3行目だけを抽出する方法 ってありますでしょうか? 1行目のみ表示や1行目以外の2行目以下全てを表示 させたりは出来たのですが、3行目だけを表示するの がどうしても分かりませんでした・・・・・ 何方様か。よろしければその辺の所を詳しくご指導 いただけないでしょうか? よろしくおねがいします。

    • ベストアンサー
    • Perl
  • 3つのテーブルから条件に一致しない行のみ抜き出し

    すいませんこの間、 2つのテーブルから条件に一致しない行のみ抜き出す 方法について質問した者です。 今回は、3つのテーブルから条件に一致しない行のみ抜き出しCSV か他のテーブルに抜き出す処理を作ろうと思っています。 そこで質問なのですが、以下の2つのテーブルから 条件に一致しないコードのみ抜き出すSQL文などありますか? ----------------------------------------- マスターテーブル コード、ネーム1、ネーム2、店コード、店地域 1、あ、い、6、東京 2、う、え、8、北海道 3、お、か、4、京都 4、き、く、2、奈良 店コードテーブル 店コード、店区分 1、スーパー 2、コンビニ 3、デパート 4、ホームセンター 地域テーブル 地域コード、店地域 1、東京 2、京都 ------------------------------------------ 条件は、マスターテーブルの店コードが店コードテーブルに存在 しないANDマスターテーブルの店地域が地域テーブルに存在 しないデータのみ抽出です。 抽出結果は、以下の様にしたいです。 1、あ、い、6、東京 2、う、え、8、北海道 4、き、く、2、奈良 わかりずらい質問ですがよろしくお願いします。

  • VBA csvを100万行ずつ各シートに読み込み

     今晩は、質問させていただきます。どうぞよろしくお願いいたします。 環境:Win7 64bit SP1、 エクセル2010 でございます。  「1000万行×3列」のCSVファイルデータを、100万行ずつ シート1~10に振り分けたく悩んでおります。 ・エクセルは100万行しかありませんので、「一旦開いてから各シートに分割」という方法が使えませんし、 ・またReadLineいたしますと(1行ずつの方法しか存じませんので)時間がかかりそうですし、 何よりcsvファイルのカンマ記号も含め1行全てが、エクセルのひとつのセルに入ってしまうのでは、などと考えております。  何か良さそうな方法を思いつかれる方はおられませんでしょうか。 もしお詳しい方がいらっしゃいましたら,どうぞよろしくお願いいたします。

  • CSVファイルの結合(行項目を削除)

    5,000行ほどのCSVファイルが6つあり、これらを結合して一つのCSVファイルにまとめたいと考えております。 行のタイトル項目は6つのファイルで全て同じため、結合後にタイトル行は一つにしたいです。(一番上の行のみタイトル項目を表示) 何度も同じ操作をする想定のため、できるだけ簡単にできる方法を探しています。 有料ソフトでも良いので、簡単に手間がかからず実現できる方法を教えて頂けると助かります。 宜しくお願い致します。

  • 【VB6】CSVファイルの内容の条件設定をして表示

    【VB6】CSVファイルの内容の条件設定をして表示 お世話になります。 VB6で、テキストボックスにCSVの内容を表示するプログラムを作成したのですが、 CSVの一部の行だけをif文で検索をかけるような内容を追加しようとしておりますが、良い方法はございますでしょうか。 例えば、Excelで開く所のA列が「日付」の項目であり、1/1から3/1までのCSVの内容を表示…といった具合です。 CSVをテキストボックスに表示させるプログラムは、下記サイトを参考にしています。 http://hanatyan.sakura.ne.jp/(VB6.0関係>ファイル操作関係>です) 参考になるサイトがございましたらお教え下さい。よろしくお願い致します。

  • エクセル2003でCSVファイルを開くときに列と行を入れ替える方法はありませんか

    エクセル2003を使用しています。 CSV形式のファイルがあるのですが、エクセルで開くと列が256を越えているためにエラーがでて、全てが表示されません。行は256を越えていないので、エクセルで開くときに列と行を入れ替えたいのですが、何か方法はないでしょうか? Windows2000を使用しているためエクセル2007は使えません。

  • CSVファイルの読み込みと表示(VB.NET)

    前回の質問では大変お世話になりました。 引き続き、VB.NETの勉強をしております。 特定のCSVファイルを読み込んで、その内容をラベルに表示させるプログラムを作成しています。 そのCSVファイルには、以下の情報が書かれています。 1:都道府県(北海道、岩手県、神奈川県、兵庫県など) 2:各都道府県の人口 3:各都道府県の面積 3つの情報は、すべてカンマで区切られています。 各都道府県ですので、47行にわたって情報が書かれています。 まず、ボタン1を押したときに、CSVファイルを読み込み 日本の総人口と総面積をラベルに表示させます。 次に、日本を10のエリアに分け(関東地方、近畿地方など) それぞれにボタンを配置します。 対応する地域のボタンを押すと、新しいウィンドウが開き 地域名・その地域の総人口・総面積が表示されます。 CSVファイルを読み込むという点で調べてみたのですが 複数の行にまたがっている情報をひとつにまとめて表示させる というのがよくわかりません。 CSVファイルの読み込み自体は、StreamReaderというものを利用する ということは調べたのですが、まとめて表示させるということがわかりません。 この問題がおわかりになるかたがいましたら、教えていただけますか。 よろしくお願いします。

  • エクセルでCSVファイルを開く時に行の高さを一定に保つ方法はありますか?

    CSVファイルを開く時に中に長い文章(htmlなど)を書き込んでいると最初開く時の行の高さが非常に高く、また行がたくさんあると異常に時間が掛かってしまいます。これを高さを一定に保つ、またはhtmlを全部表示しないような方法はありますでしょうか?

  • Excel2000でCSVの読み込み時書式指定

    .txtを読み込むと最初に区切り指定やフィールドの書式指定が 表示されますが、.csvでも表示させることはできますでしょうか? 「123456789012345」といったものが「2E+14」とか勝手に変換 されるので、いちいち拡張子を.txtにして、全フィールド「文字列」 に指定して読み込ませているので非常に効率が悪いのです。 もしくは読み込み時のデフォルト書式を「文字列」にするという 方法はありますでしょうか?

  • csvファイルの読込みとソート

    いつも大変参考にさせていただいております。 csvファイルの読み込みとソートをしたく、ネットや過去ログ等を相当調べたのですが、完全に詰まってしまいました。 (検索キーワード:「php csv ソート」「php 二次元配列 ソート」など) とても困っています。どなたかよろしくお願いします。 以下のようなcsvファイルを読み込みソートしたいのです。 ■csvファイル 20110803, A, りんご 20111215, B, みかん 20110306, A, みかん 20110620, A, りんご 20110215, B, りんご ■個別にやりたい処理 (1)、左列の日付で昇順ソートしてすべて表示 (2)、「A」を含む行をすべて表示(日付順) (3)、「A」+「りんご」を含む行をすべて表示(日付順) □補足 csvをfgetcsvで読み込み、テーブルに入れて表示するところまではできました。 csvの行は増えていきます(max100行位)。列は固定。

    • ベストアンサー
    • PHP