• ベストアンサー

配列をファイルに保存する方法、取り出す方法を教えてください

(1)配列をファイルに保存する方法 (2)保存した配列をファイルから出す方法 がよく分かりません。教えていただけないでしょうか。恐れ入りますがよろしくお願いいたします。 (1) $a = "あ"; $b = "い"; $c = "う"; を(@hairetuに入れて?)ファイルに保存する方法。(ファイルにすでに保存済のデータがあった場合には、消去したいと考えております。) (2) ファイルを開き、保存されている(@hairetuを取り出し?$a 、$b 、$cに切り分け?)$a 、$b 、$c を再び"あ""い""う""として用いることができるようにする方法 ちなみに、以下のように記述してみたのですが、上手く動作しませんでした。 #####################(1)配列をファイルに保存################# #!/usr/bin/perl $file = "file.dat"; $a = "あ"; $b = "い"; $c = "う"; $d = "え"; ### $a="あ" $b="い" $c="う" を@hairetuに入れたつもりです。 @hensu = ('$a','$b','$c','$d'); ### @hairetuをファイルに保存したつもりです。 open(FILE, "+<$file"); print FILE @hensu; close(FILE); ##############(2)保存した配列をファイルから出す############### ### ファイルを開き、保存されている@hairetuを取り出したつもりです。 open(FILE, "+<$file"); @hensu = <FILE>; ### @hairetuを再び$a $b $cに切り分けようとしているのですが、これでよろしいでしょうか。 foreach $line (@hensu){ ($a,$b,$c,$d) =split(/\,/,$line); } close(FILE); ### 確認のため表示 print $a; print $b; print $c; print $d; ### これを実行すると、「あいうえ」でなく「$a$b$c$d」と表示されてしまいます。何処が間違っているのか教えていただけると幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • bricks
  • ベストアンサー率69% (16/23)
回答No.2

プログラムのアルゴリズムが どうこういうのは取りあえず置いときます。 じゃあ添削していきます。 @hensu = ('$a','$b','$c','$d'); これはシングルクォーテーションで括っていますので 変数としては認識されません。 ただの「$a」「$b」「$c」「$d」という 文字列が@hensuの各要素に入っています。 変数を展開させたい場合は ダブルクォーテーションで括るか そのまま変数を記入しましょう。 (1)の print FILE @hensu; (2)の @hensu = <FILE>; これはoomiyajiさんの意図とは 異なった挙動を示しています。 oomiyajiさんは配列が(1,2,3,4)という形式で 内部に保存されていると思っているみたいですが あれはただ単に配列の要素を連続で書く場合に 便利な書き方というだけで コンマ形式で保持しているわけではありません。 $hensu[0]や$hensu[2]みたいに 要素毎に管理しています。 ですので(2)の書き方はまったく違います。 oomiyajiさんの意図する書き方は 以下のようになります。 (一部略) ###(1)配列をファイルに保存### $file = "file.dat"; $a = "あ"; $b = "い"; $c = "う"; $d = "え"; @hensu = ($a,$b,$c,$d); open(FILE, ">$file"); print FILE join(",", @hensu); close(FILE); ###(2)保存した配列をファイルから出す### open(FILE, "$file"); $hensu = <FILE>; close(FILE); ($a,$b,$c,$d) =split(/,/,$hensu); print $a; print $b; print $c; print $d; Perlの基礎について書かれた文献を 読んでみた方がよいでしょう。

oomiyaji
質問者

お礼

とても丁寧に添削していただき、大変感謝しております。私の勘違いを的確にご指摘いただき、とても勉強になりました。どうもありがとうございました。おかげさまで、大変助かりました。

その他の回答 (1)

回答No.1

@hensu = ('$a','$b','$c','$d'); ↓ @hensu = ($a,$b,$c,$d); ''と""の違いも理解してください^^; あと個人的にファイルを扱うときはin/outが明確にわかるようにしたいです open(FILE, "+<$file"); ↓ open(FILE, ">$file"); # ファイルに出力(上書モード) open(FILE, "+<$file"); ↓ open(FILE, "<$file"); # ファイル読み込み

oomiyaji
質問者

お礼

どうもありがとうございます。大変助かります。ファイルを開く時の記述の仕方についてまでアドバイスいただき、とても勉強になりました。大変感謝しております。

専門家に質問してみよう