• ベストアンサー

変動する

danyの回答

  • dany
  • ベストアンサー率35% (27/77)
回答No.3

解説するより実際の処理を見てもらったほうが早いかなと 思ってつらつらと書いてみました。 >このようなデータの並びですが、各分類と詳細項目は変動しますので ↑を「項目の並び順が変動」と勘違いして書いたので項目順序が変わっても @TYPEを書き換えればいいようにしてみました。 $FILE = './hoehoe.csv'; $HTML = './hoehoe.htm'; @TYPE = qw( HEAD TYPE NAME ADDR );  # 項目のタイプを指定 open( IN,$FILE )||&error; while( $line = <IN> ){        # 一行ずつ読み込む  chomp( $line );           # 改行コードを削除  &conv1( $line );          # 変換処理 } close( IN ); open( OUT, '>'.$HTML );        # 出力ファイルを開く  print OUT $output;         # 書き出す close( OUT ); exit;                 # 終了 # 変換タイプ1 # ==================== sub conv1{  my $line = shift;          # 渡された行の内容  @lines = split( ',',$line );    # 「,」で分割して配列へ  foreach $i ( 0 .. $#lines ){    # 0番目から配列の最後まで繰り返す   if( $TYPE[$i] eq 'HEAD' ){    # 以降、番号に対応した項目で変換処理   ~HEAD項目に対する変換処理~   }elsif( $TYPE[$i] eq 'TYPE' ){   ~TYPE項目に対する変換処理~   }elsif( $TYPE[$i] eq 'NAME' ){   ~NAME項目に対する変換処理~   }elsif( $TYPE[$i] eq 'ADDR' ){   ~ADDR項目に対する変換処理~   }   $outpt .= $lines[$i];       # 出力用変数に追加書き  } } ところで 10,果物,りんご,ringo.html,ぶどう,budou.html,ばなな,banana.html,10,野菜,かぼちゃ,kabotya.html,なす,nasu.html,きゅうり,kyuri.html,魚,まぐろ,maguro.html,さけ,sake.html,10,肉,牛,usi.html,麺,ラーメン,ra-men.html,そば,soba.html,うどん,udon.html ってひょっとして一行になってるんですか?

hooma
質問者

補足

いろいろありがとうございます。 今のところ、CSVデータは1行になっているものとして考えています。 それは、今後このCSVデータをデータベースで書き出してそれをperlで読み取って変動するWEBページを目指しているからです。 リンクするページが激しく変動するので手作業で直すことは避けたいための考えですが、 もし、1行じゃないほうがいいのでしたら、各分類ごとに改行して複数行にしても構わないと思います。

関連するQ&A

  • 変動するリンクデータを読み取って、毎回変わるHTMLテーブルに流し込む方法

    はじめまして CGIを学んで1ヶ月の者です。 実は、仕事で少し面倒な依頼を受けて困っております。 内容はCSV形式のデータをPerlで読み取ってそれを HTMLのテーブルに流し込むスクリプトなのですが、 慣れていないので思考停止をして進みません。 具体的なCSVデータの例ですが、 10,果物,りんご,ringo.html,ぶどう,budou.html,ばなな,banana.html,10,野菜,かぼちゃ,kabotya.html,なす,nasu.html,きゅうり,kyuri.html,魚,まぐろ,maguro.html,さけ,sake.html,10,肉,牛,usi.html,麺,ラーメン,ra-men.html,そば,soba.html,うどん,udon.html まず、先頭に10があり、これは分類の区切りを示すヘッダーです。 次に果物でこれは、分類名です。 次にりんご、これは分類詳細名です。 つぎにringo.htmlでこれは分類詳細名のリンク先アドレスです。 このようなデータの並びですが、各分類と詳細項目は変動しますので このテーブルのあるWEBページを毎回読み直す必要があります。 どうのようにしたらよいのでしょうか。 お助けください。

    • ベストアンサー
    • Perl
  • .htaccessでのカノニカル指定

    大量のPDFファイルを所持するサイトを運営しています。 ディレクトリ構成は、 ■ルート(http://hogehoge.com/) index.html hoge1.html hoge2.html │ └■食べ物フォルダ   ├index.html   │   ├■果物ごフォルダ   │ ├index.html   │ │   │ ├■りんごフォルダ   │ │ ├index.html   │ │ ├ringo1.pdf   │ │ ├ringo2.pdf   │ │ ├ringo3.pdf   │ │   │ ├■みかんフォルダ   │ │ ├index.html   │ │ ├mikan1.pdf   │ │ ├mikan2.pdf   │ │ ├mikan3.pdf   │ │   │ ├■ぶどうフォルダ   │   ├index.html   │   ├budou1.pdf   │   ├budou2.pdf   │   ├budou3.pdf   │   ├■野菜フォルダ   ・   ・   ・ ルート→「食べ物」→「果物 / 野菜」→「りんご・みかん・ぶどう / キャベツ・大根・人参」 という具合で、すべてのフォルダ内にはindex.htmlと関連する 複数のpdfファイルを格納している状態です。 それぞれのpdfファイルは内容がほぼ一緒なので link rel="canonical" を設定したいんです。 ringo1.pdf + ringo2.pdf + ringo3.pdf → りんごフォルダの index.html にカノニカル指定 という具合に全てのフォルダで行いたいのですが自分なりに調べた結果、 <FilesMatch "\.pdf$"> Header set Link "<http://hogehoge.com/食べ物/果物/(りんごorみかんorぶどう)/index.html>; rel=\"canonical\"" </FilesMatch> と記入した.htaccessファイルを各フォルダに1個1個設置すれば実現できると思うのですが、 数が膨大になってしまうので、もっとスマートな方法があれば・・ と思い質問させて頂きました。 詳しい方、どうか知恵をお貸し下さい。

    • ベストアンサー
    • PHP
  • リストボックスについて

    PHPをはじめて間もないのですが、質問します DB(MySql)のテーブルを使用してリストボックスの 選択肢をさせるようにしたいのですが、 同じ1つのリストボックスで選択するようにします テーブル CodeNo 商品名   分類 0001  バナナ   果物 0002  みかん   果物 0003  ピーマン  野菜 0004  トマト   果物 0005  もも    果物 0006  にんじん  野菜 のようなデータがあるとします (1)選択肢は分類のデータを表示します    果物    野菜 (2)(1)で選択された分類の商品名を選択肢にします    果物選択したとする    バナナ    みかん    トマト    もも (3) (2)で選択されたCodeNo,商品名を表示する    トマトを選択したとする 0004  トマト がテキストボックスに表示されるようにします。 以上のようなことをPHPですべてするにはどのようにすれば よいのか、ご教授いただけませんでしょうか? よろしくお願いいたします。    

    • 締切済み
    • PHP
  • 別シートのフィールドから同一値検索、隣フィールド値取得の関数を教えてください。

    ■シート1 ---------------- □分類□名 称□ ---------------- |果物|りんご| ---------------- |果物|バナナ| ---------------- |果物|みかん| ---------------- |野菜|トマト| ---------------- |野菜|セロリ| ---------------- |野菜|レタス| ---------------- ■シート2 ---------------- □名 称□分類□ ---------------- |りんご|  | ---------------- |トマト|  | ---------------- |バナナ|  | ---------------- |セロリ|  | ---------------- |みかん|  | ---------------- |レタス|  | ---------------- シート2の名称にてシート1の名称を検索して、シート2に分類を取得することは可能でしょうか。 よろしくお願いします。

  • PHP CSVから条件にあう行を3行取りだしたい

    以下のようなCSVがあったとします。(data.csv)価格で降順にソートしてあります。 line0,line1,line2 1,ぶどう,200(円) 2,なし,150(円) 3,りんご,100(円) 4,バナナ,80(円) 5,みかん,50(円) ある果物を紹介するページがあったとして、 そのページには、他のオススメの果物として、csvからデータを読み込み、 その果物よりも安いもの3件を表示するという仕組みを作ろうと思っています。 ただ、安いものが3件無かった場合に、それよりも高いが、それに近い価格の果物を あわせて3件まで紹介したいと思っています。 今作っているPHPは以下の通りです。 ページに紹介されている果物=($fruits),価格=($price) です。 <?php $Data=file('/data.csv'); $j=0; for($i=0;$i<sizeof($Data);$i++){ $line=explode(",",$Data[$i]); #表示ページの果物とCSVのline1が違い、価格が$priceよりも小さいものを3件まで表示 if($fruits != line1 and $price >= line2 and $j<3 ){     echo $line1 $line2.' </br>'; $j++; } } ?> で、価格が低いものを3件まで表示することはできました。 ぶどう200円のページであれば、 2,なし,150(円) 3,りんご,100(円) 4,バナナ,80(円) が表示されるようにはできました。 りんご100円のページには、 4,バナナ,80(円) 5,みかん,50(円) の2件のみが表示されています。 上記りんごのように、安いものが3件なかった場合に、 それより価格が高いが一番近いものから順に3件になるまでデータを 取りだしたいと思っています。 今回のりんごであれば、リンゴより安い、バナナ80円、みかん50円、 それに加え、リンゴより高いがリンゴの価格に一番近い、なし150円を表示させたいです。 みかんの場合には、安いものがないため、高いがみかんに近いものから3つ 2,なし,150(円) 3,りんご,100(円) 4,バナナ,80(円) を表示させたいです。 一体どうしたら良いのか、検討も付かず、教えて頂きたいです。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • SQLでグループ化して降順表示がうまくいきません

    個人的にMysql、php環境でサイトを作っております。 そこで、素人質問で申し訳ありませんが、SQLでお伺いしたい点があります。 例えば下のようなテーブルがあります。 ▽果物テーブル 果物ID | 果物名 | 売れた日付 1 | リンゴ | 2008/11/1 2 | みかん | 2008/11/2 3 | みかん | 2008/11/3 4 | リンゴ | 2008/11/4 これを、 『最近売れた』果物順に、『グループ化』して並べ替えたいと思い、 下記のようなsqlを組みました。 $sql = "SELECT 果物名, FROM 果物テーブル GROUP BY 果物名 ORDER BY 売れた日付 DESC"; 意図としてはリンゴ、みかんの順に並べ替えたいのですが、 みかん、リンゴの順に表示されてしまいます。 想像では、グループ化したとき、古い日付の方が残ってしまい、 | リンゴ | 2008/11/1 | みかん | 2008/11/2 この部分を対象にして日付を降順にしてしまうからだと思うのですが、 これをうまく解決する方法が分かりません。 MSアクセスなどですと先に二重にクエリをかけるなどすることで 「先に降順で並べ替えたクエリを出し、その後グループ化させる」 など処理が簡単なのですが、phpではどうするのかいまひとつ分からず・・・ 申し訳ありませんがよろしくお願いします。

    • ベストアンサー
    • PHP
  • 環境PHP5 Apache2.0 SQLite

    環境PHP5 Apache2.0 SQLite データベースSQLiteに関する質問なのですが、データベース名、テーブル名のみ解っている状態からテーブルで使用されている項目の一覧などは取得できますでしょうか? データベース名 くだもの テーブル名 くだもの リンゴ バナナ イチゴ  1   3   2  このようにテーブルのみ解っている状態から中身を見ずに項目「りんご」、「バナナ」、「イチゴ」を取得したのです。SQLiteで無くとも、他のデータベースで可能でしたらご教授ください。よろしくお願い致します。

    • ベストアンサー
    • PHP
  • メールの本文にテーブルのデータを書き込む

    ご質問させて頂きます。 access2000、ADOを使用しています。 Aテーブルに以下のようなデータがあります。 1 りんご 2 バナナ 3 みかん このデータを使って 以下のようなメールをお送りしたいのです。 ----------------- 件名 果物について 本文 お世話になっています。 果物について以下の通りです。 1 りんご 2 バナナ 3 みかん ----------------- ご教授して頂けたら幸いです。

  • 初心者です。Access レポートで下記のように作成したいのですが、な

    初心者です。Access レポートで下記のように作成したいのですが、なんか重複データで引っかかってしまいました。 ※(1)作成したいレポート 分類   名前     地名    小計   合計   総合計 -------------------------------------------------- 果物   りんご   青森   100    170   1070               千葉    50               山梨   20      バナナ   千葉   450    450      みかん   栃木   300     450                     150 ---------------------------------------- ワイン   AAAA   ドイツ   500    800    1000            イタリア   300       BBBB    ドイツ   200   200 ↓↓   ↓↓   ↓↓   ↓↓   ↓↓  ↓↓ ※(2)クエリで下記のようなデータがあります。 分類   名前     地名    小計   合計   総合計 -------------------------------------------------- 果物    りんご    青森    100    170    1070 果物   りんご    千葉    50    170    1070 果物   りんご   山梨   20   170   1070 果物   バナナ   千葉   450    450    1070 果物   みかん   栃木   300   450    1070 果物   みかん    栃木   150   450    1070 -------------------------------------------------- ワイン  AAAA  ドイツ   500    800    1000 ワイン  AAAA  イタリア  300   800   1000 ワイン  BBBB  ドイツ   200   200   1000 ↓↓   ↓↓   ↓↓   ↓↓    ↓↓    ↓↓ (1)レポートで      フィールド[分類]:重複非表示 [はい]      フィールド[名前]:重複非表示 [はい]      フィールド[合計]:重複非表示 [はい]      フィールド[総合計]:重複非表示 [はい]にすると下記の様になってしまいしますが、 分類   名前     地名    小計   合計   総合計 -------------------------------------------------- 果物   りんご   青森   100    170   1070               千葉    50               山梨   20      バナナ   千葉   450    450      みかん   栃木   300                     150 ---------------------------------------- ワイン   AAAA   ドイツ   500    800    1000            イタリア   300       BBBB    ドイツ   200   200 ↓↓   ↓↓   ↓↓   ↓↓   ↓↓  ↓↓ 結果的に上記(1)の様にしたいです。名前のフィルドにバナナ、みかんなどの合計はそれぞれ450と450を表示させたいのですが、たれかその方法は教えて頂けないでしょうか。よろしくお願いします。

  • チェックボックス(複数選択可)の値をPOST送信し、

    果物テーブルの中身を入力フォームにて、チェックボックスにより選択 得られた果物コードをSELECT文により、果物名に変換して表示 保存時は好きな果物1、好きな果物2、好きな果物3、、カラムにコードを保存。 例)あなたの好きな果物は? りんご  みかん  いちご  メロン (チェックボックスにより選択) 果物テーブル: 1 りんご 2 みかん 3 いちご 4 メロン 入力フォームよりPOSTにて選択された果物のコードを送信 入力確認画面にて得られたコードより果物名に変換 選択されたコードを保存 上記のようなイメージです。 例えば、りんご、みかん、いちごを選択された場合、(1,2,3)が得られ、これを分解してSELECTする方法が分かりません。 すなわち配列の操作になるかと思われます。 (1,2,3)コードは取得出来ています。 以上、ご教授頂けたら助かります。

    • ベストアンサー
    • PHP