Console.ReadLine()で、入力デフォルト値を指定できますか?

このQ&Aのポイント
  • C#でプログラムをつくっています。Console.ReadLine()を使えば、コマンドプロンプト上からのキー入力を文字列として受け取れますが、最初は空の状態です。デフォルト値を指定することで、ユーザーがただEnterキーを押したときに、デフォルト値を返すことができますか?
  • また、指定したデフォルト値を画面上に表示し、ユーザーが編集できるような方法はありますか?
  • C#プログラムでConsole.ReadLine()を使用して、デフォルト値を指定および表示および編集可能にする方法について教えてください。
回答を見る
  • ベストアンサー

Console.ReadLine()で、入力デフォルト値を指定できます

Console.ReadLine()で、入力デフォルト値を指定できますか? C#でプログラムをつくっています。 Console.ReadLine()を使えば、コマンドプロンプト上からのキー入力を文字列として受け取れますが、最初は空の状態です。 例えば、 string s = Console.ReadLine() を実行し、Enterキーを押すと、sは何も入力されませんが、デフォルト値を指定することで、ユーザーがただEnterキーを押したときに、デフォルト値を返すような方法はありますか? また、指定したデフォルト値を画面上に表示し、ユーザーが編集できるような方法はありますでしょうか? どうぞよろしくお願いします。

noname#136120
noname#136120

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

  • ベストアンサー
  • tyatsumi
  • ベストアンサー率58% (30/51)
回答No.5

何だかよさそうなもの見付けましたよ。 説明(英語): http://tirania.org/blog/archive/2008/Aug-26.html ライブラリ(これを取り込む): http://anonsvn.mono-project.com/source/trunk/mcs/tools/csharp/getline.cs LineEditorのEdit()メソッドは第1引数がプロンプトで第2引数が初期値のようです。 C#の基本ライブラリのみに依存し、外部プログラムは必要ないそうです。 ライセンスも制限が緩いもののようです。

noname#136120
質問者

お礼

回答ありがとうございます。 早速試してみたいと思います。

その他の回答 (4)

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

#3です。 >abcdeと表示したあと、キー入力待ちとなって、そのabcdeを編集できないか?ということなんです。 >もちろん、Console.ReadLine()がそのような引数を取らないのは分かっていますので、何か別のメソッドがあればと思ったのですが、、 なるほど、そういうことですか。 コンソールアプリケーションの場合、上記を簡単に実現するメソッドは無いようです。カーソル位置を制御するメソッドがあるので、デフォルトの値を出力後、そのデフォルト値の先頭にカーソルを位置づけてReadLineを行えば、できるかも知れませんが、やったことはないので、判りません。もし、出来たとしても、コンソール上のカーソル位置の制御を全て自前で行いますので、相当大変かと思います。 GUIが使用できるなら、テキストボックスにデフォルト値を表示させて、それをユーザーに編集してもらい、取り込むのが、簡単かと思います。

参考URL:
http://msdn.microsoft.com/ja-jp/library/system.console.setcursorposition(VS.80).aspx
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.3

>本当は、デフォルト値を編集する方法がメインで聞きたいことなんです。 ユーザーにデフォルト値を編集してもらえるようにするなら、自分でそのような仕組みを実装する必要があります。 1例としては、以下のような方法があります。 このデフォルト値を定義したファイルを「デフォルト定義ファイル」と呼ぶことにします。 デフォルト定義ファイルは、CSV形式(タブ区切り、又はカンマ区切り)とします。 デフォルトの項目名,デフォルト値 をそのファイルに定義します。例として、以下のようになります。 name1,defaultdata1 name2,defaultdata2 name3,defaultdata3 ここでデフォルトの項目名(name1,2,3)は、プログラムの内部で抱える名称になるので、 ユーザは、編集しないものとします。(編集は出来るが、紳士協定でしないことにする) 編集できるのは、defaultdata1,2,3のみとします。 このファイルを予め、決められた場所においておき、そのファイルを起動時に読み込んで、 defaultdata1,2,3をプログラムで使用するようにします。 もし、上記の作業が大変なら、動的プロパティを使う方法がありますが、 一般ユーザーが、このデフォルト値を編集すると言うよりは、システムの管理者が、このデフォルトを 編集するのに近い形になります。その分リスクが高くなりますが、それでも良いと割り切れるなら、 動的プロパティをつかうのも、一つの案です。 動的プロパティについては、参考URLを参照下さい。

参考URL:
http://uchukamen.com/Programming1/DynamicProperty/
noname#136120
質問者

補足

回答ありがとうございます。 私がやりたかったことは、Console.ReadLine()を例にすると、 string s = Console.ReadLine("abcde"); とすると、abcdeと表示したあと、キー入力待ちとなって、そのabcdeを編集できないか?ということなんです。 もちろん、Console.ReadLine()がそのような引数を取らないのは分かっていますので、何か別のメソッドがあればと思ったのですが、、

回答No.2

できません いきなりEnterは、 ""という文字列が入力された ということで、 何も入力しなかったという意味ではありません

  • tyatsumi
  • ベストアンサー率58% (30/51)
回答No.1

ReadLine()を呼んだ後、sの中身が空だったら、sにデフォルト値を代入すればよいと思います。 デフォルト値を編集できるようにする方法は私はわかりませんが、たぶん難しいと思います。 私はC#はHello Worldしか書いたことがないので、あとは他の人にゆずります。

noname#136120
質問者

補足

回答ありがとうございます。 自分の質問を読み返してみると、質問の仕方が悪かったです。 本当は、デフォルト値を編集する方法がメインで聞きたいことなんです。

関連するQ&A

  • Console.ReadLineが有効にならない

    VB2008で下記の記述を入れてみました。 Sub test() Dim inStr As String Dim inNum As Double ' キーボードから入力 Console.WriteLine("実数を入力") inStr = Console.ReadLine() ' 文字列を実数に変換 If (Not inStr = "") Then inNum = Double.Parse(inStr) inNum = inNum / 2 ' 結果を表示 Console.WriteLine("結果:" & inNum) End Sub この場合, 上記Console.RealLine()で キーボードから入力ができるとの解説が、 いろりろ出ていますが、小生のプログラムでは、入力できず、上記"結果"を表示して、 終了してしまい困っています。  VB2008のオプションで環境などを調べたのですが、よくわかりません。 どなたか、ご存じの方がいらしゃれば、ご指導をお願いいたします。  当方の環境    OS Vistaです。 OS Xpで行っても同じでした。  VB2008は、Visual Studio 2008 です。上記OSには、同じ環境で行っています。

  • 文字入力がある限り!

    文字入力がされる間中その入力を受け付け 文字の入力がなくなったら今まで入力されていた文字列を まとめて出力させたいのですがどのような処理方法が有効的でしょうか? (例)(1)文字を入力してください。→aaa  ※ココでEnterキー押下   (2)文字を入力してください。→bbb  ※ココでEnterキー押下   (3)文字を入力してください。→ccc  ※ココでEnterキー押下   (4)文字を入力してください。→    ※入力せずEnterキー押下   (5)aaa→  今までの文字列がまとめて出力される   bbb   ccc 今はVectorクラスに入力された文字列を格納し 入力がストップした時点でVectorの要素を表示させようとしています。 ですが入力の終了を指定することができていません。 BufferedReader r = new BufferedReader(new InputStreamReader(System.in)); Vector v = new Vector(); System.out.println("文字を入力してください"); String s = r.readLine(); while(s != ""){  v.add(s);  System.out.println("文字を入力してください");  s = r.readLine(); } if(s == ""){  for(int i = 0; i < v.size(); i++){  System.out.println(v.get(i)); } どのようにしたら入力の終了を認識させることができますか? どなたかご協力お願いします!!

  • コマンドプロンプトで{ENTRE]キーの入力を求められる箇所で、自動で{ENTER}を入力されるようにしたい。

    お世話になります。 コマンドプロンプトである行で、{ENTRE]キーの入力を求められる箇所がありまして、キーボードから[ENTER]ボタンを押さないと次にすすまないのです。 そのコマンドプロンプトを編集して、自動で{ENTER}を入力されるようにしたいのです。 お手数ですがなにとぞよろしくお願いします。

  • 【Cisco】Consoleパスワードについて

    お世話になります。 以前、CiscoのConsoleパスワードを扱った際に、パスワードを2回打つというCiscoルータに会いました。 例) abc (enter) edf (enter) ※これでログイン可能 今まで、Consoleパスワードについては、1回の設定しかできないと思っていましたが、2回という複数設定をする為には、どのようなコマンドを入力すれば良いのでしょうか?ご存知の方、ぜひ、ご教授下さい!

  • Windowsのバッチファイルで文字入力したい

    Windowsのバッチファイル(コマンドプロンプト)を使い、今起動中のアプリケーション上で、バッチで指定した文字列を入力する…ということは可能でしょうか? キーボードで入力する代替手段としてバッチで入力したいです。 もしあったら、そのコマンドを教えてください。 ちなみにやりたいこととしては、あるウェブサイト上で、Tabキーを数回送信して文字を入力できる場所までたどり着き、そこで指定した文字列を自動入力する…という内容です。

  • 変数のキーボード入力について

    何度も質問してすみません。javaについて質問できるのここしかないんで・・・。早速質問なのですが、変数のキーボードから入力する方法で import java.io.*; class Sample4 { public static void main(String args[]) throws IOException { System.out.println("文字列を入力してください"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); System.out.println(str + "が入力されました"); } } とメモ帳に保存して、コンパイルしたら【文字列を入力してください】(【】は実際には入力してません)とちゃんと出てくるのに次の行にキーボードから入力すると日本語入力が出来なくなります。コマンドプロンプトには日本語入力できないのですか?教えてください。

    • ベストアンサー
    • Java
  • readLine()の動作(改行と終端)

    readLine()についてですが。 readLine()が終端時にnullを返すということは、 一行の文字列や、最終行はそのままでは 文字列を読み込めない、と理解していいのでしょうか (書き出すほうで、printlnや改行\nなどを付け足す必要あり)。 また、チャットなどで、サーバーが発言を待つ場合、 while(true){ string=buf.readLine(); mychat.sendall(string); } としますが、 これだと、行の終わりと、発言の終わりが、 区別できなくなってしまいます。 できたら、発言の終わり(終端)を待って、文字列 を作成し、行単位でなく、発言単位で、送信した いのですが。 (nullになるまでループさせ、その間、文字列を +で足して行き、nullを受けたら、送信する、 という方法もありそうですが、もっと簡単に できないでしょうか)。 お願いします。

    • ベストアンサー
    • Java
  • VBAでコマンドプロンプトーsendkesy

    いつもお世話になっています。今日はExcelVBAでコマンドプロンプトを起動した後、それにVBAから文字列を入力、認識させるやり方を教えて頂きたいのです。 コマンドプロンプトにて、日本語及び変数に入れた文字列を入れる方法を教えて頂きたいのです。 たとえばですが、 Dim outstrin as string sendkeys "辞典",true sendkeys outstring,true どちらも日本語が入っています。単にキーボードからのキーを入力させるのではなくて、文字列を認識させたいと思っています。 変数などで入力すると、コマンドプロンプトの上では表示されるのですが、なぜか「エンターキー」を認識せずに、困っています。 エンターを入れると、コマンドプロンプト閉じたりするときもあります。 もしかして、この文字列入力のやり方に問題があるのでは?と思っています。 それ以外にも原因があるかもしれません。もしかしたら、ただのアルファベットや数値を入力するといった単純なことからできていないかもしれません。たまに認識しませんもので・・・。一応本の通りしていますが・・・初めての経験なのでとても苦労しています。本もあまり「sendkeys」については詳しく載っていなくて、もっぱらVBAのヘルプを見ているだけです。 「sendkeys」を使うに当たっての注意点なども教えてくださると幸いです。 書店で本を見たり、ネットで調べたりもしたのですが・・・なかなか丁度いいのを知ることはできませんでした。 ご存じのお方、どうかお助けください。

  • キー入力について

    コマンドプロンプト上で、スラッシュの逆(\)を入力したいのですが、キー入力の方法が分かりません。教えて下さい。

  • デフォルトの設定

    javaの基礎的なプログラミングでデフォルトの設定はどのように行えばよいのでしょうか? たとえばユーザーにインプットファイル名を指定させるプログラムでエンターを押したらデフォルト名を使用しユーザーが何かしらのファイル名をインプットしたらそちらを使用。 またアウトプットファイルの選択でもユーザーがインップとでエンターを押した時はデフォルトのファイル名を使用、ユーザーがインプットファイル名を選択した場合そのファイル名をデフォルトのファイル名として表示、エンターを押すことでそれらのデフォルトファイルを選択という形にしたいのですがコードブロックを教えていただけないでしょうか?

専門家に質問してみよう