配列を移しかえる時に「何か」が入ります

このQ&Aのポイント
  • 配列を移動する際に何かが配列に紛れ込む問題が発生しています。その原因がわからず、対処方法を模索しています。
  • 配列の振り分けにおいて、何かが配列に混ざってしまう問題が生じています。これを解決するためのアイデアを求めています。
  • 配列の移動時に不明な要素が配列に現れる問題が発生しています。この問題の解決策を探しています。
回答を見る
  • ベストアンサー

配列を移しかえる時に「何か」が入ります

こんにちは。 いま、いろんな人がレスをつけられる掲示板を 自分なりに試行錯誤しながら作っています。 親ログとレスログとの見分けかたは レス番号がついているかついていないかということ。 それで、ファイルを開いて@allに代入したあと、 foreach(@all){ if($resnumber){ push @oyalog,$_; }else{ unshift @reslog,$_; } } として、親ログは新しいものから古いものへ レスログは古いものから新しいものへとなるように 配列をわけて、それからログを表示させるようにしたところ、 なぜか一番最初に「空」のログが表示されるのです。 @allで試したところ、そのような「空」のログは表示されません。 つまり、上記の振り分けの時に、 「何か」が配列に紛れ込んでしまうようなのですが、 それが何なのかわからないため対処の仕方がわかりません。 ログに番号をふるようにしてあるため、 できればこの形(ログファイルには一括して保存。その後振り分け)は 崩したくないので、 なにかアイディアはないでしょうか? よろしくお願いします。m(_ _)m

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

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

  • ベストアンサー
  • the845t
  • ベストアンサー率33% (246/743)
回答No.1

\nが入ってるのでは?

関連するQ&A

  • 配列の使い方について

    my $out = []; push( @$out, "a" ); push( @$out, "b" ); my $all = join( "", @$out); print $all; このようなコードをみかけたのですが、 どうして配列の部分の記述が「@out」でなく「@$out」なのでしょうか? 一番最後の@$outを@outに変更すると、 実行しても何も表示されなくなりました。 pushのところの@$outを@outとしても問題なく実行されました。

    • ベストアンサー
    • Perl
  • ある条件で一致した場合、配列に代入したい

    foreach(0..$#DataLines){ my@aaa= split(/<>/,$DataLines[$_]); if($FORM{No} eq @aaa[1]){ unshift(@bbb,"$DataLines[$_]"); } } print F "@bbb"; した時に配列@bbbにif($FORM{No} eq @aaa[1]){ で一致した場合、その時の配列を全部@bbbに代入したいのですが、最後のしか入らないようなので、これを全部入れるにはどうすれば良いかご教授願えませんでしょうか。 宜しくお願い致します。

    • ベストアンサー
    • Perl
  • 変数名を配列として利用するには?

    複数のモジュールに記述されている配列を1つの配列へ代入したいと思っています。 単純に考えれば、 @array = (@Module1::array, @Module2::array, @Module3::array); で良いのですが、モジュールが多岐に渡っており、モジュール名自体はスカラー変数へ代入して置き、それを利用したいと考えています。 @array = (); foreach $m (qw(Module1 Module2 Module3)) { $mn = $m. '::array'; foreach $w (@{$mn}) { # @Module1::array にアクセスしているつもり push(@array, $w); } } この様なイメージです。 しかし、@{$mn}は Can't use string ("変数名") as an ARRAY ref while "strict refs" in use at 行番号. になってしまいます。 スカラー文字列に入っている配列変数へアクセスするにはどう記述すれば良いでしょうか?

    • ベストアンサー
    • Perl
  • 二次元配列のforeachはどうすれば?

    <form action="form_check.php" method="POST"> <input type="checkbox" name="check[]" value="aaaa"> <input type="checkbox" name="check[]" value="bbbb"> <input type="checkbox" name="check[]" value="cccc"> <input type="submit" value="送信"> </form> フォームでこのように送りました このデータを受け取り、1つにまとめたいのですが foreach($_POST[check] as $val){ if($all){ $all .= ",".$val; }else{ $all = $val; } } このようにしてみたところ Warning: Invalid argument supplied for foreach() とエラーが出ました。 二次元配列でforeachのループをかけるときはどのように記述すればいいのでしょうか。

    • ベストアンサー
    • PHP
  • ExcelのVBAで配列の処理 PHPから移行する新米ですが・・・

    PHPからVBAに移行を考えているのですが、VBAの考え方が難しい?わからず難儀しております。 ExcelのVBAで配列の処理を考えているのですが、以下のPHPと同じ動作をするVBAを書きたいのですが、どうすればよいのでしょうか? <?php // 配列を使って、$aを北海道、青森とする。$bは、単なる受け皿です。 // これをエクセルVBAではどのように記述するのでしょうか? $a = array(); $b = array(); array_push($a, "青森"); array_push($a, "青森"); array_push($b, array_pop($a)); array_unshift($a, "北海道"); array_unshift($a, "北海道"); array_push($b, array_shift($a)); var_dump($a); var_dump($b); exit; ?> また、PHPにはvar_dumpという便利なものがありますが、VBAでは VBEのローカルやウォッチ式で見るというのが普通でしょうか? イミディエイトにvar_dumpのように変数の内容を表示させるコマンドはあるのでしょうか?

  • 配列の添削願

    $dataという変数から配列を取り出すとき もしも中身が空なら0を代入したいです。 $a = $data[$i]; //$data内の$iのデータを取り出す if($a==""){ $a=0; }//$iが空もしくは存在しない場合0を追加 echo $a; こちらの文章で$aの中には文字列もしくは 存在しないかデータが空の際は0が表示されるでしょうか? 今、配列の中身が空や\nのとき0を入れたいがうまくいかず困っています。

    • ベストアンサー
    • PHP
  • 新しい書き込みができない、編集は可能。

    たびたび失礼します。 編集機能のついた掲示板を作成中です。 編集機能はつけられたのですが、今度は新しい書き込みができなくなりました。 新しい書き込みをすると、新しいデータが保存されずデータが逆に保存されたり、消えたりします。 ソース↓ open(KEIJI, "keijiban.dat") || die "File 'keijiban.dat' Open Error."; # 過去のデータを全て配列に読み込む @all = <KEIJI>; # HTMLタグと衝突する記号などを変換 $num = $all[0] + 1 if( $num eq '' ); $title = &henkan($form{'title'}); $topic = $form{'topic'}; $message = $form{'message'}; foreach(@all){ $data = $_;     $count = 0; ( $fnum ) = ( split(/:/,$data) )[0]; if ( $fnum == $num ) { $data = "$num:$time:$title:$topic:$message\r\n"; &jcode'convert(*data, 'sjis'); $count++; } if( $count == 0 ){ unshift @all_data, $data; } else { push @all_data, $data; } } ################################################ $countで新しいデータか編集かを分岐させたつもりなのですが、ここの処理が上手くいっていないようです。 怪しいのは、 unshift、$dataにちゃんとデータが入っているか、というところが怪しいように感じました。 もしヒントがあれば教えてください。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • JavaScript配列の先入れ先出しIEのバグ?

    参考資料はO'REILLY初めてのJavaScript(第2版)です。 function pushPop() { //Fifo待ち行列を作成し、pushを使ってアイテムの追加 var fifoArray = new Array(); fifoArray.push("林檎"); fifoArray.push("バナナ"); var ln = fifoArray.push("桜桃"); //長さと配列を表示 document.writeln("長さは" + ln + "で、行列の順番は" + fifoArray + "です。<br />"); document.writeln("<p>"); //shiftを使って配列からアイテムを外す for (var i = 0; i < ln; i++) { document.writeln(fifoArray.shift() + "を取り出します。今の順番は[" + fifoArray + "]です。<br />"); } //長さを表示 document.writeln("長さは" + fifoArray.length + "となりました<br /><br />"); //次に、popとunshiftも同様に行う var fifoNewArray = new Array(); fifoNewArray.unshift("初めての"); fifoNewArray.unshift("Java"); ln = fifoNewArray.unshift("Script"); document.writeln("長さは" + ln + "で配列は[" + fifoNewArray + "]となりました。<br />"); //pop for (i = 0; i < ln; i++) { document.writeln("「" + fifoNewArray.pop() + "」を取り出します。配列は[ " + fifoNewArray + "]となりました。<br />"); } document.writeln("長さは" + fifoNewArray.length + "となりました。"); document.writeln("</p>"); } Google Chromeでは以下のように書籍通りになりました。 /*---------Google Chrome実行結果---------*/ 長さは3で、行列の順番は林檎,バナナ,桜桃です。 林檎を取り出します。今の順番は[バナナ,桜桃]です。 バナナを取り出します。今の順番は[桜桃]です。 桜桃を取り出します。今の順番は[]です。 長さは0となりました 長さは3で配列は[Script,Java,初めての]となりました。 「初めての」を取り出します。配列は[ Script,Java]となりました。 「Java」を取り出します。配列は[ Script]となりました。 「Script」を取り出します。配列は[ ]となりました。 長さは0となりました。 /*---------Google Chrome実行結果(END)---------*/ IEに関しては、以下のように配列の長さは未定義になり pop(メソッド)を使って配列の最後の要素を削除したいのですができません 長くなりましたが回答の方、宜しくお願いします!!! /*---------IE実行結果---------*/ 長さは3で、行列の順番は林檎,バナナ,桜桃です。 林檎を取り出します。今の順番は[バナナ,桜桃]です。 バナナを取り出します。今の順番は[桜桃]です。 桜桃を取り出します。今の順番は[]です。 長さは0となりました 長さはundefinedで配列は[Script,Java,初めての]となりました。 長さは3となりました。 /*---------IE実行結果(END)---------*/

  • ファイルから読み込んで配列へ

    PerlでCGIスクリプト(掲示板もどき)を作成しています。 配列の操作がうまくいかず、ご教授頂きたいと思います。 <やりたい事> 1.ブラウザ上のフォームからの入力を、カンマ区切りでテキストファイルに追記して保存。 2.そのテキストの一部を使ってHTMLで表を作る。 <実際の作業> 1.フォームからのデータはcgi-lib.plで連想配列として受け取り、unshiftでテキストファイルへ追記する。 &ReadParse; #フォームからデータを受け取る $o=$in{'name'}; $p=$in{'mail'}; $q=$in{'title'}; $r=$in{'comment'}; open(IN,"xxx.txt"); @tmp1=<IN>; close(IN); #1件1行として新規データを追加する unshift (@tmp1,"$oo" , "," , "$pp" , "," , "$qq" , "," , "$rr","\n"); open(OUT,">xxx.txt"); print OUT @tmp1; close(OUT); 2.xxx.txtのデータを読み込んで、1列目(name)と3列目(title)だけを使った表を作る。 データを読み込む時点でつまづき、先に進めません。 <テキストファイルの例> 1行目:a,b,c,d 2行目:e,f,g,h 3行目:i,j,k,l 以下同様 <症状> print @tmp1;とすると、a~lの全てのデータが表示される。 $tmp1[0];とすると、(a)のみ表示される。 $tmp1[1];とすると、カンマ(,)が表示される。 $tmp1[2];とすると、(b)が表示される。 <質問> 一つの行(配列)に対して2回繰り返す処理(nameとtitle)と、行単位で繰り返す処理(1行目、2行目…)を合わせればいいのだろうと思っていますが、どうすればいいのかわかりません。 気分的には↓こんな感じです。 foreach { "行の処理" foreach { "列の処理" } } そもそも、区切り文字であるカンマが、配列に格納されている時点で失敗しているのかな?とも思っています。 宜しくお願いします。 なお、不足している情報がありましたら補足いたします。

    • ベストアンサー
    • Perl
  • 無名配列からハッシュを作りたいのですが・・・

    $VAR1 = [ 'No', 'a', 'i', 'u', 'e', 'o', ]; #VAR1と同じ数の<>区切りの下記のようなデータを読み込み配列に代入 --List----------------------- 1<>あ<>い<>う<>え<>お<> ------------------------- foreach(0..$#List){ @Array=split(/<>/,$List[$_]); } 最終的なイメージは print "$a{No}"; >1 print "$a{a}"; >a となるよう、上記VAR1の無名配列の値をキーに、読み込んだ<>区切りのデータを関連付けて表示させるようにしたいのです。 foreach my$var(@$VAR1){ ...ここをどうすれば配列の値をハッシュのキーとして作成出来るのか頭を悩ませてます。 } 先輩方のお知恵をお借りできませんでしょうか。 宜しくお願いします。

    • ベストアンサー
    • Perl

専門家に質問してみよう