Perlコーディング初心者質問スレ Part 50
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/06/26(月) 00:46:38ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0285nobodyさん
2006/07/06(木) 16:54:28ID:???OSはWINです。
すごい初心者で変な質問ですみません。
perlで、dosコマンドを実行することって
できるんでしょうか。
たとえば、
print "del a.txt";
というようにファイルを消そうと標準出力しても
実行できませんでした。
可能でしたら、方法ご教授お願いします。
0286281
2006/07/06(木) 16:56:24ID:gzQtm5v/それです!ありがとうございます。
>>283>>284
print <<HTML;
hoge$i_code
HTML
だとどうなんですかね。
汎用性に問題あり?
教えてクレクレ君の分際で偉そうにすみません。
ありがとうございました。
0288nobodyさん
2006/07/06(木) 17:11:28ID:???実行するだけならsystem関数、その出力が欲しいならバッククォートまたは、パイプでopen。
だが、そのファイルを消すというのが単なる例じゃないとしたらunlink関数を使うべき
>>286
284はこういう場合に問題ありだな
"${i}nhoge"
0294nobodyさん
2006/07/07(金) 12:05:06ID:???Perl5.8で、jcode.plやJcode.pmを使わずに
全角英数と半角英数の変換を行う方法があれば、教えてください。
0295nobodyさん
2006/07/07(金) 12:32:03ID:???step1. 文字コードについて理解する
step2. がんばる
0296294
2006/07/07(金) 14:25:27ID:???下記のようなスクリプトをUTF-8で保存し、
入力テキストファイルもUTF-8で記述したところ、うまく動作しました。
$_ = decode('utf8',$_);
の部分の意味がよくわからないので教えてください。
ここは何をしてるんでしょうか?
use strict;
use utf8;
use Encode qw/ encode decode /;
while (<>){
$_ = decode('utf8',$_);
tr/[0-9]/[0-9]/;
print;
}
0297nobodyさん
2006/07/07(金) 15:11:08ID:???オアエスゴイナww
0298nobodyさん
2006/07/07(金) 15:19:10ID:gJw2prbrやっぱforeachとかで中身を展開しながら1コずつ処理するしかない?
jcode.plとかJcode.pmとで配列そのものを扱う方法ってある?
>>294
英数字限定なら正規表現でどぞ。
0299nobodyさん
2006/07/07(金) 15:40:01ID:???0300298
2006/07/07(金) 16:19:58ID:???CGI.pmでフォームの内容を配列に入れて文字コードごにょごにょってのは
結構色んなとこで使われそうな処理なんで、実装されてたりするのかなぁ、と思ったもんで。
無いと分かれば、安心して配列回しまくれますわ。さんくす。
0301294
2006/07/07(金) 16:27:23ID:???[]は要らないよ、とおっしゃっているのでしょうか?
>>298
正規表現というと、具体的には?s///を使ってできるという意味ですか?
0302nobodyさん
2006/07/07(金) 17:13:35ID:???1byte 単位(正確には 8bite 単位)の処理から utf8 の文字列処理に
変換している。
$_ = decode('euc-jp', $_ ) ;
なら、8bite 単位の羅列を euc-jp でエンコードされてると見做
した上で、utf8 に変換。
0303294
2006/07/07(金) 17:26:00ID:???レスありがとうございます。
バイト単位から文字単位へ、という事が必要なので
読み込ませるテキストがUTF8でも必要、という事でしょうか。
読み込ませるテキストの文字コードがわかってない時はややこしそうですね。
0305205
2006/07/07(金) 20:47:14ID:???open(F,">$localsubjectpath")||die"subject.txtをopen出来ません:$!";
foreach(@localsubject){print F $_;}
close(F);
が追記モードになっていたために2重に書き込んでしまうという症状が起きました。
上書きモードで実行したらうまくいきました。
くだらない質問に答えてくれて本当にありがとうございました。
0306nobodyさん
2006/07/07(金) 21:37:02ID:???解決おめ。
234で指摘したのとほぼ同じ原因でないか…自力で二日も模索乙
まさか、まだ追記モードを使っていたとは夢にも思ってなかった訳だが。
0307nobodyさん
2006/07/07(金) 22:07:16ID:???おめ。
俺はがんばって >>234 のコードを読解して新しく書き直してるのかと思ってたw
少しは参考にすればいいのにね。
0308294
2006/07/08(土) 10:38:42ID:???こちらでの質問はこれで終わりとし、
別スレでこちらで回答していただいた事を元に
少しポイントをしぼって質問してみたいと思います。
回答していただいた方々、ありがとうございました。
0309294
2006/07/08(土) 10:40:49ID:???0310nobodyさん
2006/07/08(土) 13:48:22ID:???0311nobodyさん
2006/07/08(土) 14:50:57ID:9n4HcMAb「〜」の変換がうまくいきません。
変換できずに、「\x{ff5e}」になってしまいます。
JISにも「〜」ありますよね。
どうしたら回避できるでしょうか?
0312nobodyさん
2006/07/08(土) 14:58:49ID:???どの文字コでも設定と正規表現で2行だと思うけどw
0314nobodyさん
2006/07/08(土) 15:15:04ID:???Unicodeと既存のエンコーディングのマッピングを作る際に、〜のマッピングがメーカーによって
WAVE DASHとFULLWIDTH TILDEの二つに分かれてしまったことに起因する問題。
http://ja.wikipedia.org/wiki/Unicode
事前に"\xEF\xBD\x9E"(\x{FF5E})を"\xE3\x80\x9C"(\x{301C})に変換して統一してやればOK。
ちなみにUTF-8はASCIIとの兼ね合いは勿論のこと、1バイト目の範囲が2バイト目以降の範囲と
重ならないように設計されているから、utf-8フラグを使用しない場合でも、ずれてマッチする心配はしなくて大丈夫。
0316nobodyさん
2006/07/08(土) 15:28:25ID:???とってもまだるっこしいですが、
encode('iso-2022-jp', decode('shiftjis', encode('cp932', $x)))
とする手もあります。
日本は既存の文字コードとunicodeの対応表をつくるにあたって
統一に失敗して大きく2種類(JISとMS)できてしまったため、こんな
面倒を強いられるのです。恨むなら当時の関係者を恨んでください。
ちなみに「〜」を\x{ff5e}にするのはMS流で、JISだと\x{301c}に対応
させることになっています。
個人的には日本語に関してはunicodeはunicode-jisをunicode-msの
2種類あると思って、それらを自動判定して相互変換するJcode相当の
モジュールが欲しいなと思います。
0317nobodyさん
2006/07/08(土) 15:31:47ID:???そういう面倒を吸収してくれるライブラリがやっぱり必要なんじゃない?
0318nobodyさん
2006/07/08(土) 15:39:20ID:???→ Jcode (それ以下)
とかやって、その自作モジュのとこで対策すればいいのかもだね
0319nobodyさん
2006/07/08(土) 15:40:35ID:???ttp://search.cpan.org/dist/Encode-EUCJPMS/EUCJPMS.pm
使え的な指摘がありますよ。
0320nobodyさん
2006/07/08(土) 15:41:10ID:???0321311
2006/07/08(土) 15:41:57ID:9n4HcMAb〜は事前に\x{301c}に変換したいと思います。
実際、携帯電話からの入力なので、
Encode::from_to( $x, "CP932","UTF8");
としてUTF8に変換してたのですが、CP932→UTF8なので「〜」が\x{ff5e}になってしまうんでしょうか?
0322nobodyさん
2006/07/08(土) 15:55:45ID:???0323nobodyさん
2006/07/08(土) 16:11:50ID:???0324nobodyさん
2006/07/08(土) 17:22:37ID:H4L43ePpこれを省略せずに書くとどうなりますか?
配列の1番目から4番目まで限定的ではなく
配列内全てをforeachする書き方が分かりません。
@hoge_Aと@hoge_Bの要素数は同じです。
0325nobodyさん
2006/07/08(土) 17:40:04ID:???> push @fuga, $hoge_A[$_] . $hoge_B[$_] foreach 0..3;
> これを省略せずに書くとどうなりますか?
foreach my $i (0,1,2,3) {
push @fuga, $hoge_A[$i] . $hoge_B[$i];
}
0326nobodyさん
2006/07/08(土) 17:41:41ID:???省略せず、じゃなくて一般化の話かな。
まず要素数を取得し、そこから範囲を作る。そのRangeに対してforeachもしくはmap
push @fuga, $hoge_A[$_] . $hoge_B[$_] foreach 0..@hoge_A-1;
or
@fuga = map { "$hoge_A[$_]$hoge_B[$_]" } map 0..@hoge_A-1;
しかし、要素数は同じと言い切れるんだったら、同時に管理されるデータなんだろ?
なら関連性のある二つのデータを別の配列に入れると言う、その構造を何とかしたほうが良いと思う。
@fuga = map { "$_->{A}$_->{B}" } @hoge;
そうすると、こんな風にできる。詳しくはperllolを参照
0327nobodyさん
2006/07/08(土) 17:44:23ID:???@hoge_A-1 を $#hoge_A
と書くのがBest Practice。
$#は配列の最後の要素番号を表すから、
配列のインデックスとして使う場合に適している。
0329326
2006/07/08(土) 18:01:09ID:H4L43ePp「配列の1番目から4番目まで回す」んじゃなくて
「(0,1,2,3)という配列を回す」ってことだったんですね。
ありがとうございます。
>>326
大変詳しい回答と説明ありがとうございます。
想定通りの結果を得ることができました。
>関連性のある二つのデータを別の配列に入れると言う、その構造を何とかしたほうが良いと思う。
まさにその通りで、そのために今回の処理をしようとしていました。
具体的には(情報の後出しになってしまいますが...)
フォームから「月」と「日」を取得し、「日付」という配列に格納するための処理です。
とにもかくにも、アドバイスまでいただいて本当にありがとうございました。
>>327
より良いコードのためのアドバイスありがとうございます。
勉強になりました。
0330nobodyさん
2006/07/08(土) 18:04:13ID:???0331nobodyさん
2006/07/08(土) 18:51:46ID:???環境なくなっちゃって確認できなくて orz
0332nobodyさん
2006/07/08(土) 19:08:45ID:???0334nobodyさん
2006/07/08(土) 20:17:42ID:???1 while $cnt != push @fuga, ( shift @hoge_A ) . ( shift @hoge_B ) ;
つーのを思いついた自分に鬱
0335nobodyさん
2006/07/08(土) 21:09:20ID:???ある掲示板スクリプト(bbs.cgi)があるとします。
自分のWEBサイトではこの掲示板をいくつか設置しているのですが、
そのたびに、「bbs1.cgi」、「bbs2.cgi」、「bbs3.cgi」みたく名前を付けて設置しています。
これをクエリを使用して「bbs.cgi?c=1」や「bbs.cgi?c=2」みたくしたいのですが、考え方が分かりません。
ちなみにできればWEB上から必要な数を必要なだけ作成できるようにしたいと思っています。
アルゴリズムだけで構いませんので、どうかよろしくお願い致します。
0336nobodyさん
2006/07/08(土) 21:17:18ID:???0337nobodyさん
2006/07/08(土) 21:59:16ID:???>>335
そのスクリプトの構造にもよるけど十中八九大改修。
他の掲示板と共有できない点を洗い出すことから始めるといいよ。ログファイルとか。
ファイル名変えてる=同一ディレクトリって所から危なっかしいけどPerl関係ない…
改造スレあたり行くのが無難だと思う。
0338nobodyさん
2006/07/08(土) 22:33:57ID:???print $x;
としようと思うのですが、$xはリファレンスの可能性があります。
リファレンスの場合であってもref関数でチェックなどせずにそのまま表示しようと思うのですが、リファレンスだとメモリの場所がわかるわけですよね。
これが何かセキュリティ上問題になるようなことはあるのでしょうか。
例えば、他の変数の内容を閲覧できてしまう、といったことがあれば考え直そうと思うのですが。
0339nobodyさん
2006/07/08(土) 22:38:32ID:???無理なのでもうすこし地道に勉強してからの方がいいと思われる。
0340nobodyさん
2006/07/08(土) 22:39:14ID:???0341nobodyさん
2006/07/08(土) 22:42:45ID:???そんなことで悩んでる暇があったら表示されないようにちゃっちゃと
書き直すほうが早い。
メモリの場所がわかっただけで即やられるということはないだろうが、
他のセキュリティホールとの合わせ技でなんかされる可能性を
否定するのは難しい。
0342nobodyさん
2006/07/09(日) 05:26:05ID:???> これが何かセキュリティ上問題になるようなことはあるのでしょうか。
直接の問題はないと思う。
が、何を「セキュリティ上問題」とするかによるだろうね。
「メモリの場所がわかる」ことも見方によれば問題だろうし。
0343nobodyさん
2006/07/09(日) 05:32:57ID:???ログ読み込みで
open fh,"log$ENV{QUERY_STRING}.dat";
ログ書き込みで
open fh,">log$ENV{QUERY_STRING}.dat";
・・・不特定多数が来る板だとキケンかもw
0344nobodyさん
2006/07/09(日) 05:40:13ID:???$xはリファレンスでなかったら何になる可能性があるの?
リファレンスになるかもしれない$xを表示したいwebコンテンツ
って言うのが謎なんだけど・・・w
0345338
2006/07/09(日) 07:29:33ID:???ありがとうございます。
>>344
確かにそうですね、、よく考えるとそう思います。
ちょっとアルゴリズムを再考してみます、ありがとうございました。
0346nobodyさん
2006/07/09(日) 13:14:05ID:OFKeC9Kgそういうことはできますか?
簡単な例で言うと、
@DATA = ('B','A','A','B','A','D','C','D');
という配列を対象とした場合は、
@DATA = ('B0','A0','A1','B1','A2','D0','C0','D1');
といった感じです。
map{$count{$_}++}@DATA;
という風にしていくつ重複があったかを調べることはできたんですが
その都度、数字を振る方法が分かりません。
分かる方、どうぞよろしくお願いします。
0347nobodyさん
2006/07/09(日) 13:21:34ID:???0348nobodyさん
2006/07/09(日) 13:24:03ID:???>>347
何故に grep ?
0349nobodyさん
2006/07/09(日) 13:36:33ID:???>>347さん
>>348さん
即回答ありがとうございます!
どちらの方法でもうまくいきました。
348さんの記述の方がより簡潔なのでそちらの方を使わせてもらおうと思いますが
347さんの記述も参考にして勉強します(恥ずかしながら記述の内容が理解できてないので)。
ありがとうございました!
0350nobodyさん
2006/07/09(日) 15:12:46ID:???それだと 0 が付かないと思ったら、ちゃんと付くんだね。
++ で空の値が 0になる方が. の連結より評価が先になるってことか。
grep 使うのは @data に書き戻さないで良いから(@dataを直接書きかえる)。
>>348 のを grep で書くと
grep { $_ = $_ . $count{$_}++ } @data;
0351nobodyさん
2006/07/09(日) 15:29:54ID:???>grep 使うのは @data に書き戻さないで良いから(@dataを直接書きかえる)。
いや、map でも無精しなければ…。s/grep/map/ してみ?
0352nobodyさん
2006/07/09(日) 15:42:53ID:???でよくね?
# TMTOWTDI
0354nobodyさん
2006/07/09(日) 16:19:00ID:???制御構文の後置って書いていて気持ちいいんだよな
0355nobodyさん
2006/07/09(日) 16:29:17ID:Grc/Miyg以下のようなハッシュと配列があります。
my %sex = (
'm' => '男性',
'f' => '女性',
);
my @list = ('name','age','sex','mail','addr', ・・・);
プログラム中で、
while (my($key,$val) = each(%sex)){
・・・
}
という処理を行いたいのですが、%sexの'sex'という文字列を、@listから拾いたいのです。
while (my($key,$val) = each(%{$list[2]})){
・・・
}
というふうに。
もちろん上記の例では「ハッシュではありません・・・」という意味のエラーが出るのですが、
やりかたがわからず困っています。
each(eval ('%' . "$list[2]")
でもやっぱりダメで、他に考え付きません・・・
よろしくお願い致します。
0356nobodyさん
2006/07/09(日) 16:39:01ID:???ってか普通は %sex とかを $hash->{sex} = {}; とかってやる気がする。
ちなみに eval でやるなら
each(eval ('%' . "$list[2]") → each(eval ("\\%$list[2]") こうじゃね。
0357nobodyさん
2006/07/09(日) 16:46:51ID:???0358nobodyさん
2006/07/09(日) 16:46:54ID:???0359355
2006/07/09(日) 19:33:47ID:???配列@listには、"配列やハッシュに使う「名前」"だけを格納してるのです。。
>>358
evalの使い方を間違えていたのですね。
ありがとう。その例でできました。
0360nobodyさん
2006/07/09(日) 20:03:39ID:???>配列@listには、"配列やハッシュに使う「名前」"だけを格納してるのです。。
どういう経緯でそうなったかは知らないけど、
eval使いまくりで効率悪くなる事この上ないなぁ。
my %var = (
'sex' => {
'm' => '男性',
'f' => '女性',
},
...
);
みたいにして
each %{$var{$list[2]}}
とすると、eval使わなくていいけど。
0361nobodyさん
2006/07/09(日) 20:04:15ID:???デバッガ作るんでもなけりゃ名前をキーにしたハッシュにしとけよ。
0362nobodyさん
2006/07/09(日) 20:39:33ID:???0363nobodyさん
2006/07/10(月) 09:14:03ID:???メモリの取得とか開放とか 変数使ったときの内部の挙動が
いまいち心配なのですがどうしたらよいでしょうか
0364nobodyさん
2006/07/10(月) 09:41:10ID:???perlのGCはリファレンスカウントなので循環参照を作って使い
捨てるとメモリリークになる。これに注意すれば無限に太り続ける
ことはないだろう。
perlは基本的にosからとったメモリは返さないので、一度でも大量に
メモリを使うと太ったままになる。それが困るようならたまにexecする
ぐらいしか手はない。
例外もあるがくわしくはperlfaq3の
How can I free an array or hash so my program shrinks?
参照。
0365nobodyさん
2006/07/10(月) 16:54:29ID:kBFNwS+Apushで複数の配列に同時に要素を代入する方法ってありますか?
0367nobodyさん
2006/07/10(月) 17:18:03ID:kBFNwS+Aありがとうござました。
おとなしく、2つ目の配列に1つ目の配列を代入します。
0368nobodyさん
2006/07/10(月) 17:46:11ID:???0369nobodyさん
2006/07/10(月) 18:08:23ID:kBFNwS+A数字を、片方はそのまま(データ処理用)、
もう片方はコンマ付き(ブラウザ表示用)、
と分けようとしたとき、その過程でどこかに
同じ配列を用意しないといけないと思っていました。
そうしなくても良い方法ってありますか?
0370nobodyさん
2006/07/10(月) 18:14:45ID:???0371nobodyさん
2006/07/10(月) 18:16:43ID:???どうせカンマ付きはそこで使い捨てになるんだろうし。
同じ配列2つだと整合性の問題もある。
0372nobodyさん
2006/07/10(月) 18:24:39ID:kBFNwS+A数字のデータ → 配列A → 素のデータ → 処理
→ 配列B → コンマ付きデータ → ブラウザ出力
という流れを想定しての質問でした。
>>370
確かに結果的には別の要素になりますが、その過程(�Aの時点)では
同じ要素を入れる必要があると考えていたので、その局所的な点から
「同じ要素」と言ってしまいました。誤解を与えたならすみません。
>>371
ブラウザに表示するのは1度ではないので、その都度コンマを付けるより
初めから別に配列のデータを作って代入した方が良いかと思っていました。
整合性の問題については具体的には良く分かりません。
0373nobodyさん
2006/07/10(月) 18:27:23ID:???(3) の時点で配列のコピーつくればいいんじゃ?
var Array2 = Array1.concat(); とかして
0374nobodyさん
2006/07/10(月) 18:33:57ID:???>整合性の問題については具体的には良く分かりません。
途中で素のデータの方に変更がかかると
コンマ付きの方と値がズレるかも、ということ。
素のデータを更新したら、その都度、コンマ付きの方も更新しないといけない。
そういう心配をするなら、一つにしといた方が間違いが無い。
0375nobodyさん
2006/07/10(月) 18:50:46ID:kBFNwS+A(2)の段階で配列を2つ作ることと
(3)の段階で配列のコピーを作ることとの違いが分かりません。
>var Array2 = Array1.concat();
こういうのは見たことがないんですが、
配列のコピーというのはそういったテンポラリファイルとしてコピーする
モジュールか何かがあって、それを使うということでしょうか?
>>374
ご説明ありがとうございます。
配列に代入した後にデータを変更することはないので
その点については大丈夫です。
ただ、そういう考え方は重要ですね。
0376363
2006/07/10(月) 18:52:56ID:???ありがとうございまんこ
変数はローカル変数でも消費しちゃうのかな
とりあえず、perlでデーモンはいったんあきらめてみます
0377nobodyさん
2006/07/10(月) 19:12:46ID:???> 配列に代入した後にデータを変更することはないので
今の処理ではそうでも、何か拡張したときに変更するかも知れない。
データは1つだけ持っておき、出力時に変換関数を通すほうが安全。
同一データを変換する処理が数百回にも及ぶため、変換後のデータをキャッシュしておきたい、
というような要求に見えるが、安全性からはオブジェクトにして、データへの変更時には、
キャッシュも必ず更新されるようコーディングすべき。
0378nobodyさん
2006/07/10(月) 19:41:21ID:kBFNwS+Aアドバイスありがとうございます。
例えば、ブラウザに直接表示される部分はコンマ付きの値を
同時にフォームのhiddenでコンマ無しの素の値を、それぞれ置いておく
と言った場合には、局所的にせよ、やはり同じ配列を用意して
片方だけをコンマ付きにする必要があると思うんですが、
どうでしょうか?
0379nobodyさん
2006/07/10(月) 19:46:27ID:???0380nobodyさん
2006/07/10(月) 19:51:23ID:???配列全体に渡って作ろうとしているのか、そこが不明。
どうせ表示して終わりなんでしょ?
だったら、テンプレートにフィルタかけて、
表示側だけコンマ付きにすることもできるのに。
まぁ重複管理したければどうぞ。
0381nobodyさん
2006/07/10(月) 20:01:11ID:???0382nobodyさん
2006/07/10(月) 20:11:58ID:kBFNwS+Aはぁ・・・そうですか。
気分を害されたようでしたらすみません。
別段口答えしようというわけではなく、
指摘されたようなデータの保持の仕方は
理想的で、常にそうあるよう心掛けるべきだとは思いましたが、
どんな場面でも適用できるのか疑問に思ったので
しつこく質問してしまいました。
すみませんでした。
>>380
>なんで一時的にしか使わないコンマ付きの値を、
>配列全体に渡って作ろうとしているのか、そこが不明。
例えば、「数字をフォームに入力し、その数字について確認する
確認時には見やすいようにコンマ付けされた数字をブラウザには表示する
しかし、それとは別にhiddenで素の数字を置いておく」
といった場合のやり方をするためには、同じ配列を用意して
片方の配列のみコンマ付け仕様にする、という方法しか思いつかなくて
そうしていました。
ちなみに、配列内全てが入力された数字の情報なので、配列全体に渡って
コンマ付きの値を作る必要があるという流れになりました。
>だったら、テンプレートにフィルタかけて、
>表示側だけコンマ付きにすることもできるのに。
この方法については知りませんでした。
具体的にどういうことかはよく理解できませんが、
これ以上の質問はスレ汚しになりそうですし
お怒りを買いそうなので、これにて失礼します。
レス下さった方々ありがとうございました。
気を悪くされた方々、悪意はありませんでした。すみませんでした。
0383nobodyさん
2006/07/10(月) 20:24:53ID:???379だけど、
別に気分害したわけでもなく、単にどっちでもいいと思っただけw
好きなように書かないと楽しくもないし、そっちのがお手軽なら、そうすればいいんじゃね? みたいな。
せっかく perl なんだから、1つの方法にこだわることないし。
>>380 とかだって、よりいいやり方もあるよ、って示しただけだしね。
0384nobodyさん
2006/07/11(火) 00:36:18ID:???メモリ上の配列を弄ってもデータファイルには影響ないのだから、データ保存完了後に
好き勝手弄ればいい
0385nobodyさん
2006/07/11(火) 10:15:27ID:???あるいはパフォーマンス上、別データとして保存する利点もある。
しかし、同一の値を1回だけ出力するという今回の質問では不要。
元データだけ持っておき、出力時に変換すれば十分。
というか、メモリの無駄使い。
■ このスレッドは過去ログ倉庫に格納されています