10秒目をつむったら…

私はRuby初心者になります。
今、私は文字列(文)から文字列(単語)を検索させるプログラムを組みたいのですが、1つ分からない点が出てきたので質問させていただきました。


内容なのですがとりあえず以下のようなプログラムを本などで調べ組上げました。
***********************************************************
open("docu.txt"){|io|
 puts io.read
 io.pos = 0
 File.readlines("word.txt").each{|line|
  puts line
  line.chomp!
  p io.read.index(line)
 }
}
***********************************************************
【docu.txtの内容】
aiueokakikukekosasisuseso

【word.txtの内容】
keko
***********************************************************
結果:
aiueokakikukekosasisuseso
keko
11

これならちゃんと動いてくれました。


ただ、これらのテキストの内容を以下のような日本語にするとうまくいきません。
***********************************************************
【docu.txtの内容】
あいうえおかきくけこさしすせそ

【word.txtの内容】
けこ
***********************************************************
結果:
あいうえおかきくけこさしすせそ
けこ
nil


やはり英数字でないと、うまくいかないようです。

こういった「ひらがな」や「漢字」でも検索してくれるようにするには、どういった作業が必要になるのでしょうか?

よろしくお願いします。

A 回答 (2件)

文字コードがおかしいのかと思いましたけど、nil になるのが不審。



OSの種類とRubyのバージョンはなんですか?
ruby -v でバージョンがわかります。

1.8.x の場合は、p $KCODE というスクリプトを実行した結果はどうなりますか?
1.9.x の場合は、p Encoding.default_external というスクリプトを実行した結果はどうなりますか?

docu.txt と word.txt のデータの文字コードはなんですか?

問題点とは関係ありませんが、こういうほうがいいですね。

open("docu.txt"){|io|
 str = io.read
 puts str
 File.readlines("word.txt").each{|word|
  puts word
  word.chomp!
  p str.index(word)
 }
}
    • good
    • 0
この回答へのお礼

OSはLinuxでRubyのバージョンは1.8です。

色々試した結果、やはりdocu.txtとword.txtの文字コードが違ったみたいです。
ちゃんと合わせてやると動いてくれました。

ふむふむ
そんな書き方ができるんですね!
勉強になりました^^

ご丁寧な回答感謝いたします。

お礼日時:2009/11/13 22:26

質問者さんが書かれたコードをそのままコピペして実行すると、


Ruby 1.8.6、Ruby 1.8.7ともに

あいうえおかきくけこさしすせそ
けこ
16

という意図通りの結果が出ました。
Ruby 1.9.1で実行すると、

あいうえおかきくけこさしすせそ
けこ
8

という結果になりました。
OSは、Windows XP SP2です。
    • good
    • 0
この回答へのお礼

ご回答いただき感謝いたします。

私Linuxを使ってるのですが、やはり文字コードがおかしかったようです。

お礼日時:2009/11/13 22:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!