たびたび申し訳ありません。周りに聞く人もいなく、まったくの初心者ですので、なにとぞお願いいたします。
下記の「ここから~ここまで」の$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

A 回答 (2件)

ループさせたいのなら、ループの命令を使いましょう(^^;


for ($i=0; $i<@sina; $i++) {
  # ここから
    :

  # ここまで
}

 ただこれだとテーブルがたくさん出来てしまうので、makitoさんが回答されているように、<TR>~</TR>のループでいいような気もしますが。
    • good
    • 0
この回答へのお礼

$#を使わないでの方法ありがとうございます。
$#はみなさん多用しているみたいですけど、文献で調べてみると$#は時代遅れなので今後使わないようにとの文があり、初心者にとって、なんとなく不安なものがありました。助かります。

お礼日時:2001/07/04 23:39

この前回答させていただいた、初心者です。

(^^;

###################ここから
print<<"EOF";
<TABLE border="1">
<COL span="4" width="100">
<TBODY>
EOF

for($i = 0; $i<=$#sina; $i++){
print<<"EOF";
<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>
EOF
}
print<<"EOF";
</TBODY>
</TABLE>
EOF
##################ここまで

自分ならこうします。
print<<"EOF";
EOF
この間は、別にループするとかそういうことはやらないので、自分でループさせる必要があります。
そこで、for文を使いますが、$#sinaというのは、
@sinaの最後の添え字を表しています。
つまり、10個データがあれば、0,1,2・・・・9ですから、$#sinaには9が入ります。
for文で$iを0から$#sinaまで増やすと、データを全部
書き出すのに便利です。

あと、これくらいの事なら、専門書に載ってますので、
もしお買いになってなければ買ってみてはどうでしょうか?
    • good
    • 0
この回答へのお礼

どもすみません。ありがとうございます。
その前に自分でfor文でやってみたんですが、どうもうまくいきませんでした。
うまくいかないもんなので、もしかして、htmlのループじたいができないのかと思ったしだいです。
ちなみに、本はいっぱい買い込みました。ただし初心者用です(笑)
つまんない質問でどうもすみませんでした、ありがとうございます。

お礼日時:2001/07/04 23:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qフォームのラベルのプロパティを自動で設定したい

Access2013 vba です。

フォームの全てのラベル、テキストボックス、ボタン類をそれぞれの背景色や、テーマ、背景スタイルなどを設定したいのですが、どうやれば、全てのラベル、テキストボックス、ボタンなどを自動でループ処理で取得出来ますでしょうか。

よろしくお願いします。

Aベストアンサー

フォームをデザインビューで開く必要があります。で、保存。
windowmode は適当に。
標準モジュールで
docmd.OpenForm "formName",view:=acDesign,windowmode:=acHidden
forms!formName!ラベル2.backcolor = vbred
docmd.Close acForm ,"formName",save:=acSaveYes

Q[返信]

夜分にすみません。
[~]の鍵括弧はどういう言語なのでしょうか?
htmlの辞書に載っていませんでした・・。

Aベストアンサー

ブラウザで見ると
[返信]
って感じになり「返信」のトコだけ下線付きのリンクになります。
「[」と「]」は単なる文字ですよ(笑)

QVBA:ユーザフォームのラベルの指定の仕方教えてください。

 今、ユーザフォームに20個のラベルがあります。それぞれのラベルは、条件によりラベルの表示内容が変更します。そこで、ラベルの表示変更が必要なときにすぐに変更できるようにしたいと考えています。しかし、例えば以下のようなコードを作成するとエラーになり困っています。
 Label(i)で、iの番号によりラベルが呼び出されないだろうかと自分なりに作りましたがダメでした。以下のようなループ文中で特定のラベルを呼び出し処理することは不可能でしょうか?
 やはり、UserForm1.Label3などのように番号をきちんと書かないとダメでしょうか?本当は、ラベルが82個ありその一つ一つにコードを割り当てるのが大変です。また、きれいなコードで書きたいと思うからです。宜しければ、ご教授願います。
--------------------------------------------
Sub セルの値をラベル表示する()
For i = 1 To 20
With UserForm1.Label(i)
.Caption = Cells(1, i)
End With
Next i
End Sub

 今、ユーザフォームに20個のラベルがあります。それぞれのラベルは、条件によりラベルの表示内容が変更します。そこで、ラベルの表示変更が必要なときにすぐに変更できるようにしたいと考えています。しかし、例えば以下のようなコードを作成するとエラーになり困っています。
 Label(i)で、iの番号によりラベルが呼び出されないだろうかと自分なりに作りましたがダメでした。以下のようなループ文中で特定のラベルを呼び出し処理することは不可能でしょうか?
 やはり、UserForm1.Label3などのように番号...続きを読む

Aベストアンサー

 Excel VBAではコントロール配列はサポートされていませんが、ラベルの名前をLabel1, Label2,・・・ Label20とすると、以下のコードでほぼ同じことを実現できます。

Sub セルの値をラベル表示する()
 For i = 1 To 20
  With UserForm1.Controls("Label" & i)
   .Caption = Cells(1, i)
  End With
 Next i
End Sub

Q「<」や「>」を「&lt;」や「&gt;」に変換させなかったらどうなるのでしょうか?

今CGIをカスタマイズしています。
書き込みフォームでタグを使いたいのですが、タグをそのまま書き込むとHTML出力時に、&lt;や&gt;に変換されて表示されてしまいます。
なのでその変換する処理を無くしたいと思っているのですが、その処理を無くすとどういう不具合があるのでしょうか?無くそうと思っているのは下記のような箇所です。
~ s/</&lt;/g;
~ s/>/&gt;/g;
(わざと全角で書いてます)
書き込みデータにはdatファイルを使っています。

Aベストアンサー

念のため・・・
No.4は表示するときではなく、
>formからのデータ取得時にタグを解析して<b>や<font color="~">以外のタグは変換する
方法のつもりで書きました
※<>→&lt;&gt;変換処理の直後に入れる。

いちいち<font color="~">と記述するのは大変なので、
<色=red>赤文字</色>などと覚えやすいタグにするのも親切でいいかも

#<色=red>~</色>を<font color=red>~</font>に
=~ s/&lt;(色)(.*?)&gt;(.*?)&lt;\/\1&gt;/<font color$2>$3<\/font>/gi;

Qエクセルグラフの軸ラベルを一括変換出来なくて困っています。

お世話になります。
初めて投稿いたします。

VBA初心者です。エクセルグラフの軸ラベルを一括変換したいのですが、分からなくて困っています。

過去ログ、個人HPなどを参考にして、一つのグラフを選択、下記マクロを実行すれば、一つのグラフのみなら軸ラベルを変更する事が出来たのですが、ワークシート内の複数の埋め込みグラフを一発でラベル変更する場合のマクロが作成できません。

当方会社員、データをまとめる為、今回100ヶほどのグラフを一括変換したいため、どうしてもマクロ処理したいと考えています。
For Each・・・Next でループさせたいのですが、何分初心者勉強中の為、エラー多発、何方かお分かりの方、お助け下さい。


Sub 軸ラベル一括変換()
With ActiveChart
With .Axes(xlCategory, xlPrimary)
.HasTitle = True
.AxisTitle.Text = "X"
End With
With .Axes(xlValue, xlPrimary)
.HasTitle = True
.AxisTitle.Text = "y"
End With
End With
End Sub

お世話になります。
初めて投稿いたします。

VBA初心者です。エクセルグラフの軸ラベルを一括変換したいのですが、分からなくて困っています。

過去ログ、個人HPなどを参考にして、一つのグラフを選択、下記マクロを実行すれば、一つのグラフのみなら軸ラベルを変更する事が出来たのですが、ワークシート内の複数の埋め込みグラフを一発でラベル変更する場合のマクロが作成できません。

当方会社員、データをまとめる為、今回100ヶほどのグラフを一括変換したいため、どうしてもマクロ処理したいと考え...続きを読む

Aベストアンサー

こんなのではどうでしょうか?

ActiveSheetの全グラフを変更する場合
Sub 軸ラベル一括変換()
Dim co As ChartObject
For Each co In ActiveSheet.ChartObjects
With co.Chart
With .Axes(xlCategory, xlPrimary)
.HasTitle = True
.AxisTitle.Text = "X"
End With
With .Axes(xlValue, xlPrimary)
.HasTitle = True
.AxisTitle.Text = "y"
End With
End With
Next
End Sub

全シートの全グラフを変更する場合
Sub 軸ラベル一括変換()
Dim ws As Worksheet
Dim co As ChartObject
For Each ws In ThisWorkbook.Worksheets
For Each co In ws.ChartObjects
With co.Chart
With .Axes(xlCategory, xlPrimary)
.HasTitle = True
.AxisTitle.Text = "X"
End With
With .Axes(xlValue, xlPrimary)
.HasTitle = True
.AxisTitle.Text = "y"
End With
End With
Next
Next
End Sub

こんなのではどうでしょうか?

ActiveSheetの全グラフを変更する場合
Sub 軸ラベル一括変換()
Dim co As ChartObject
For Each co In ActiveSheet.ChartObjects
With co.Chart
With .Axes(xlCategory, xlPrimary)
.HasTitle = True
.AxisTitle.Text = "X"
End With
With .Axes(xlValue, xlPrimary)
.HasTitle = True
.AxisTitle.Text = "y"
End With
End With
Next
End Sub

全シートの全グラフを変更する場合
Sub 軸ラベル一括変換()
Dim ws As Worksheet
Dim co As ChartObject
For Eac...続きを読む

Qループ中にlabel_clickの読み込みを認識する

開発環境はMicrofoft visual stdio 2005 で開発言語はC#を使い、Windousアプリケーションでプログラミングしているのですが
ループ中に、ラベルがクリックされたことを認識したいのです。ソースで説明すると
private void Form1_Load(object sender, EventArgs e)
{
  while(1)
  {
    if(label1がクリックされたら・・・)
    {
    }
    else if(label2がクリックされたら・・・)
    {
    }
  }
}
このようなif文を書きたいのですが、よい方法はないでしょうか?
よければ御知恵を貸してください。よろしくおねがいしますm(__)m

Aベストアンサー

あるプロシージャの中でループしているときに他のコントロールでのイベントを認識させるなら Application.DoEventsなどを呼び出してWindowsのメッセージポンプを機能させましょう

LabelのClickイベント自体は別途記述して そのフォームクラスのフィールドにクリックされたのかどうかを記憶しておきます

そのループ処理中でフィールドをチェックするようにすればいいと思います

boolean lbl1Click= false, lbl2Click = false;
などと宣言しておいて

void lblClick( s as object, e as Eventargs )
{
  Label lbl = (Label)s;
  if ( lbl.Name == "label1 )
  {
    lbl1Click = true;
  }
  esle if ( lbl.Name == "label2" )
  {
    lbl2Click = true;
  }
}
といった具合でクリックイベントを処理します

ループ処理側では
while( 1 )
{
  Application.DoEvents();
  if ( lbl1Click )
  {
    // Label1がクリックされた場合の処理
  }
  else if( lbl2Click )
  {
    // Label2がクリックされた場合の処理
  }
}
といった具合でしょう …

あるプロシージャの中でループしているときに他のコントロールでのイベントを認識させるなら Application.DoEventsなどを呼び出してWindowsのメッセージポンプを機能させましょう

LabelのClickイベント自体は別途記述して そのフォームクラスのフィールドにクリックされたのかどうかを記憶しておきます

そのループ処理中でフィールドをチェックするようにすればいいと思います

boolean lbl1Click= false, lbl2Click = false;
などと宣言しておいて

void lblClick( s as object, e as Eventargs )
{
...続きを読む

Qハッシュについて><;

ハッシュにいれた変数と値を、それぞれ
変数=値
の形にしたいのですが、どうすればよいのでしょうか?><;

どなたか教えてくださいーっ><;

Aベストアンサー

while(($var, $val)=each %hash){
#処理
#$$var=$val;
}
って感じだと思うけど、
ハッシュに入れた変数というのは、リファレンスですか?
でないとうまくないけど
(ハッシュの内容というのがもうひとつ、不明なので)テストしてないのでちゃんと動くかどうかはわかりません。

どういう感じでやっているのか補足して下さい。

Qワードの連番のラベル名が消える

ワード2003+XPです。
連番機能で、三種類のラベルA,B,Cに対して連番を作成しました。
保存後に開くといつの間にか、ラベルAが全てラベルBに変わり、元のAとBが区別なく連番がつきました。

フィールドコードを見ると元は
ラベルA・・・・・ SEQ ラベルA・・・・
ラベルB・・・・・ SEQ ラベルB・・・・
ラベルC・・・・・ SEQ ラベルC・・・・
だったものが、何故か、

ラベルA・・・・・ SEQ ラベルA・・・・
が全て
ラベルB・・・・・ SEQ ラベルB・・・・
に変わっています。
オフィスと自宅で文書作成をしておりどこで変わったのかわからないのです。
どなたか原因について心当たりあれば教えてください。
手動で、もとに戻しましたが、再発を防止したいので。

Aベストアンサー

図表番号がおかしい動作をするのですね。
もしかしたらWord2000を使っていませんか?

例えば、変更履歴を使っていませんか?
[WD2000] クロスリファレンス、図表番号の番号が異なる
http://support.microsoft.com/kb/252619/ja

それ以外の原因だとこちら↓とか。
http://support.microsoft.com/kb/252619/ja
http://support.microsoft.com/kb/211707/ja

どれもWord2000の不具合のようなのですが、私はWord2000を触る程度に
扱ったことがありますが、現時点での対処方法はサポートページにある
ものを紹介する以外にアドバイスはできません。他のバージョンの場合
ならWordのバージョンを補足されてはいかが。

Word2007を使っている場合だと、私はまったく門外漢ですので補足への
追加回答はほとんどできないと思います。
(他のバージョンでも専門家ではないので門外漢は不適切な使い方かも)

とりあえず変更履歴を使わないとか、[ SEQ ]フィールドを[図表番号]
からではなく直接フィールドコードから入力するとかの手動で対応する
とかで対応ことになるようですが。
(確実な対処方法ではないし、適切なアドバイスでもありませんが)

図表番号がおかしい動作をするのですね。
もしかしたらWord2000を使っていませんか?

例えば、変更履歴を使っていませんか?
[WD2000] クロスリファレンス、図表番号の番号が異なる
http://support.microsoft.com/kb/252619/ja

それ以外の原因だとこちら↓とか。
http://support.microsoft.com/kb/252619/ja
http://support.microsoft.com/kb/211707/ja

どれもWord2000の不具合のようなのですが、私はWord2000を触る程度に
扱ったことがありますが、現時点での対処方法はサポートページにある
もの...続きを読む

Qどうやればいいのかわかりません><;

あるプログラムを完成させたいんですが、
以下の部分がうまくいきません。

foreach $del_word ( @del){
if ( "$FORM{'sub_product'}" =~ /$del_word/){
open(IN, ">>./csv/log.csv") or printErrorPage("エラー");
eval{ flock (FILE, 2) };
seek(IN, 0, 2);
print IN "$in";
close(IN);
{ exit; }
}
}

簡単に説明しますと、
@delは1行に1単語(例えば「時計」など)ずつ約10行ほど入力したdel.csvファイルの内容が入っています。

ちなみにそこの部分は
open(OUT, "./csv/del.dat") or printErrorPage("エラー");
eval{ flock (OUT, 1) };
@del = <OUT>;
close OUT;
です。

そして、どういった作業をしたいかというと、
この$FORM{'sub_product'}に入っているワードに@delに収納されているワードがひとつでもマッチする場合、
$inという文章をlog.csvに書き込むというプログラムです;;

初心者なのですが、どなたかアドバイスいただけたらと思います!!どうぞ宜しくお願いしますーっm(_)m

あるプログラムを完成させたいんですが、
以下の部分がうまくいきません。

foreach $del_word ( @del){
if ( "$FORM{'sub_product'}" =~ /$del_word/){
open(IN, ">>./csv/log.csv") or printErrorPage("エラー");
eval{ flock (FILE, 2) };
seek(IN, 0, 2);
print IN "$in";
close(IN);
{ exit; }
}
}

簡単に説明しますと、
@delは1行に1単語(例えば「時計」など)ずつ約10行ほど入力したdel.csvファイルの内容が入っています。

ちなみにそこの部分は
open(OUT, "./csv/del.dat") or p...続きを読む

Aベストアンサー

>以下ではなぜか動作しません><;
多分、
@delと@nodelと@limdel
の配列のサイズが違うのに
$nで参照しているからじゃないですかね~
同じサイズの配列で、同じ位置にあるもので判定するならいいかもしれないですけど。
いちいち、配列でループして調べるのがいいと思いますけど
例えば、あんまり能率を気にしないのだったら
$retdel =grep "$FORM{'sub_product'}" =~ $_/x, @del;
$retnodel =grep "$FORM{'sub_product'}" =~ $_/x, @nodel;
$retlimdel=grep "$FORM{'sub_product'}" =~ $_/x, @limdel;
とかしておいて
if($retdel > 0 && $retnodel==0 && $retlimdel > 0){
#@delでマッチしてかつ、@nodelにマッチしなくてかつ、@limdelにマッチ
}
とかできるかも(未確認)


人気Q&Aランキング

おすすめ情報