• ベストアンサー

配列に入った文字列を結合したいのですが

str = array1[m] + array2[n] というように結合したいのですがエラーになります。 どうすればいいのでしょうか?

  • Ruby
  • 回答数2
  • ありがとう数1

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

エラーの理由はちゃんとメッセージに書いてありますよ。 can't convert nil into String nilをString(文字列)に変換できない よって、どちらかがnilということで ・array1[m]が文字列ではない ・array2[n]が文字列ではない に該当します。具体的には ・termがnil ・dic_trans_noun[n]がnil のどちらか、あるいは両方です。 さらに、 a+b は a.+(b)であること、nilには+メソッドが定義されていないことから、「nil+文字列」ではNoMethodErrorになります。 TypeErrorにはなっている、ということは、「文字列+nil」なので ・dic_trans_noun[n]がnil が原因です。 dic_trans_noun[n]がnil、ということは次の2通りが考えられます ・実際にdic_trans_nounのn要素にnilが代入されている ・nがdic_trans_nounの範囲外になっている dic_trans_nounについての記述がここには無いので、どちらの理由かは不明です。 対処法ですが ・nilの場合は別の処理をする ・nilにならないようにdic_trans_noun、またはnを調整する となります。どちらがこのプログラムに求められる仕様なのかは、現在の情報だけでは。私には判断できません。

kihonkana
質問者

お礼

ありがとうございます。 nilのときは別の処理をするようにしました。 型変換みたいなものが必要かと思っていたのですが、 一部の要素だけが問題だったんですね。

その他の回答 (1)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

具体的なエラーメッセージは何でしょう? 通常なら、それで問題なく文字列の結合ができます。 ・array1が配列ではない ・array2が配列ではない ・mがarray1の範囲外 ・nがarray2の範囲外 ・array1[m]が文字列ではない ・array2[n]が文字列ではない あたりが予想できますが、エラーメッセージを読まなければ、どれに該当するか(または、別の要因なのか)、わかりません。

kihonkana
質問者

補足

回答ありがとうございます。 次のようなプログラムになっています。 1 ### 2 out_find_term = Array.new 3 4 sentence_array.each{|sentence| 5 out_find_term.push "" 6 out_find_term.push "###" + sentence 7 8 n = 0 9 dic_term_noun.each{|term| 10 if /\b#{term}/ =~ sentence then 11 out_find_term.push term #辞書にあれば配列に入れる 12 out_find_term.push dic_trans_noun[n] 13 out_find_term.push "\n" 14 15 end 16 n = n + 1 17 } 18 この11行と12行を a = term + dic_trans_noun[n] out_find_term.push a に変えたのですが うまくいきません。 (out_find_termを出力したときに、1行になるように結合させたいのです) エラーメッセージは「in `+': can't convert nil into String (TypeError)」です。 out_find_term.push(term + dic_trans_noun[n])に変えても同じです。 (補足、遅くなってすみません)

関連するQ&A

  • 文字列の結合について

    こんにちわ。文字列の結合について質問があります。 下記のコードに問題はありますか? $strは "1|2|3|4|5|" となるはずなのですが、 "5|" となってしまいます。 コードの記述方法に問題があるかご指摘いただければ幸いです。 よろしくお願いいたします。 *****コード $x=5; $str=""; for($i=0; $i<$x; $i++) { $str = $str . $i+1 . "|"; }

    • 締切済み
    • PHP
  • 配列の結合

    変数1 Array ( [A] => あいうえお ) 変数2 Array ( [B] => わおん ) というような二つの変数の配列を Array (   [A] => あいうえお   [B] => わおん ) というように、ひとつの変数内に結合する方法はないでしょうか?

    • ベストアンサー
    • PHP
  • 配列に格納した文字列の置換

    Perlで、配列@arrayの要素それぞれを文字列$strから見つけてタグで囲みたいと思っています。 $str = 'abc+fghoge(ij'; @array = ('+', '(', '?', '//', 'hoge'); $pattern = '\Q' . join '\E|\Q', @array . '\E'; $str =~ s/($pattern)/<TAG>$1<\/TAG>/g; @arrayの要素には、メタキャラクタが含まれる可能性があるため、\Qと\Eで挟む必要があるかと思うのですが、上のようにしてもうまくいきません。下だとうまく置換されるので、\Qや\Eの使い方は間違っていないと思うのですが、どなたかアドバイスいただけないでしょうか。 $str =~ s/(\Q+\E|\Q(\E|\Q?\E|\Q//\E|\Qhoge\E)/<TAG>$1<\/TAG>/g; よろしくお願いします。

    • ベストアンサー
    • Perl
  • 配列の結合

    2つ配列を普通に結合する関数はありませんか? C言語のstrcatみたいな関数を探しています。 array_merge()以外の関数を教えて下さい。

    • 締切済み
    • PHP
  • 文字列がうまく取り出せない

    文字列がうまく取り出せないので教えて頂きたいのですが $str1 = "[2007年](10月)東京"; $str2 = "[2007年](10月)神奈川 (横浜)"; 上記2通りのデータがあり $str1の場合は、 Array ( [0] => 2007 [1] => 10月 [2] => 東京 ) $str2の場合は Array ( [0] => 2007 [1] => 10月 [2] => 神奈川 [3] => 横浜 ) と配列に格納したいのですが 思うようにできません・・ この場合どう記述すればよいのでしょうか??

    • ベストアンサー
    • PHP
  • 文字列と配列の振る舞いの違いについて

    以下のコードで出るalertが Array => 12 String => 2 となります。この原因といいますか原理をご存じでしたら教えていただけませんでしょうか。お願いします。 =========================================================== var test = function(name){ this.arr.push(name); this.str += name; } test.prototype = { arr:[], str:"" } var r = new test("1"); var z = new test("2"); alert("Array => " + z.arr.join("") + "\nString => " + z.str);

  • 【PHP】配列を連想配列に

    $m = array('a', 'b', 'c'); この配列 $m をもとに $n = array(  'a' => array(   'b' => array(    'c' => array()))); 上のような連想配列 $n をつくりたいのですが、 $n = array(  $m[0] => array(   $m[1] => array(    $m[2] => array()))); 要素の数が固定のときは、これでもいいのですが、数が変動する場合に対応できません。 何か方法があれば教えてください。

    • ベストアンサー
    • PHP
  • 配列の要素の結合について

    下記の(変更前)から(変更後)のように配列の要素を結合し、 結合後の要素の数は減らしたいと思っています。 関数などを調べたですが、なかなか実現できない状況です。 ご教授いただければと思います。 よろしくお願いします。 (変更前) array(4) { [0]=>"郵便番号" [1]=>"東京都" [2]=>"大田区" [3]=>"氏名" (変更後) array(3) { [0]=>"郵便番号" [1]=>"東京都大田区" [2]=>"氏名"

    • ベストアンサー
    • PHP
  • 連想配列内の文字列を結合できませんか

    連想配列?の$col[""]内の文字列を結合することはできませんか. PHP4とMySQL 4.0の組み合わせでアンケートページを作ります. 質問1 が 1.phpに($pageid=1;) 質問2 が 2.phpに($pageid=2;) 質問3 が 3.phpに($pageid=3;) 質問4 が 4.phpに($pageid=4;) 質問5 が 5.phpに($pageid=5;) それぞれあります. これに対応して,回答を格納するDBも,CHAR(1)でAns1~Ans5まであります.ここで, $pageid=1; $rst = mysql_query($sql, $con); $col = mysql_fetch_array( $rst); ${"Answer" . $pageid} = $col["Ans" . $pageid]; echo $Answer1; みたいに,連想配列名を変数で指定するような強引技はできないのでしょうか? http://oshiete1.goo.ne.jp/qa2706401.html で同じような質問を 一旦は取り下げたのですが,やっぱり実現したいです.

    • ベストアンサー
    • PHP
  • 文字列になっている配列を‥

    以下の値がDBに文字列の項目に登録されています。 DB から値を取得したのはいいのですが文字列なので foreach でグルグルしようとすると怒られてしまいます。 配列の型に変換できればいいのですが(array)だとうまく行かないしどうすればいいかどなたかご教授願えないでしょうか。 よろしくお願いします。 ■値(文字列でDBに格納されてます‥) array( 1=>'a', 2=>'b', 3=>'c', 10=>array( 'A'=>1, 'B'=>'hoge1', ), 11=>array( 'A'=>2, 'B'=>'hoge2', ), 12=>array( 'A'=>3, 'B'=>'hoge3', ), )

    • 締切済み
    • PHP

専門家に質問してみよう