• ベストアンサー

Rubyで、外で定義した文字列をdefの中で使うには?

どなたかご教授下さい。 外部ファイルへ任意の文字列を書き込むプログラムをつくりたいのですがうまく行きません。具体的には ↓↓↓ filenameA = "kakikomi.txt" (中略) def final_file_out(*m) fw = open(filenameA, "a") fw.write(*m) fw.close end ↑↑↑ とやっているのですが、これだと undefined local variable or method `filenameA' for main と出てしまいます。文字列の使い方が悪いのは分かっているのですが どうしたらよいのか分かりません。どなたか分かる方助けて頂けないでしょうか。よろしくお願いします。

  • Ruby
  • 回答数3
  • ありがとう数9

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

  • ベストアンサー
noname#149362
noname#149362
回答No.1

中略の部分に何が書かれているのか不明なので何とも助言しにくいのですが、グローバル変数 (変数名の頭に「$」がついているもの) を使いたいということでしょうか?

参考URL:
http://www.namaraii.com/rubytips/?%CA%D1%BF%F4%A4%C8%A5%B9%A5%B3%A1%BC%A5%D7#l1
namuchi
質問者

お礼

そうです、まさにこういうことが知りたかったんです。ありがとうございます!

その他の回答 (2)

  • siffon9
  • ベストアンサー率64% (136/211)
回答No.3

一行目のfilenameAとdef final_file_out ~ endの中のfilenameAは別物です。 従ってfinal_file_outの引数としてfilenameAを渡してあげなければいけないと思います。 filenameA = "kakikomi.txt" (中略) def final_file_out(file, m) fw = open(file, "a") fw.write(m) fw.close end final_file_out(filenameA, "abcdefg")

namuchi
質問者

お礼

なるほど、こういう書き方もあるんですね。ありがとうございます。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

メソッドの引数に*をつけてるのも意味がわかりませんがそれはおいといて、 逆引きRuby - 変数とスコープ http://www.namaraii.com/rubytips/?%CA%D1%BF%F4%A4%C8%A5%B9%A5%B3%A1%BC%A5%D7 の「ローカル変数を定義する」のところを読んでください。 そういうことです。

namuchi
質問者

お礼

自分の理解があいまいでしたがこれで整理できました。ありがとうございます。

関連するQ&A

  • Perlでの文字列処理について

    プログラム初心者です。 Perlで下記のような文字列処理のプログラムの書き方がわからず、質問させて頂きました。 【内容】 FILE_A.txtが「!」マークで区切られていて、「!」マークの下行の文字列をIPアドレスの右横に移動したものをFILE_B.txtに出力するという処理です。 「!」マークの下行の文字列の「name」は共通です。 -------------------------------------------- 【FILE_A.txt】 ! name abcdeLV 123.123.123.123 123.123.123.124 123.123.123.125 ! name fghijLV 10.10.10.11 10.10.10.12 10.10.10.13 10.10.10.15 10.10.10.16 ! -------------------------------------------- ↓ -------------------------------------------- 【FILE_B.txt】 123.123.123.123 abcdeLV 123.123.123.124 abcdeLV 123.123.123.125 abcdeLV 10.10.10.11 fghijLV 10.10.10.12 fghijLV 10.10.10.13 10.10.10.15 fghijLV 10.10.10.16 fghijLV -------------------------------------------- 上記のようなPerlでの処理を具体的に教えて頂ければうれしいです。 本サイトのようなものを利用するのが初めてですので、不手際があるかもしれませんが なにとぞよろしくお願いいたします。

    • ベストアンサー
    • Perl
  • アスタリスクを文字列として変数に入れるには

    HP-UX cshで、アスタリスクを文字列として 変数に入れるにはどうしたら良いでしょうか? 現在は <file3の中身> grep -v file*.txt | grep -v file2.txt で、 set hensu=`cat file3.txt`としてecho $hensuすると grep -v file1.txt file2.txt file3.txt | grep -v file2.txt という具合に、アスタリスクがワイルドカードとして 働きます。これを「file*.txt」という文字列として 変数に入れる方法を教えてください。 宜しくお願いします。

  • mainから渡した文字列を関数内で書き換え

    非常に基礎的な質問で申し訳ないのですが mainから渡した文字列を関数内で書き換えることができません。 int型の整数やchar型一文字はできるのですが。。。 例えば以下のようなソースでmainのABCをDEFに書き換えたいとき どのようにすればいいのでしょうか。 (関数の戻り値で変更という方法以外で) 以下のソースでは値は書き換わりませんでした。 void func(char *str2) { str2 = "DEF"; } int main() { char str1[20] = "ABC" printf("%s", str1); //ABC func(str1); printf("%s", str1); //DEFになるようにしたい }

  • 文字列変換について

    質問させてください。 携帯のサイトで各種(Vodafone, au)携帯電話からBBSに感想を入力する画面を作成しました。 入力される文字列は文字、数字、絵文字があります。 入力されたデータはPostgreSQLのDBに格納しています。 その格納された文字列(絵文字含む)を各種携帯で 表示してみたところ、お互いの絵文字が問題に なったため、変換処理を追加しました。 ======================================== $msg = "********";(DBから取得した文字列(絵文字含む)) $emoji = file(emoji_file.txt); for($r=0;$r<count($emoji);$r++){ $string = chop($emoji[$r]); $emoji_data = split("===", $string); if(strstr($msg, $emoji_data[0])){ echo("HIT"); $msg = eregi_replace($emoji_data[0], $emoji_data[1], $msg); } } echo($msg); ====================================== emoji_file.txt $Fr===1 $G-===281 $G.===287 ====================================== 上記のプログラムで、 DBから取得した文字列内にemoji_file.txt にある絵文字データがあれば数値に変換したいと 考えていますが、"HIT"が表示されるにも かかわらず変換されずに表示されます。 これは、"$G."などVodafoneの絵文字が 普通の文字列と違うからでしょうか? 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • Perlの文字列置換について

    質問です。文字列の置換を行いたいのですが、まずはソースから・・・ use File::Basename; use File::Copy; use File::Find; use File::Path; my @filelist = (); $inputfile='C:\Users\test.txt'; $outputfile='C:\Users\test_new.txt'; open (IN, $inputfile) or die "$!"; open (OUT, ">$outputfile") or die "$!"; while(<IN>) { $str = $_; if ($str =~ /html:text/) { $str =~ s/html:text/s:textfield/g; $str =~ s/property/name/; $str =~ s/styleClass/cssClass/; elsif($str =~ /html:textarea/) { $str =~ s/html:textarea/s:textarea/g; $str =~ s/property/name/; $str =~ s/style/cssStyle/; $str =~ s/styleClass/cssClass/; } print OUT $str; } close (IN); close(OUT); sub wanted{ push(@filelist, $File::Find::dir."/$_") unless ($_ =~ /^\.$/); } Perlプログラムで下記のソースを一括置換します。 <html:text property="xxx" styleClass="yyy"> <html:textarea property="abc" styleClass="def" style="ghi"> 目標は以下のように置換したいです <s:textfield name="xxx" cssClass="yyy"> <s:textarea name="abc" cssClass="def" cssStyle="ghi"> しかし、上記のプログラムを実行すると <s:textfield name="xxx" cssClass="yyy"> <s:textfieldarea name="abc" cssClass="def" style="ghi"> となってしまいます。 どこをどう直せばよいのかわからないので誰か教えてください。 お願い致します!!

    • ベストアンサー
    • Perl
  • VBSで文字列の置換

    VBSまったくの初心者で、「そんなもんWebで調べろ」とお叱りを受けるのを承知でお聞きします。 C:¥置換¥あああ.txt のテキストファイル内にある文字列"ABC"を"DEF"に置換するVBSはどのように記述すればよいでしょうか?。 よろしくお願いいたします。

  • 連番の数字を含む文字列の作成

    プログラム結果を連番のファイル名がついたファイルに出力したいと考えています。 fopen(file_name,"-") ; でのファイル名file_nameを01.txt, 02.txtという風に変化させるのだと 思うのですが、連番の数字を含む文字列の作成方法がわかりません。 よろしくお願いします。

  • 文字列の抽出がうまくできません

    こんにちは。Perl初心者です。みなさんのお力をお借りしたく、初めて投稿させていただきました。よろしくお願いします。 現在、ファイルから特定した行を抽出し、その行に含まれる文字列を抽出しようとしているのですが、その文字列の抽出がうまくできません。 <文字列を含むファイル:xxx.txt> -------------------------- To 鈴木 太郎さん 1行目 : 01,りんご, 3 個, ナシ, 1個 14行目 02,キャベツ, 3 個, なす, 10本 15行目 : -------------------------- <スクリプトファイル:yyy.pl> -------------------------- open(DAT, "./xxx.txt") || die("can't open file : ($!)"); @file = <DAT>; close DAT; if ( $file[0] =~ /(\W+\s)(\W+)/ ) { print "$1\n"; } print "$file[13]\n"; print "$file[14]\n"; -------------------------- <結果> -------------------------- 鈴木 -------------------------- 抽出したい結果は「鈴木 太郎」なんですが、上記のような結果(「1byteのスペース」鈴木「2byteのスペース」)になってしまいます。xxx.txtの「To」と「鈴木」の間と、「鈴木」と「太郎」の間にはそれぞれ1byteのスペースがあります。どうやったら「鈴木 太郎」と抽出できるか教えてください。 スクリプトは「Copal2(ver2.77)」というツールを使って作りました。そのツールではエンコードは「自動判別」となっており実際何が使われているのか分かりません。 また他にも質問があります。 今抽出したい行を指定して出力させてますが、 「To」から始まる行 「01」といった2桁の数字から始まる行 というような抽出の仕方をしたいのですが可能でしょうか? 本当に初心で大変恐縮ではありますが、教えてください。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 文字列について

    textファイルをいくつかに分割して保存しようと思い、以下のプログラムを作りましたが、うまくいきません。 予定では "0000.txt", "0001.txt", ....と文字列を生成するはずです。 #include <stdio.h> #include <string.h> #define LENGTH 4 //番号の桁数 void filename(int n) {    char name[LENGTH +4 +1];    char text[5] = ".txt";    int i;    for(i = 0; i <= LENGTH; i++)       name[i] = '0';    i = LENGTH;    //自然数を文字列に変換    do{       name[i] = (char)(n%10 + 48);       i--;       n /= 10;    }while(n != 0 && i >= 0);    strcat(name, text);    printf("filename:%s", name); } int main(void) {    int i;    for(i = 0; i < 5; i++){       filename(i);       printf("\n");    }    return 0; } 実行結果は filename:00000@.txt filename:00001.txt filename:00002.txt filename:00003.txt filename:00004.txt このように、文字化けしています。 何が原因なのでしょうか。 よろしくお願いします。

  • ランダム(不規則)な文字列の置換えについて

    初めて投稿させていただきます。 文字列置換について、色々と調べたのですが全く解決しなかったのでこの場を借りてご質問させて頂きます。 早速ですが記述から記載させて頂きます。 $str = file_get_contents('http://example.com/'); $replaced = str_replace("index.php?ref=123abc", "index.php?ref=456def", $str); echo $replaced; このように一定の文字列に対しては置換ができたのですが、 index.php?ref=123abc の箇所が index.php?ref=123abc&PHPSESSID=qazwsxedcrfvtgbyhnujmikolpqazwsx のようにPHPSESSIDのセッションID(毎回変わるランダムな32桁の文字列)が付いてきた場合に index.php?ref=456def に置換える方法がわかりません。 &PHPSESSIDの文字列の先頭部分から右に43文字目※(&PHPSESSID=の所で11文字)+(IDの所で32文字)※までを index.php?ref=456def に置き換える方法や 初めからPHPSESSIDのセッションIDの部分を表示させない方法など ここ数週間色々考えてみましたがどうしてもわかりませんでした。 PHP初心者ですので、なるべくわかりやすく教えて頂けると幸いです。 よろしくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう