WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:Perlで2次元配列

かば[MAIL][URL][WriteDate : Sun Oct 1 06:19:44 2000]

ブラウザに表を出すCGIで、縦に同じ情報が連続したら、縦にセル連結させたいと思います。とりあえず列毎に配列を用意して、先頭の要素からチェックし、連続する情報があったらその数を数え、連続する情報が始まる要素へもどってROWSPAN=nを書き込むようにしました。
ですが、これだと予め列数を決めて配列を用意するので、汎用性が乏しくなってしまいます。2次元配列を使えば簡単なんですが、Perlでは使えません。ハッシュの値に配列を持たせることができれば似たようなことができるかも知れません。何かアイデアはありませんか?

ちゃいぱ[MAIL][URL][WriteDate :Sun Oct 1 06:58:00 2000]

わたしのレベルでは、質問が理解できません。
>2次元配列を使えば簡単なんですが
などなど...。

私も、たぶん、
>「先頭の要素からチェックし、連続する情報があったらその数を数え、連続する情報が始まる要素へもどってROWSPAN=nを書き込むようにしました。」
このように処理しますよ!

よくわからないので、以下で、質問してみてください!
http://x68000.startshop.co.jp/~68user/


Qz[MAIL][URL][WriteDate :Mon Oct 2 02:33:25 2000]

2次元配列は、Perlではないですが・・・
ハッシュやリファレンス(Perl5)を使うことで、似たようなことは可能です。
Perlのバージョン5以上なら、リファレンスを使うと、便利だと思います。

例)
$a[0]->[0] = 1;
$a[0]->[1] = 2;
$a[1]->[0] = 3;
$a[1]->[1] = 4;

print $a[0]->[0];


かば[MAIL][URL][WriteDate :Tue Oct 3 21:58:30 2000]

できました!
教えていただいた方法で、思い通りの機能ができました。
データファイルの内容次第で、列数も行数も変幻自在のCGIになりました。引数でデータファイル名を渡せば、色々使いまわせます。
Perlのリファレンスなんて、入門書には書いてなかったし、知らなかったなあ。Cの構造体の配列みたいですが、要素数を宣言しなくていいし、とても便利ですね。もうCにはもどれない気分です。
Qzさん、ありがとうございました。

バギンズ[MAIL][URL][WriteDate :Fri Oct 20 14:42:26 2000]

既に完了してしまった内容ですが、ちょっと一言。

Perlで2次元配列をやる場合の一般的な方法は、ハッシュで普通に2次元風に使うだけです。

↓こんな感じ

$hash{1,2}
$hash{$a,$b}

区切り文字は、$;に設定されている値です(初期値:カンマ)

B-Cus[MAIL][URL][WriteDate :Sat Oct 21 03:02:50 2000]


> $a[0]->[0] = 1; 

好みの問題かもしれませんが、$a[0][0]=1 でいいでしょう。

> Perlで2次元配列をやる場合の一般的な方法は、ハッシュで
> 普通に2次元風に使うだけです。 

$a[0] に属する値のみを表示したい、という用途では困ります。
 Ex. foreach (@{$a[0]}){ print $_ }
僕はリファレンスを使う方がよいと思います。

> (初期値:カンマ) 
$; の初期値は 0x1c です。


Qz[MAIL][URL][WriteDate :Sat Oct 21 08:43:55 2000]


>$hash{1,2} 

僕は、Perlは、5から、はじめたので、ハッシュをこういう風に使うやり方は、
勉強に使った本に、ちょこっと書いてありましたが、すぐ、わすれました(^^

>> $a[0]->[0] = 1;  
>好みの問題かもしれませんが、$a[0][0]=1 でいいでしょう。 

確かにこっちのがわかりやすいですね。



バギンズ[MAIL][URL][WriteDate :Sat Oct 21 11:30:19 2000]

私はどの方法でも使う人の好み(用途に合った方法)でいいと思います。

ハッシュを使う方法は、Perlのリファレンスに載っている方法の1つとして提示したまでです。
「一般的に」という表現を使ったのは、Perl4の頃から使われている方法だからですが、今時、Perl4にこだわっているわけではありません。

>> (初期値:カンマ)  
>$; の初期値は 0x1c です。 
すいません。0x1cでした。m(_ _)m
私の認識が間違ってました。
回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]