桁数を揃えるには?
[上に]
[前に]
[次に]
がんま
[E-Mail]
1998/09/08(火) 23:35:21
また、ちょっと質問させて頂きます。
例えばデータファイルの中に
123
72
5
234
とこのように、一行ずつの数値が入っていたとします。
これを綺麗に「3桁」にして並べようと思っているのです。
元々3桁になっているのは、そのまま表示されるとして
72と5を「072」「005」と、このように
足りない桁は「0」を入れるようにして表示したいのです。
open(IN,'number.dat');
$bbb = <IN>;
close(IN);
@aa = split(//,$bbb);
while ($#aa < 3) {@aa = (0,@aa);}
foreach $min (@aa) {print "$min";}
このように、書籍などを参考にして組んで見たのですが
どうもこのプログラムでは反応せず
「000」と表示されるだけになってしまいます。
このことで、何か良い方法がありましたら
教えて下さい。 よろしくお願いします。
とほほ
1998/09/09(水) 00:53:33
printf("%03d", $bbb)ですね。(^_^)
mm
1998/09/09(水) 01:00:35
普通は、close(IN); の後で、
printf( "%03d", $bbb );
とすると思います。
ところで、元のスクリプトは、
while ($#aa < 2) {@aa = (0,@aa);}
としてもダメですか?
mm
1998/09/09(水) 01:01:47
ありゃ、すいません、またやってしまいました(^^;
しかも、7分くらいのタイムラグがありますね(^^;;;;
がんま
[E-Mail]
1998/09/09(水) 12:05:53
とほほさん、mmさん、ご返答ありがとうございました。
あの一文を入れたら、3桁で表示ができました。
>while ($#aa < 2) {@aa = (0,@aa);}
そのようにしても、二桁になるだけで、特に他に変化は見られませんでした。
教えて頂いた一文を入れたのですが
これ一桁の場合は良いのですが、二桁や三桁の場合
先頭の一桁だけ認識してしまいます。
open(IN, 'number.dat');
@bbb = <IN>;
foreach $min (@bbb) {
($aaa) = split(//, $min);
printf ("%03d", $aaa);
print "\n";
}
close(IN);
このプログラムを使ってみると
123
72
という場合、「001」「007」となってしまいます。
「printf」は、いじりようが無いみたいで
昨日書いた「while」文などを使っても、うまく組むことが出来ませんでした。
度々すみませんが、良い方法がありましたら
ご返答をお願いします。
がんま
[E-Mail]
1998/09/09(水) 14:52:56
解決しました(^^
($aaa) = split(//, $min);を外して
printf ("%03d", $aaa);を
printf ("%03d", $min);に変更したら
左に0が並んで、3桁表示が出来ました。
いろいろとありがとうございました。
がんま
1998/09/09(水) 19:38:32
まだ、ちょっと、聞きたいことがあります。
例えばフォームから入力された数値に対して
足りない桁数の場合に「0」を付けたい場合に
どう表記すれば良いのか、教えて頂きたいのです。
$sec = ("%02d", $sec);
と言うような、表記は有り得るでしょうか?
上記の問題に対して、これをやってみたのですが
全く無反応でして・・・。
「if」に組み込んで見ても
表記されないか、めちゃくちゃな文字が表示されるだけでした。
このことで、出来ましたらご返答をお願いします。
解決したと思ったのに・・・何か解決すると別な問題が発生する。
これがプログラムなのか・・・う〜ん。
mm
1998/09/09(水) 21:13:42
$sec = sprintf("%02d", $sec);
では?
mm
1998/09/09(水) 22:19:29
>>while ($#aa < 2) {@aa = (0,@aa);}
>そのようにしても、二桁になるだけで、特に他に変化は見られませんでした。
なんで? と思ったら、改行がくっついていたんですね。
@bbb = <IN>; した後は、chop @bbb; しておきましょう。
がんま
1998/09/10(木) 00:00:56
[[解決]]
mmさん、いろいろとありがとうございます。
お蔭様で、私の考えていた形にすることが出来ました。
>@bbb = <IN>; した後は、chop @bbb; しておきましょう。
これは、まだ成功していません。
多分、私の組み方に問題があると思うので
もう少しいろいろ試してみます。
本当に、ありがとうございました(^^
mm
1998/09/10(木) 00:54:22
あっ、chop は考え方の問題で、プログラムとしては、
必ずchop が必要であるということではありませんです。
がんま
1998/09/10(木) 02:22:07
>必ずchop が必要であるということではありませんです。
そうなんですか。
さっきも試したのですが、何故か実行されなかったのです。
正直言って、私はプログラムの組み方が理解出来ていないので(涙)
継続は力なりの言葉を胸に、がんばろ。
[上に]
[前に]
[次に]