map関数を使った配列の書き込みについての質問

このQ&Aのポイント
  • map関数を使って配列をファイルに書き込む際、正しく値を書き込む方法について教えてください。
  • 現在のコードでは、セットした値ではなくARRAY(0x81e4c10)<>ARRAY(0x81e4c4c)<>ARRAY(0x81e4c88)<>ARRAY(0x81e4cc4)という具合になってしまっています。
  • この問題を解決するためのコードを教えていただけませんか。
回答を見る
  • ベストアンサー

map関数についての質問です

お世話になります、連続の質問になりますが宜しくお願いします $arg_[0]<>$arg_[1]<>$arg_[2]<>$arg_[3] という具合な配列をmap関数を使って open(OUT,">>$logfile") || &error("Write Error : $logfile"); print OUT join('<>',(map{$arg_.[$_]} (0..3)),); close(OUT); として、ファイルに書き込むと 事前にセットした変数値ではなく ARRAY(0x81e4c10)<>ARRAY(0x81e4c4c)<>ARRAY(0x81e4c88)<>ARRAY(0x81e4cc4)<> こういう具合になってしまいます、正しく $arg_[0]<>$arg_[1]<>$arg_[2]<>$arg_[3] にセットした値を書き込むコードを教えて頂けませんでしょうか。

  • Perl
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • TNY
  • ベストアンサー率42% (69/163)
回答No.1

print OUT join('<>',(map{$arg_.[$_]} (0..3)),); ↑ここの $arg_.[$_] にピリオド入ってるのが原因ではないですか?

goodjob_001
質問者

お礼

TNYさんありがとうございます 単純なミスでした。

関連するQ&A

  • プロセッシングのmap関数

    プロセッシングで、float x =map(a,b,c,d,e)の使い方が分からないので教えてください。

  • 複数の配列の要素を繰り返し処理をして書き込むと変数の中身がおかしくなってしまいます。

    いつもお世話になります 複数の配列の要素を繰り返し処理をして書き込むと変数の中身がおかしくなってしまいます。 ポストメソッドで複数のテキストを受けて書き込みたいのですが、書き込む内容が""になってしまいます print qq|<form action=\"$myself\" method=\"POST\">\n|; LOOP: foreach $i (0..7) { foreach $j ($x..$x + 3) { print qq|@eqipument[$j]<input type=text name="arg_$j" size_1=35>\n|; last LOOP if ($j == $#eqipument); } $x = $x + $x_colm; print qq|<br>\n|; } @eqipumentの配列の要素を変数arg_$jで配列が終わるまで繰り返して入力画面を表示させます その後 # デスク書き込み open(OUT,">>$logfile") || &error("Write Error : $logfile"); $j = 0; foreach(0..@eqipument) { print OUT "$in{'arg_$j'}<>"; $j++; } close(OUT); として書き込みをすると、変数arg_$jの内容が空になってしまい<>だけがかきこまれます 変数部分を arg_0,arg_1,arg_2.... と明示して書くときちんと入力画面で入力した テキストが書きこめれますが、入力項目も多いですしプログラム的にも見難いので 繰り返し処理で書き込みをしたいのですがなぜこのような結果になるのか(arg_$jの内容が空になる)理解できません又 print qq|$in{'arg_$j'}\n|;として 変数の中身を検証するためにコンソールに出力すると中身は "" になっています 宜しく御教授お願いします。

    • ベストアンサー
    • Perl
  • ログファイルの記録数

    # ログ更新 unshift(@new,"$num<>$addr\n"); open(OUT,">$logfile") || &error("Write Error: $logfile"); print OUT @new; close(OUT); 上記ログの書込みに、最大保存数を設定したいのですが、どのようにすればいいのでしょうか。 $max = 3; とした場合、3行超えたら古いファイルを消したいと考えています。よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • データの入れ替え処理が巧くできないのですが

    いつもお世話になります 簡単なDBを作っているのですが、データの更新処理が巧くいかなくててこずっています POSTメッソドで送られてきた name=actionの内容がedit2、の時 sub menteが実行されます同じく name=noの変数には更新したいファイルの番号がセットされます それらを取得して、ファイルを開き $nooの内容(DBのファイル番号)とnoが一致したらブラウザから送られてきたデータと その部分のデータ($nooはデータの先頭で以降<>で区切って変数が格納される) を入れ替える処理を行いたいのですがどの様に書いたらいいのでしょうか、下記のコードですと変数 $_に更新される前のデータしか代入できず結果ファイルの入れ替えは行えません open(IN,"$logfile") || &error("Open Error : $logfile"); while (<IN>) { ($noo,@arg_[0..$#eqipument],@p[0..5],$n_article,$w_article,@reselect_marks) = split /<>/; if ($no == $noo ) { $_ = join('<>',$noo,(map{$arg_[$_]}(0..$#eqipument)),$p0,$p1,$p2,$p3,$p4,$p5,$n_article,$w_article,@reselect_marks,),'<>',"\n"; } push(@new,$_); } close(IN); # 更新 open(OUT,">$logfile") || &error("Write Error : $logfile"); print OUT @new; close(OUT); 尚ブラウザから送信されてくるデータは以下のような感じです print qq|<form action=\"$myself\" method=\"POST\">\n|; print qq|<input type=hidden name=mode value=\"admin\">\n|; print qq|<input type=hidden name=action value=\"edit2\">\n|; print qq|<input type=hidden name=no value=\"$no\">\n|; 宜しく御教授お願いいたします。

    • ベストアンサー
    • Perl
  • ダブりを消す

    データの中でダブっている行を消したいのですがどうしたらよいでしょうか? 例えば $a,$b,$c,$d,$e,$f,$g,$h 1,2,3,4,5,6,7,8 1,2,3,4,5,6,7,8 1,1,1,1,1,1,1,1 と三行あって一行目と二行目がダブっているので一つにしたいのです↓。 1,2,3,4,5,6,7,8 1,1,1,1,1,1,1,1 いま作っているのは while ($record = <FILE>) { chomp $record; push @array,$record; @x = sort keys %{{map {$_,1} @array}}; } close FILE; foreach (@x){ print OUT "$_\n"; } としてやっていますがなかなかうまくいきません。 良い方法があれば教えてください

    • ベストアンサー
    • Perl
  • ある程度変数名に規則性のある連続したファイルのデータをスマートに読み込みたいのですが

    お世話になります 各々変数が<>で区切られたファイルを開いて、各々の変数に代入したいと思います 変数の内容は $no,$arg_0,$arg_1,$arg_2,$arg_3....,$arg_34,$p1.$p2,$p3 とかなり大きなデータ構造です、普通に open(IN,"$logfile") || &error("Open Error : $logfile"); while (<IN>) { ($no,$arg_0,$arg_1,$arg_2,$arg_3,....$arg_34,$p1,$p2,$p3) = split(/<>/); if ($no == $in{'no'}) { last; } } close(IN); とすれば、多分問題なく実行出来るのですがあまりにも芸もなくソースも見ずらい ものになってしまいます、スマートな書き方を教えて頂けないでしょうか宜しくお願いします。

    • ベストアンサー
    • Perl
  • UTF-8にマップできません???

    今、Atomを愛用しております。 チャンと日本語変換できているのに 後半のようなエラーが出るのはなぜでしょうか??? import java.applet.*; // Applet import java.awt.*; // Label, TextField, TextArea, Color, Button import java.awt.event.*; // ActionListener, ActionEvent import java.io.*; // InputStream, BufferedReader, InputStreamReader etc import java.net.*; // URL, Socket, UnknownHostException import java.util.*; // StringTokenizer //public class Chat extends Applet implements Runnable, ActionListener { // Runnable, ActionListenerインターフェース実装 Label TitleLabel; // タイトルラベル TextField InputField; // 入力フィールド Button SendButton; // 送信ボタン Button QuitButton; // 終了ボタン TextArea DisplayArea; // 表示エリア TextArea MemberArea; // メンバーエリア Thread thread; // スレッド Socket socket; // ソケット String Name = null; // 名前 //AudioClip Chime; // チャイム BufferedReader NetInput; // ネットワーク経由入力 PrintStream NetOutput; // ネットワーク経由出力 C:\JAVA>javac Chat.java Chat.java:9: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:9: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:9: エラー: この文字(0x93)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:9: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:9: エラー: この文字(0x81)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:9: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:9: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:9: エラー: この文字(0x81)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:9: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:9: エラー: この文字(0x8E)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:9: エラー: この文字(0xC0)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:9: エラー: この文字(0x91)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:9: エラー: この文字(0x95)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:11: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません Label TitleLabel; // ?^?C?g?????x?? ^ Chat.java:11: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません Label TitleLabel; // ?^?C?g?????x?? ^ Chat.java:11: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません Label TitleLabel; // ?^?C?g?????x?? ^ Chat.java:11: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません Label TitleLabel; // ?^?C?g?????x?? ^ Chat.java:11: エラー: この文字(0x8B)は、エンコーディングUTF-8にマップできません Label TitleLabel; // ?^?C?g?????x?? ^ Chat.java:11: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません Label TitleLabel; // ?^?C?g?????x?? ^ Chat.java:11: エラー: この文字(0x89)は、エンコーディングUTF-8にマップできません Label TitleLabel; // ?^?C?g?????x?? ^ Chat.java:11: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません Label TitleLabel; // ?^?C?g?????x?? ^ Chat.java:11: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません Label TitleLabel; // ?^?C?g?????x?? ^

    • ベストアンサー
    • Java
  • エクセルの関数について

    時間の計算する表を作ったのですが、うまくいかない所があります。 現在の表は、B4に開始時間とC4に終了時間を入れ5時から22時までの間の経過時間をD4に、22時から5時までの時間経過をE4に入るようにしています。 「C1に5:00、D1に22:00、 B4に=IF(OR(B4="",C4=""),"",IF(OR(B4>=$D$1,B4<$C$1),"",IF(OR(C4>$D$1,C4<=$C$1),$D$1,C4)-B4))、 E4に=IF(OR(B4="",C4=""),"",IF(AND(C4>$C$1,C4<=$D$1),"",IF(AND(B4>=$C$1,C4<=$C$1),1-IF(B4<$D$1,$D$1,B4)+C4,C4-IF(AND(B4>=$C$1,B4<$D$1),$D$1,B4))))」です。 そこで、5時をまたがった時に、5時までの部分をE4に5時からの部分をD4に分けて表示させたいのですが、うまくいきません。 例えば、開始4:30 終了5:10の場合、D4に0:10 E4に0:30が表示させるようにです。 よろしくお願いします。

  • Perlで重複行を削除したい

    あ b c d e e g あ b c d e e g い b c d e e g い c c d e e g 上記のようなCSVデータ(タブ区切り)が100行くらいあるのですが、1列目にある、あ、あ、い、いは無視して、2列目以降のデータのみで重複を比較して同じ行は削除したいのですがどのようにすればよいでしょうか? 下記コードを応用すれば分かりそうなのですが、自分で作ることができませんでした。 どなたか、教えていただけ無いでしょうか? 宜しくお願い致します。 open(OUT, "$file"); @array = <OUT>; close(OUT); my %count; @array = grep(!$count{$_}++, @array); print @array;

    • ベストアンサー
    • CGI
  • アンケートの回答のすべての項目をcsv保存するには?

    下記の内容ではemailしか保存されません。送信フォームには他にnameとcommentがあります。すべてを保存するにはどこに何を追加すればよいでしょうか。 ↓以下csv書き込みの記述抜粋 ----- $logfile = 'logfile'.'.csv';#(ファイル名変更推奨) $log_permissions = 0666; # ファイルが存在しなければ、作成後アクセス権設定してヘッダー書き込み if (-e $logfile) { }else{ open(LOG,">$logfile") || &error("logfile create error!"); chmod $log_permissions, $logfile if $log_permissions; if ($log_header) { print LOG $log_header };#ヘッダー不要ならこの行は削除 } # 出力 open(LOG, ">>$logfile") || &error("logfile open error!"); foreach $i (1..(@key)) { print LOG "$val[$i]".','; } print LOG "\n"; close(LOG); -----

    • ベストアンサー
    • CGI

専門家に質問してみよう