アカウントの登録について

解決済みの質問

アカウントの登録について

rubyでアカウントがない場合に新しくアカウントを作るプログラムを、ハッシュを使って作成しようと思っています。表示としては登録ができたら「アカウントを作成しました。」と、アカウントがすでにある場合には「アカウントはすでにあります。別なアカウント名を使ってください。」と表示させたいと思っています。ハッシュに登録まではできるのですが、そこからどう作成したらいいのかわからないので教えてほしいです!初心者で申し訳ないですがよろしくお願いします。

$KCODE = "e"
hash_account = {}
fo = open("accountData.txt", "r")

i = 0
while(line = fo.gets)
ary = line.split
hash_account[ary[0]] = ary[1]
i = i + 1
end
fo.close

ちなみに、accountData.txtにはアカウント名,パスワードの順に登録があります。
rubyのバージョンはruby 1.8.7 (2010-01-10 patchlevel 249) [i386-mswin32]です。

投稿日時 - 2011-12-14 15:38:35

QNo.7189474

すぐに回答ほしいです

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

以下の行を追加してください。
----------------------------------------------
print "*** ログインしてください。自分のアカウント名とパスワードを入力してください。 ***\n"
print "アカウント:"
account = gets.chop
print "パスワード:"
password = gets.chop


if hash_account.has_key? account
print "アカウントはすでにあります。別なアカウント名を使ってください。\n"
else
#そのアカウントとパスワードをファイルへ追加する
fo = open("accountData.txt", "a")
fo.printf("%s %s\n",account,password)
fo.close
print "アカウントを作成しました。\n"
end
---------------------------------------------------------

>rubyのバージョンはruby 1.8.7 (2010-01-10 patchlevel 249) [i386-mswin32]です。
これを見る限り、windowsのrubyのように見えます。
もし、windowsで実行しているなら
$KCODE = "s"
としてください。
そのほうが、漢字のアカウント名も登録できると思います。
こちらでの動作確認は、
ruby 1.8.5 (2006-08-25) [x86_64-linux]で行なっています。
(windowsのrubyのバージョンがruby 1.9.2p180 (2011-02-18) [i386-mingw32]のため)

投稿日時 - 2011-12-15 21:36:24

お礼

いつも、お答えいただいてありがとうございます。
動作確認の方なんですが、ruby 1.8.7 (2010-01-10 patchlevel 249) [i686-linux]こちらのほうでした。

間違えてしまって、すみません。

投稿日時 - 2011-12-16 10:55:27

ANo.3

0人が「このQ&Aが役に立った」と投票しています

[  前へ  |  次へ ]

ベストアンサー以外の回答(2件中 1~2件目)

ANo.2

NAo.1の修正です。
open("accountData.yaml", "w"){|fo| fo.puts hash_account}
だとエラーがでるだけですね。
正しくは
open("accountData.yaml", "w"){|fo| fo.puts hash_account.to_yaml}
です。

投稿日時 - 2011-12-14 18:24:20

ANo.1

runa3829さん、こんばんは
ずっと見ていますが、ずいぶん進歩してきましたね。

新しいアカウントの情報をaccountData.txtに書き加えないと保存されません。
新しいアカウントだけを書くのでしたら、
open("accountData.txt", "a"){|fo|
puts ????}
のような感じで書き込むと、ファイルの最後に加えてくれます。
また古いものも含めて全部を書き換えるのでしたら
open("accountData.txt", "w")
で、putsで値をひとつずつ全部書いてきます。

ここでちょっとアドバイスですが、YAMLを使うといろいろなデータを1発で保存や読み込みができます。
例えばhash_accountに全部のアカウントが書き込まれていとすると
require "yaml"
open("accountData.yaml", "w"){|fo| fo.puts hash_account}
でhash_accountの内容全部をそのまま書き込んでくれます。
読み込む時には
require "yaml"
hash_account=YAML.load_file("accountData.yaml")
で保存した状態そのままで読み込めます。
accountData.yamlをテキストエディタで開けば分かると思いますが、テキストで保存されていますので、修正も簡単にできます。
ご参考に。

投稿日時 - 2011-12-14 18:11:18

お礼

yamlというコマンドがあるのは初耳でした! 使ってみたいと思います!

投稿日時 - 2011-12-16 10:55:30

あわせてチェックしたい
  • Map<String, String> Hash = new Hash ...
  • 二次元ハッシュ ...
  • ハッシュ関数 ...
PR

OKWaveのオススメ

教えて弁護士さん!

お金の悩みQ&A特集はこちら