アカウント登録についてのプログラム作成方法

このQ&Aのポイント
  • Rubyでアカウントがない場合に新しくアカウントを作るプログラムを作成したいです。登録ができた場合と既にアカウントがある場合で表示を変えたいです。
  • アカウントの登録についてわからないことがあります。Rubyを使ってアカウントがない場合に新しく作成するプログラムを作成したいです。
  • Rubyでアカウント登録についてのプログラムを作成したいです。登録ができた場合と既にアカウントがある場合で表示を変えたいです。
回答を見る
  • ベストアンサー

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

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]です。

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

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

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.3

以下の行を追加してください。 ---------------------------------------------- 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]のため)

runa3829
質問者

お礼

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

その他の回答 (2)

  • ki073
  • ベストアンサー率77% (491/634)
回答No.2

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

  • ki073
  • ベストアンサー率77% (491/634)
回答No.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をテキストエディタで開けば分かると思いますが、テキストで保存されていますので、修正も簡単にできます。 ご参考に。

runa3829
質問者

お礼

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

関連するQ&A

  • アカウントプログラムについて

    rubyでアカウントとパスワードを検証するプログラムを、ハッシュを使って作成しようと思っています。 そこで、if文を使って条件をわけようとしているのですが、うまくいきません。 自分なりに書いてはみたのですが間違っているようで、どこをどう直したらよいか教えていただきたいです! $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 print "*** ログインしてください。自分のアカウント名とパスワードを入力してください。 ***\n" print "アカウント:" account = gets.chop print "パスワード:" password = gets.chop if (hash_account[account] == password) print "ようこそ、", account,"さん。それではゲームを始めましょう。\n" elsif print "パスワードが間違っているようです。\n" else print account,"というアカウントはありません。\n" end ちなみに、accountData.txtには、アカウント名、パスワードの順に入っています。

    • ベストアンサー
    • Ruby
  • cgiのプログラム

    前自分が質問したアカウントの管理についてなんですが、今度はそれをcgiプログラムに書き換えたいと思っています。そこで、ログインのページはできたのですが、認証できたかどうかのページがうまくいきませんでした。そこでなんですが、どう書き換えたらよいのでしょうか?? お願いします! ログインのページと認証のページのプログラムを両方書いておきます。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <title>ログインページ</title> </head> <body> ログインしてください。<br> 自分のアカウント名とパスワードを入力してください。<br> <form method="GET" action="http://verify.cgi"> アカウント名: <input type="text" name="an"> <br> パスワード:<input type="password" name="pw" size="15"> <input type="submit" value="ログイン"> </form> </body> </html> #!/usr/local/bin/ruby print "Content-type: text/html; charset=euc-jp\n\n" $KCODE = "e" require "CGI" cgi = CGI.new account = cgi["an"] password = cgi["pw"] 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 account = gets.chop password = gets.chop print <<EOS <HTML> <head> <meta http-equiv="content-type" content="text/html; charset=EUC-JP"> <title>アカウント認証</title> </head> <body bgcolor="skyblue"> EOS if (hash_account[account] == password) print "ようこそ、" #{account}"さん。それではゲームを始めましょう。" elsif hash_account.has_key? account print "パスワードが間違っているようです。" else print #{account}"というアカウントはありません。" end print <<EOS </body> </html> EOS 動作環境はruby 1.8.7 (2010-01-10 patchlevel 249) [i686-linux]になります。 よろしく、お願いします。

    • ベストアンサー
    • CGI
  • ツィッターのアカウントの登録間違え

    iモード携帯からツィッターのアカウントを登録したのですが、ユーザー名をひらがなで登録してしまいログインできなくなってしまいました。どうしたらいいでしょうか。何か方法を教えて下さい。

  • LINUXのcshについて、foreach構文の質問です。

    LINUXのcshについて、foreach構文の質問です。 foreach構文で、foreach i (20XX/*.txt)として、カレントディレクトリ上の20XXフォルダに、テキストファイルが数個はいっているとします。 このとき、テキストファイルすべてのはじめから2行をのぞいてそれ以降の部分からmd5sumでハッシュをとり、その横にファイル名をそれぞれつけたいのですが。。。 とりあえず、 foreach i (20XX/*.txt) cat $i | tail -n +2 | md5sum | sort >> 20XX_hash.txt でハッシュ値がとれることは分かったのですが、、、 コレにいかにしてファイル名を付属できますか? 何か良いアイディアありませんか? よろしくお願いします。 申し訳ないですが、明日までにお願いしますOTL

  • アカウントのプログラムについて

    rubyのプログラミングでアカウントに関するプログラムでアカウントがある場合は成功しました、パスワード違う場合はもう一度入力してください、アカウントがない場合はアカウントがありませんと表示をさせようと思っています。ちなみに、アカウントデータはテキストファイルの中に、名前、パスワードの順番に入っています。 そこで何ですが、def verifyAccount(account, password)という関数の中身をどう定義したら良いのでしょうか? あと、result = verifyAccount(account, password)以降に何を書いたら良いか教えてもらえたら嬉しいです。 聞きたいことが多くて申し訳ないですが是非ともよろしくお願いします! def verifyAccount(account, password) end print "*** ログインしてください。自分のアカウント名とパスワードを入力してください。 ***\n" print "アカウント:" account = gets.chop print "パスワード:" password = gets.chop result = verifyAccount(account, password) ...

    • ベストアンサー
    • Ruby
  • クラスをシリアライズする(ruby)

     質問はクラスのオブジェクトを、シリアライズしてファイルに保存するプログラムを作成したいのと、シリアライズしたデータベースのオブジェクトを、ファイルから読み込んで復元するプログラムを作成したいと思っています。 そこで、下記のプログラムを使って作りたいのですが、どのように作成したらいいか教えて欲しいです。 是非とも、よろしくお願いします。 class AddressFile def initialize(file) @original = file @meibo = {} fo = open("address_list.txt", "r") lines = fo.readlines fo.close for aLine in lines data = aLine.split @meibo[data[0]] = data[1] end end attr_accessor :meibo def search(name) @meibo[name] end def add(name,address) @meibo[name] = address end def update(name, address) @meibo[name] = address end end 動作環境はruby 1.8.7 (2010-01-10 patchlevel 249) [i686-linux]になります。 よろしく、お願いします

    • ベストアンサー
    • Ruby
  • シェルでファイルのハッシュを取得する方法

    シェル(.shのファイル)でフォルダに格納されている複数のファイルからファイル名、ハッシュをとって HASH.txtというファイルに以下のようなレイアウトで作りたいのです。  ファイル名,ハッシュ     ・     ・ MD5というコマンドをつかえばハッシュがとれることは わかったのですが、これをどのようにファイルに書き込んでいくのか 方法がわかりません。 当方、UNIXをつかうのも初めてでどうしたらよいのか全然わかりません。(依頼してきた人も長期休暇中で困ってます) どこかサンプルや、解説があるようなHPでも構わないので どなたか教えてください。

  • ハッシュ(単語数を数える) たのしいRuby

    たのしいRuby P252に掲載されていた、例題 「ハッシュ(単語数を数える)」の解説を読んでも 意味が分からなかったので教えてください。 ■例題word_count.rb 1:# 単語数のカウント 2: 3: count = Hash.new(0) 4: 5:## 単語の集計 6:while line = gets 7: words = line.split 8: words.each{|word| 9: count[word] += 1 10: } 11:end 12: 13:## 結果の出力 14:count.sort{|a,b| 15: a[1] <=> b[1] 16:}.each{|key, value| 17: print "#{key}: #{value}\n" 18} ■疑問1. 解説には、 # 3行目で出現回数を記録するハッシュcountを作ります。 # countは、キーが単語、値がその単語が出現した回数を表します。 と書かれているのですが、「キーが単語、値がその単語が出現した回数を表します」 の内容が理解できません。newしただけなのに、どうして、 キーと値の内容が決まるのでしょうか? ■疑問2. 解説には、 # 8行目からの繰り返しでは、それぞれの単語をキーにして、countから出現回数を取り出し、 # +1します。 と書かれているのですが、「count[word] += 1」 の内容が理解できません。 作成したハッシュcountと、getsメソッドで読み込み単語単位に分割した配列wordsとが、 どこで関連付けされているのかが、分かりません。 ■疑問3. 解説には、 # ruby word_count.rb README という形で、Rubyに同梱されているREADMEファイルの単語数を調べた 実行結果が掲載されているのですが、 そのときの具体的な処理の流れが分かりません。 「ruby word_count.rb README」と書くだけで、 処理の流れが、getsの所まできたとき、 自動的に指定ファイル名を判断し、 読み込みを始めるということなのでしょうか。

    • ベストアンサー
    • Ruby
  • app storeにアカウント登録できません

    i-phone4を購入し、アプリをダウンロードするためにアカウント登録をしようとしております。 新しくアカウントを作成する。を選択し、画面にしたがって、メールアドレスから、クレジット情報まで登録しました。 カード情報の登録が終わったところで、「登録されたアドレスにメールを送信したので、URLから確認を行ってください。」的なメッセージが現れたので、メールをまっています。 ・・・しかし、2時間以上経過した今も、メールがきません。 appstoreからアカウントを確認したところ、同様のメッセージが現れ、メールを再送信しても全くきません。(アドレスについては、何度も確認しました。) g-mailを利用しており、その他のメールはなんら問題なく届きます。 問合せ先もわからないですし、クレジット情報も入力して不安です。g-mailアカウントも長年利用しているもので、他のアカウントでの登録もしたくありません。 他のi-phoneユーザはすぐにメールが届いたというのですが、なにか対策方法などありませんでしょうか?

  • 同じマイクロソフトアカウントを追加登録してしまった

    1台のパソコンにユーザー名2つマイクロソフトアカウント登録していましてユーザーごとに違うマイクロソフトアカウントを作成するつもりが間違った操作で同じマイクロソフトのアカウントでユーザー登録してしまいました。ユーザー名が3つになってしまい同じマイクロソフトアカウントなので3つめのユーザー名を削除したら全てのユーザー名も削除されてしまいますか?恐くて3つめを削除できません。そのままにしておいた方がよろしいでしょうか。ご回答よろしくお願い致します。 ※OKWAVEより補足:「富士通FMV」についての質問です。

専門家に質問してみよう