- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:フォームに入力された内容で並び替えをする)
フォームに入力された内容で並び替えをするPerlスクリプトの作成方法
このQ&Aのポイント
- Perl初心者の方が、フォームに入力された内容でテキストデータを並び替えて保存するスクリプトの作成方法について質問されています。
- 質問者は、CSV形式で保存されたデータを入力された数字順にソートしたいと考えています。具体的には、$FORM{'num1'}と$FORM{'num2'}に入力された数字に基づいてデータの順序を変更し、保存したいとのことです。
- また、質問者は将来的にデータ項目が増える可能性があるため、それにも対応したいと考えています。しかし、データファイルの中に番号データを記録せずに並び替えをする方法についても教えていただきたいと述べています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
・連想配列%FORMのキーは “num<数字>” ・<数字>はCSVファイルの該当レコードがある行番号を表す。 ・$FORM{“num<数字>”}の値の順序の順序で出力 ――ってのが、仕様なら、こんなロジックでどうでしょう: my %CSV; my $lino = 0; while ( <DATA> ){ $lino += 1; $CSV{"num${lino}"} = $_; } my %FORM; $FORM{'num1'} = 2; $FORM{'num2'} = 1; my @index = map { [ $FORM{$_}, $_ ]; } keys %FORM; for ( map { $_->[1]; } sort { $a->[0] <=> $b->[0]; } @index ){ print $CSV{$_}; } __END__ name1,add1,tel1,mail1,comment1 name2,add2,tel2,mail2,comment2 ただ、一般的な使い方を考えると、順序を直接指定するってのじゃなく、ある列(例えばtel)の名前を指定すると、その列の値でソートする――というのが望まれるような気がします。 そこらへんいろいろプログラミングするのは大変ですから、SQLiteなどデータベースエンジンを利用する方式を検討した方が良いと思います。
お礼
返答が遅くなり、すみませんでした。 本来は、順序の直接指定は良くないとは分かっているのですが、既存のスクリプトに利用しているデータの並び順の自由な変更のみを追加機能として入れなければならなく、そのデータには、番号を振っていないので苦肉の策として、このような形を考えざるを得ませんでした。 素早いご回答、本当にありがとうございました。