perlでデータをランダムに保存するには?
[上に]
[前に]
[次に]
あんでぃ
[E-Mail]
1998/11/08(日) 00:06:08
普通に掲示板ではデータを保存するときに順に保存しますが、
たとえば
A
B
C
D
というデータにEを保存するときに
Dの後だけでなくAの前、Bの後、Cの後などに
データを挿入させることはできるのでしょうか?
B-Cus
1998/11/08(日) 00:53:18
int(rand(10))は、0〜9の整数をランダムに返します。
ABC…の項目数を数えて、randでどこに挿入するか決めると
いいでしょう。
乱数のシードの初期化は
srand(time|$$);
が一般的です。
あんでぃ
[E-Mail]
1998/11/08(日) 02:14:09
申し訳有りません。
挿入のさせ方も・・・分かりません。
ご迷惑をお掛けします。
Tiot
[HomePage]
1998/11/09(月) 01:47:26
ほかにもっとうまい方法もあると思いますが
@a = ("a", "b", "c", "d", "e");
$new = "x";
srand(time|$$);
$max = $#a +1;
$rnd = int(rand($max));
for ($i = 0; $i <= $max; $i++) {
if ($i == $rnd) {
push (@b, $new);
} else {
push (@b, shift @a);
}
}
print @b;
とほほ
1998/11/09(月) 23:34:27
質問はこういうことではないかな?
$E="XXX";
open(IN, "file.txt");
$A = <IN>; $B = <IN>; $C = <IN>; $D = <IN>;
close(IN);
open(OUT "> file.txt");
print OUT "$A\n$B\n$E\n$C\n$D\n";
close(OUT);
つまり、ファイルに対して挿入はできないので、一度バッファに読み込
んで、ファイルを再度作り直す・・・
あんでぃ
[E-Mail]
1998/11/10(火) 00:04:10
あ!そうです、そうです。
分かりにくい質問の仕方で申し訳有りません。
あと、データの数は不定になるのですが、
その場合はどのようにするべきでしょうか。
(すみません、まだまだ不慣れな物で。)
B-Cus
1998/11/10(火) 00:25:25
だから〜、ちゃんとした質問の仕方をしましょうよ〜。
1行につき1データと決めつけていいんですか?
open(IN,"file.txt");
@a = <IN>;
close(IN);
$new = "x";
srand(time|$$);
$max = $#a +1;
$rnd = int(rand($max));
for ($i = 0; $i <= $max; $i++) {
if ($i == $rnd) {
push (@b, "$new\n");
} else {
push (@b, shift @a);
}
}
open(OUT,">file.txt");
print OUT @b;
close(OUT);
見てのとおり、ほとんどTiotさんの書かれたものと
変わってません。
失礼ながら、まずはperlの本をじっくり読まれた方が
いいんじゃないですか?
しなのむし
1998/11/10(火) 02:09:14
非常に特殊な掲示板?に思えるのですが
用途等、もっと具体的であれば答えようが
あると思うのですが・・・
とほほ
1998/11/11(水) 00:41:13
おそらく、「ランダムに挿入」ではなくて、Aの発言とBの発言の間に
Cの発言を挿入したい。けれども、ファイルへの挿入書き込みの方法が
分からなかった。・・・ということなのでしょう。
open(IN, "file.txt"); @xx = <IN>; close(IN);
open(OUT, "> file.txt");
while ($yy = pop(@xx)) {
if (挿入したい時) { print OUT "挿入データ\n"; }
print OUT $yy;
}
close(OUT);
あんでぃ
[E-Mail]
1998/11/11(水) 10:15:24
[[解決]]
色々とありがとうございました。
これから頑張って精進していこうと思います。
perlの本は数冊買ったのですがなかなか
自分の欲しい情報が載っていなかったもので・・・
何かお薦めの本があれが教えて下さい。
それと自分が作ろうとしていたのは、
Webringのシステムです。
移動系は一応できたのですが、
登録時に何か工夫はできない物かと考えたのですが、
そこで登録を順々にするのではなくて、
今までのファイルの中にランダムに挿入していったら
面白いのでは、というアイデアだけあって
自分にそれを自作する能力が有りませんでした。
ご迷惑をお掛けしました。
しなのむし
1998/11/11(水) 17:10:36
Webringということは、ランダムに保存じゃなくてランダムに表示で
いいわけですね。(^^;
シンプルですが原形はこんな感じかな?
@datalist = ("a","b","c","d","e");
srand(time|$$);
while(@datalist){push(@randomlist,splice(@datalist,rand(@datalist),1));}
foreach $data(@randomlist){print "$data\n";}
exit;
あんでぃ
[E-Mail]
1998/11/14(土) 00:23:40
えっと、ランダムに挿入して、NEXT BACKの
リンク先が時々変更になるようにしてみたかった訳です。
ずっとお隣さんが同じだったら面白くないから。
[上に]
[前に]
[次に]