perl初心者がテキストデータから1行を抜き出して表示する方法とは?

このQ&Aのポイント
  • テキストデータから指定した1行を抜き出して表示する方法について質問しています。
  • perl初心者がテキストデータから指定した1行を抜き出す方法に困っています。
  • テーブルにデータを一覧表示させた後、クリックした行のデータを別ページのフォームに表示させる方法がわかりません。
回答を見る
  • ベストアンサー

テキストデータから指定した1行を抜き出して表示

perl初心者です。 説明不足の箇所もあるかと思いますが、よろしくお願いします。 テキストデータから指定した1行を抜き出して表示するのにはどうしたらいいんでしょうか。 data.txtの中に=で区切られた文字が入っているとします。 1=にんじん=150 2=じゃがいも=200 3=たまねぎ=100 左から$s_no,$s_name,$s_priceという変数になっています。 これを print <<"EOF"; <TABLE class="list_index"> EOF open(IN,"../indata/sdeta.txt"); @data = <IN>; close(IN); foreach $sdata (@data){ chop($sdata); ($s_no,$s_name,$s_price) = split (/=/, $sdata); print <<"EOF"; <TR> <TD class="list2">$s_no</TD> <TD class="list3">$s_name</TD> <TD class="list4">$s_price円</TD> <TR> EOF } print <<"EOF"; </TABLE> EOF という感じでテーブルにデータを全て一覧表示させました。 ここから、$s_noで表示されている「1」「2」「3」をクリックすると、 別ページにとんで、クリックした番号の1行を編集用のフォームに表示させたいです。 フォームに表示させる方法はわかっているんですが、 クリックで指定した1行だけを表示する方法がわからずに困っています。 よろしくお願い致します。

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

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

  • ベストアンサー
  • koba0626
  • ベストアンサー率67% (19/28)
回答No.2

>フォームに表示させる方法はわかっているんですが、 >クリックで指定した1行だけを表示する方法がわからずに困っています。 「1」「2」「3」をリンクにするならGETで、送信ボタンにするならPOSTでデータをリンク先のCGIなどに送ればいいんじゃないかな。 GETで送るなら、 ↓ここを <TD class="list2">$s_no</TD> ↓こんな感じに変えて、(form.cgiは送り先) <TD class="list2"><a href="./form.cgi?no=$s_no&name=$s_name&price=$s_price">$s_no</a></TD> from.cgiで、 my @getdata = split(/'&'/, $ENV{QUERY_STRINGS}); foreach my $s ( @getdata ) { my @arrdata = split(/'='/, $s); $h{$arrdata[0]} = $arrdata[1]; } my $value = join('=', $h{'no'},$h{'name'},$h{'price'},); print "<input type=\"text\" value=\"$value\">\n"; とかで出来ないでしょうか。 ※確認してません。あくまでもヒントなのでコピペでエラーがでたら修正してください。 POSTだと、リンクではなくて"送信ボタン"になると思うので、form.cgi 内の $ENV{QUERY_STRINGS} が使えません。 POSTの場合はstdoutを拾う必要があります。(CGI.pmを使うと楽ちんです。) てか、その一行って、$sdata そのものでしょうから、そもそも$s_XXXXに小分けして送信する必要ないかもしれませんが。。。

その他の回答 (3)

  • koba0626
  • ベストアンサー率67% (19/28)
回答No.4

#3です。 >それぞれ$s_noで番号がふってあるので、 >てっきりform.cgi側でsdeta.txtを読み込んでから、 >クリックした番号$s_noで呼び出す(検索する?)感じで、 >if文かなにかを使って特定の1行を表示させるのかな・・・と思っていたので。 それだと、list表示するためにファイルopen、form表示するためにファイルopen、変更データを書き込むためにファイルopenと、合計3回ファイルをopenすることになります。 対象の一行は、list.cgiで読み込んで変数に格納済みですよね? フォームを表示するために、form.cgiへ飛んでからもう一度ファイルをopenして読みなおすのは無駄なロジックだと思いませんか? ファイルの容量とアクセス規模にもよると思いますが、flockも馬鹿にならないので個人的には何度もファイルをopenするのは好きではありません。 [list.cgi] (1)ファイルを読み込み、それぞれの値を変数化して一覧表示。 (2)リンクをクリックしてform.cgiにそれぞれの変数を送信。(リンク形式ならGETかな?と思いました。) [form.cgi] (1)list.cgiから送られてきたデータを、内部で再度変数化。 (2)(1)整形してをフォームに表示する。 (3)”送信”ボタン(<input type="submit">)で、サブルーチンなり別のcgiなりにデータを送ってファイルに書き込む。(ここではPOSTの方が便利) とやればファイルopenが1回減るかな、と思います。 >また、フォームの内容を書き換えて上書き保存をする場合、 >そのまま「上書き保存」の送信ボタンを押せば >表示された行だけ書き換えることができるんでしょうか。 ここは、何行目という特定が出来ないのであれば、 open(IN,"../indata/sdeta.txt") || die "$!"; flock(IN, 1); @data = <IN>; close(IN); とやるしかないので、@dataの要素をそれぞれsplitしながらifでの振り分けが必要になると思います。

kari729
質問者

お礼

回答ありがとうございました。 いちいちファイルopenはしなくても大丈夫なんですね。 まだちょっと完全に理解は出来ていないんですが、 色々なやり方があって、perlは難しいな~と痛感しているところです。 新しく別の仕事が入ってきたので、しばらくcgiのほうは手がつけられそうにないんですが、 koba0626さんから教えてもらった方法でやってみたいと思います。 本当に色々ありがとうございました! NO.2の回答にベストアンサーをつけさせてもらいますね。

  • koba0626
  • ベストアンサー率67% (19/28)
回答No.3

自己レス。^^;; >my $value = join('=', $h{'no'},$h{'name'},$h{'price'},); カンマ多すぎ。 my $value = join('=', $h{'no'},$h{'name'},$h{'price'}); >from.cgiで、 form.cgiね。 >POSTだと、リンクではなくて"送信ボタン"になると思うので、form.cgi 内の >$ENV{QUERY_STRINGS} >が使えません。 わかり辛い表現になりました。 送信ボタンに関係なく、POSTだと$ENV{QUERY_STRINGS}では拾えません。

kari729
質問者

補足

色々教えていただいてありがとうございます。 教えてもらったものがうまく作動しないので、今修正しているところです。 その上で質問で申し訳ないんですが、 教えてもらった方法は、リスト一覧で表示された1行を読み取り(?)GETを使ってform.cgiに送るということでしょうか。 この場合、form.cgi側ではsdeta.txtのファイルデータを開かなくても大丈夫なんでしょうか。 毎回補足で申し訳ないんですが、やりたいことは、 sdeta.txtを読み込みlist.cgiでデータ一覧を表示する。  1 にんじん  150  2 じゃがいも 200  3 たまねぎ  100 この「にんじん・じゃがいも」などの名称と「150・200」の金額を編集したいので、 編集したい行の番号をクリックすると、form.cgiにジャンプして、 番号をクリックした1行を名称・金額のそれぞれのフォームに表示させる。 表示されたものを書換え、sdeta.txtに上書き保存。 ということがしたいんです。 それぞれ$s_noで番号がふってあるので、 てっきりform.cgi側でsdeta.txtを読み込んでから、 クリックした番号$s_noで呼び出す(検索する?)感じで、 if文かなにかを使って特定の1行を表示させるのかな・・・と思っていたので。 また、フォームの内容を書き換えて上書き保存をする場合、 そのまま「上書き保存」の送信ボタンを押せば 表示された行だけ書き換えることができるんでしょうか。 本当に初心者で色々とすみません・・・。 会社でcgiを作成していて、色々なHPを参考にちょっとずつ出来上がってはいるんですが、 この「特定の1行」を表示する方法がどうしてもわからないんです(泣) よろしくお願い致します。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

正確にどこがわからんのかがわからんのだけど, ハッシュ (か配列) に突っ込んじゃえばデータはとってこれるよね.

kari729
質問者

お礼

色々勉強したいと思います。 ありがとうございました。

kari729
質問者

補足

説明がわかりずらくてすみません。 そのデータのとってきかたがわからなくて困っています。 複数の行があって、最初から「3行目を取り出したい」とかわかっているなら処理はなんとなくわかるんですが、 そのつどクリックした特定の行をどのように表示するのかがわからないんです。 表示する側のcgiでtxtファイルを開く・・・までもちろんはわかるんですが、 open(IN,"../indata/sdeta.txt"); @data = <IN>; close(IN); この後の処理がわかりません。 $s_noに入っている数字を検索して表示するんでしょうか? ここ数日、本当にわからなくて頭を抱えています。 よろしくお願い致します。

関連するQ&A

  • perlでテキストデータの指定行に書き込み

    たびたびお世話になります。 データには、「データNO」「登録NO」「名前」「カテゴリー」「金額」が登録されています。 もともとあったデータをフォームで編集、送信してデータNO($d_no)と一致した行だけを書替え(上書き)したいんですが、どうしても方法がわかりません。 open(IN,"../save_data/sdeta.txt"); @data = <IN>; close(IN); foreach(@data){ chop($sdata); ($d_no,$s_no,$s_name,$d_class,$s_price) = split (/=/, $sdata); if( $value eq $d_no){ $sdata="$in{'d_no'}=$in{'s_no'}=$in{'s_name'}=$in{'d_class'}=$in{'s_price'}\n"; }else{ $sdata="$d_no=$s_no=$s_name=$d_class=$s_price\n" } } open(OUT,">../save_data/sdeta.txt") || &error("オープンエラー"); print OUT @data; close(OUT); 上のプログラムを書いても、書替えできませんでした。 どのように直せば一行のみの書替えが出来るんでしょうか。 よろしくお願い致します。

    • ベストアンサー
    • Perl
  • csvデータをテーブル表示させる

    再び新規質問で申し訳ありません これしか方法がわからなかったもので; csvデータから最初の項目に5というものが含まれている場合 その列を表示する、というのを先ほど質問させていただいて解決に至りました。 csvデータファイルの内容 5,データ1,データ1の説明 5,データ2,データ2の説明 5,データ3,データ3の説明 6,データ4,データ4の説明 ・・・ ↓ open(IN, "data.csv"); while (<IN>) { if ((split(/,/))[0] == 5) { print $_. "\n"; } } close(IN); これで最初の欄に5が含まれている列だけ表示されるのですが htmlに出力すると、そのまま下記のように表示されます 5,データ1,データ1の説明 5,データ2,データ2の説明 5,データ3,データ3の説明 これでは余りにみずらいので、以下のように変更しました open(IN, "data.csv"); print "<table>"; while (<IN>) { if ((split(/,/))[0] == 5) { print "<tr><td>". $_. "</td></tr>"; } } </table> close(IN); これで少しは見やすくなったのですが・・・ ↓のように。 5,データ1,データ1の説明 5,データ2,データ2の説明 5,データ3,データ3の説明 この,で区切られた部分も</td><td>で表示したいのですがうまくいきません。 先ほど質問した時に教えていただいたURLを参照しましたがサッパリでした; 検索で、csvファイルをリストに格納して print "<table><tr>"; print "<td>$data_view[0]</td>"; print "<td>$data_view[1]</td>"; print "<td>$data_view[2]</td>"; print "</tr></table>"; と表示させれば良い、という記事をみつけたのですが これをすると 先ほど成功した最初のデータに5が一致した分だけ表示させる、という部分が機能しませんでした;; まだまだ勉強不足かとは思いますが何卒お願い致します

    • ベストアンサー
    • Perl
  • 一覧から選択した行の行番号を取得について

    はじめまして。 一覧を表示させて一覧の先頭の選択ボタンを押したした行の行番号の取得し、その行にシステム日付を表示させたいのですが、うまくいきません。 現在は、btn_selectにalertを入れて選択した行の番号が取得できたかどうか確認したところ、取得できず%{#stat.index}が出力されてしまいます。 どのようにすればボタンを押した行の行番号の取得及びその行のある項目にシステム日付を表示させることができますか?。 宜しくお願いします。 <%@ page contentType="text/html; charset=UTF-8" %> <%@ page pageEncoding="Windows-31J" %> <%@taglib prefix="s" uri="/struts-tags" %> <%@taglib prefix="original" uri="/original-tags" %> <%@taglib prefix="originalLY" uri="/original-LY-tags" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <%@ include file="html-head.jsp" %> <script type="text/javascript"> function btn_select(indx) { alert (indx); } </script> </head> <body> <%@ include file="HeaderTitle.jsp" %> <s:form> <table class="table_line" > <tr> <th rowspan=2 class="form_title_list" >選択</th> <th rowspan=2 class="form_title_list" >A</th> <th rowspan=2 class="form_title_list" >B</th> <th rowspan=2 class="form_title_list" >C</th> <th colspan=2 class="form_title_list" >D</th> </tr> <s:iterator value="shinchokuList" status="stat"> <tr> <s:if test="%{#stat.index % 2 == 0}"> <td class="table_list1"><input type="button" value="選択" name="button" onclick="btn_select(%{#stat.index});"/></td> <td class="table_list1" ><s:textfield name="List[%{#stat.index}].A" size="10" maxlength="10" readonly="true" /></td> <td class="table_list1" ><s:textfield name="sist[%{#stat.index}].B" size="63" maxlength="63" readonly="true" /></td> <td class="table_list1" ><s:textfield name="List[%{#stat.index}].C" size="5" maxlength="5" readonly="true" /></td> <td class="table_list1" ><s:textfield name="List[%{#stat.index}].D" size="10" maxlength="10" readonly="true" /></td> <td class="table_list1" ><s:textfield name="List[%{#stat.index}].E" size="10" maxlength="10" readonly="false" cssStyle="%{eErr}"/></td> </s:if> </s:else> </s:iterator> </table> </td> </tr> </table> </s:form> </body> <html>

  • データ

    データが送れているのかをプリントで確かめたのですが、$xの値しか表示されません。 セレクトボタンで選択した値が代入できません。 データが送られていないのでしょうか? どこが間違っているのか教えてください。 #!c:/perl/bin/perl <<省略>> print "<table border=1>"; print "<tr><td>商品番号</td><td>商品名</td><td>価格</td>"; print "<td>残り個数</td><td>注文数</td></tr>"; open(RF,"<butu.dat"); while(<RF>){ @data=split; print "<tr><td>$data[0]</td><td>$data[1]</td><td>$data[2]円</td>"; print "<td>$data[3]個</td><td><select name='ko[$n]'>"; for($i=1;$i<=$data[3];$i++){ print "<option value=$i>$i</option>"; } print "</select></td></tr>"; $n++; } close(RF); print "</table><br><br><input type='hidden' value='$n' name='gyo'>"; <<省略>> exit; ↓↓↓ #!c:/perl/bin/perl print "Content-type: text/html\n\n"; require 'cgi-lib.pl'; &ReadParse(\%in); $x=$in{'gyo'}; for($n=0;$n<$x;$n++){ $d[$n]=$in{'ko[$n]'}; } <<省略>> exit;

    • ベストアンサー
    • Perl
  • テキストの表示について

    テキストの表示についてですが、 テキスト枠を2行分とり、その中で表示し切れない文字列は"..."で 表示されるようにしたいのですが、うまくできません。 <div class="textEllipsis" style="height: 38px; width: 660; text-overflow: ellipsis overflow: hidden;">  <table class="BorderNone">   <tr>    <td>     <bean:write name="data" property="cbTrialRefPeer.title" ignore="true"/>    </td>   </tr>  </table> </div> 1行でならうまくいくのですが、 2行だと"..."ではなく文字列が切れて表示されてしまいます。 何かよい方法はないですか。

    • ベストアンサー
    • HTML
  • 検索結果の表示形式を表形式にしてだしたいのですが・・・

    CGI初心者です。データベース検索のCGIをフリーからカスタマイズをかけて利用を試みています。今の状態では、検索結果が、 print "<LI><a href=\"$script?mode=view&no=$no\">$sub</a>\n"; 状態で表示されます。 が、これをメンテするときの一覧状態にしたいのです。 メンテ時の表示プログラムは、 # 管理画面を表示 &header; $count = @lines; print "<center>\n"; print "<form action=\"$script\" method=\"$method\">\n"; print "<input type=hidden name=pass value=\"$in{'pass'}\">\n"; print "<input type=hidden name=mode value=\"admin\">\n"; print "<input type=hidden name=action value=\"delete\">\n"; print "<table border=1 cellspacing=1><tr>\n"; print "<th>削除<th>料理名<th>食種<th>食材<th>調理法<th>コメント</tr>\n"; foreach $line (@lines) { local($no,$sub,$com,$p1,$p2,$p3) = split(/<>/, $line); $com =~ s/<br>/ /g; $com =~ s/</&lt;/g; $com =~ s/>/&gt;/g; if (length($com) > 60) { $com = substr($com,0,58); $com = "$com" . '..'; } print "<tr><th><input type=checkbox name=del value=\"$no\"></th>"; print "<td><b><a href=\"$script?mode=mente&no=$no\">$sub</a></b></td>"; print "<td>$part1[$p1]</td><td>$part2[$p2]</td><td>$part3[$p3]</td>"; print "<td><small>$com</small></td></tr>\n"; } print "</table><P>\n"; です。どうしたら、メンテ時のような一覧の表形式で表示できるのでしょうか? あと、あまりに言語がわからないので、なにか良い参考書及びHPがあれば教えてください。

    • 締切済み
    • CGI
  • 掲示板で親のデータを子に反映させる方法

    スミマセン。基本だと思いますが、教えてください。 Joyful系の掲示板のファイルなのですが、 各記事の親記事にある特定のデータを、 取り出す方法を教えて下さい。 5<>IP<>1234567890<> 3<><>2012/01/12(Thu) 08:42<>ウサギ<>Yahoo<> 5<>3<>2012/01/12(Thu) 09:04<>ネコ<><> 1<><>2012/01/12(Thu) 08:41<>イヌ<>Google<> 2<>1<>2012/01/12(Thu) 08:41<>ウサギ<><> 4<>1<>2012/01/12(Thu) 09:03<>タヌキ<><> こんな感じで、データが記入されるdatファイルがあります。 「1のレスが2・4」「3のレスが5」です。 それで、親記事に「Yahoo」や「Google」というデータが入っているので、 親記事1にレスしてる2・4でも、 親記事に入ってる「Google」といった文字を反映したいのです。 うまく伝えられ無いので、画像にしてみましたので見てやって下さい。 私が見てるプログラムでは、 レスはレスで、「Google」等の文字を探してしまっているので、望む形にならないのです; どうぞ、よろしくお願いします! ↓ざっくり。この辺りの最初の方に、親だけ読み込んで、$search1 とかに、セットできないかと考えています。 ★━━━━━━━━━━━━━━━━━━━━★ local($ipt,$wh,$i,$flag); # 記事を展開 open(IN,"$logfile") || &error("Open Error : $logfile"); $top = <IN>; $i=0; $x=1; $flag=0; # ソート無し:必要最小限だけ読み込み if(!$sort && !$threadsuu){ while(<IN>){ if((split(/<>/))[1] eq "") { $i++; } if ($i < $page + 1) { next; } if ($i > $page + $p_log) { next; } push(@DATA,$_); } } # ソート無し、スレッド表示有り elsif(!$sort && $threadsuu){ @DATA = <IN>; } # ソート有り:全データを読み込んでソート実行 else{ @DATA = <IN>; if($sort == 1){ &ressort; } if($sort == 2){ &nosort; } } close(IN); # 新着スレッドを表示 if($threadsuu || $up_down){ &thread; } # レスの表示制限をする場合には、配列を改造 if($max_res){ &omit; } foreach(@DATA){ ($no,$reno,$date,$name,$mail,$search) = split(/<>/); # ページ処理 if($sort || $threadsuu){ if ($reno eq "") { $i++; } if ($i < $page + 1) { next; } if ($i > $page + $p_log) { next; } } if (!$reno && $flag) { print "</td></tr></table><br><br>\n\n"; $flag=1; } if (!$reno) { print "<table class=\"table1\" align=\"center\" cellspacing=0 cellpadding=2>\n<tr><td>"; $flag=1; } if ($reno && $line_color) { print "<hr noshade size=1 width='85%' color=\"$line_color\">\n"; } print "<table width=100% border=0 cellpadding=2 cellspacing=0>\n<tr>"; if ($reno) { print "<td rowspan=2 width=40><br></td>"; } if($line_color){ print"<td>"; } elsif($reno){ print"<td class=\"b2\">"; } else{ print"<td class=\"b1\">"; } if (!$reno) { print "<span class=\"sub\"> <font color=\"$t_color\"><b>$sub </b></font></span>";} else { print "Re:<font color=\"$t_color\"><b>$sub </b></font></span>";} if($search == "yahoo") { print "投稿者:<span class=\"name\">$name</span> yahooで検索";} elsif($search == "google") { print "投稿者:<span class=\"name\">$name</span> Googleで検索";} else { print "投稿者:<span class=\"name\">$name</span> その他で検索";}

    • ベストアンサー
    • Perl
  • 表示を一覧表形式にしたいのですが組みかたを教えてください。

    検索データを一覧表で表示したく、いろいろやってみたのですができません。なぜできないのか、どこがいけないのかおしえていただきたいのですが・・・ 一応、一覧表で表示されていたスクリプトをお手本にやっていたのですが、知識がなさすぎてわかりません。よろしくおねがいします。 sub search { &header; print "<table border=1 cellspacing=1><tr>\n"; print "<th>情報提供者<th>ユーザ名<th>業務<th>顧客管理元<th>責任者<th>コメント</tr>\n"; # キーワード前準備 $in{'word'} =~ s/ / /g; @word = split(/\s+/, $in{'word'}); open(IN,"$logfile") || &error("Open Error : $logfile"); $i=0; while (<IN>) { ($no,$sub,$com,$p1,$p2,$p3,$p4) = split(/<>/); if ($in{'P1'} ne "99" && $in{'P1'} ne "$p1") { next; } if ($in{'P2'} ne "99" && $in{'P2'} ne "$p2") { next; } if ($in{'P3'} ne "99" && $in{'P3'} ne "$p3") { next; } if ($in{'P4'} ne "99" && $in{'P3'} ne "$p4") { next; } # キーワードマッチ $flag=1; foreach $key (@word) { if (index($_,$key) >= 0) { $flag=1; } else { $flag=0; last; } } if (!$flag) { next; } $i++; print "<td><b><a href=\"$script?mode=view&no=$no\">$sub</a></b></td>"; print "<td>$part1[$p1]</td><td>$part2[$p2]</td><td>$part3[$p3]</td><td>$part4[$p4]</td>"; print "<td><small>$com</small></td></tr>\n"; print "</table><P>\n"; } close(IN);

    • ベストアンサー
    • Perl
  • データ)表示件数について

    PHPとCSVでデータを表示させる事は出来ました。 希望は、 Pagerを使い1ページに表示する件数を10件としたいのですが、うまくいきませんでした。 よろしければ修正 or ご教授よろしくお願い致します。 <?php require("Pager/Pager.php"); $params = array( 'mode' => 'sliding', 'perPage' => 20, 'delta' => 5, 'urlVar' => 'p', 'separator' => ' |', 'curPageSpanPre' => '', 'curPageSpanPost' => '', 'prevImg' => '&lt;前の20件', 'nextImg' => '次の20件&gt;', 'firstPageText' => '最初', 'firstPagePre' => '[', 'firstPagePost' => ']', 'lastPageText' => '最後', 'lastPagePre' => '[', 'lastPagePost' => ']', 'spacesBeforeSeparator' => 0, 'spacesAfterSeparator' => 1, 'totalItems' => 1000, 'altFirst' => '最初のページへ移動', 'altPrev' => '前のページへ移動', 'altNext' => '次のページへ移動', 'altLast' => '最後のページへ移動', 'altPage' => 'ページ', ); $pager =& Pager::factory($params); $links = $pager->getLinks(); if ($links['pages'] != '') { echo $links['first'], $links['back'], ' | ', $links['pages'], ' | ', $links['next'], ' ', $links['last']; } print<<<eof <table width="550" class="table01"> <tr> <td width="32" height="18"><div align="center"><strong>画像</strong></div></td> <th width="123"><strong>名前</strong></th> <th width="58"><strong>材料</strong></th> <th width="56"><strong>時間</strong></th> <th width="53"><strong>費用</strong></th> <th width="55"><strong>美味しさ</strong></th> <th width="56"><strong>日</strong></th> <th width="81"><strong>詳細ページ</strong></th> </tr> eof; $csv = fopen ("item.csv", "r") or die(print "ファイルを開く事が出来ませんでした"); while ($items = fgetcsv ($csv, 1000,",")) { print "<tr>\n"; print "<td height='40' rowspan='2'><img src='$items[0]'/></td>\n"; print "<td><center>$items[1]<center></td>\n"; print "<td>$items[2]</td>\n"; print "<td>$items[3]</td>\n"; print "<td>$items[4]</td>\n"; print "<td>$items[5]</td>\n"; print "<td>$items[6]</td>\n"; print "<td>$items[7]</td>\n"; print "</tr>\n"; print "<tr>\n"; print "<td height='16' colspan='7'><div align='left'><a href="$items[8]"></a></div></td>\n"; print "</tr>\n"; } fclose($csv); ?>

    • ベストアンサー
    • PHP
  • perl内のhtml文を、ループさせたいのですが、これってできないんでしょうか?

    たびたび申し訳ありません。周りに聞く人もいなく、まったくの初心者ですので、なにとぞお願いいたします。 下記の「ここから~ここまで」の$iの値を変えながらループさせたいのですが、まったくうまくいきません。なにかいい方法あったら教えてください。 それとも、こんな書き方じゃダメなんでしょうか? #!/user/bin/perl open(IN,"data.csv"); #flock IN,2; @line = <IN>; #flock IN,8; close(IN); $cnt = 0; foreach(@line){ ($sina[$cnt],$jpg[$cnt],$pr[$cnt],$kakaku[$cnt]) = split(/\,/,$_); $cnt++; } print<<"EOF"; Content-type: text/html <HTML> <HEAD> <TITLE>やぁ!</TITLE> </HEAD> <BODY> EOF ###################ここから print<<"EOF"; <TABLE border="1"> <COL span="4" width="100"> <TBODY> <TR> <TD width="300">$sina[$i]</TD> <TD width="300">$jpg[$i]</TD> <TD width="300">$pr[$i]</TD> <TD width="300">$kakaku[$i]</TD> </TR> </TBODY> </TABLE> EOF ##################ここまで print<<"EOF"; </BODY> </HTML> EOF

    • ベストアンサー
    • CGI

専門家に質問してみよう