2016-12-18 4 views
2

私は一度に1文字ずつ読み込み、スペースを入力すると実行する文字列コマンドに変換したいと考えています。 私はreadChar stdin

con <- file("stdin") 
open(con, blocking=TRUE) 
while(q!=" "){ 
    #q=scan("",what="", nmax=1) 
    q=readChar(con,1) 
    cmd[i]=q;i=i+1 
} 
eval(cmd) 

を試してみましたが、私は正しくreadChar()を理解していないように見えます。が、いくつかの欠陥と

答えて

4

興味深い質問:あなたはすぐにエラーとプログラムがテストで使用されている未定義のシンボルで中止につながるか

  • を割り当てた割り当てるqcmdi、決してを使用

    • whileループの先頭にあるqをテストしますが、前の点に関連する値を決して与えないでください。
    • ベクトルにiを割り当てますが、決してに設定しないでください10最初
    • あなたは文字列の連結が
    • は、あなたのアプローチは致命的な設計上の問題を持っている(とblockingは違いはありません)ので、コンソール作品からの入力は、それが文字でラインで基本的にありませんどのように誤解どのように動作するかを誤解し
    • 間違った方法で終了します。あなたののセンチネルの値は ''のままです。
    • コンソールを開き、それを閉じたことがない(つまりstdinでOKかもしれませんが)
    • あなたは間違った方法VAR結果を育て、それが他のすべての問題
    に比べて、ここでは関係ありません。

    私たちは、コードを少し修復し、そして、空白で割り当てにはセミコロンと<-をより良いスタイルを使用しない場合(すべての個人/一般的な好み)私たちは

    con <- file("stdin") 
    open(con, blocking=TRUE) 
    cmd <- q <- "" 
    i <- 1 
    while (q != " ") { 
        q <- readChar(con,1) 
        cmd[i] <- q 
        i <- i+1 
    } 
    print(cmd) # for exposition only 
    close(con) 
    

    を取得し、最終的printではなく点に注意してくださいeval、我々はこれを取得(と私は空白が続くlsコマンド文字を入力)

    $ Rscript /tmp/marcusloecher.R 
    ls 
    [1] "l" "s" " " 
    $ 
    

    私はあなたの代わりにreadLines()に見てください。

    これで確認しましたが、明らかにあなたもと表示されています。はあなたの質問に対する回答を受け入れます。それは、時にはインセンティブについてのすべてであると自らを定義している、私たちの分野の誰かにとって、面白い結果です。

  • +0

    本当にありがとう、私は本当に感謝しています。私の防衛には、(私の)働く(!)コードはあなたのものと似ていましたが、明白な初期化のステップで私の質問を乱雑にしたくないのです(このフォーラムの誰もが実行できるそれは(ii)回答を受け入れないことは意図的ではなかった見落としであり、将来それを変えるでしょう。 (つまり、私は合計7つの質問がありました; 5つは答えられたので、「決して」は少し強くなりました)。実際に私の本当の質問はあなたの5番目の弾丸でした。何とかcharでcharを読み込むことはできませんか? –

    +1

    私はあなたに "答えられていない"質問に取り組むことはしませんでした。私はあなたに「受け入れられない」質問のための仕事に連れて行ってくれました - あなたは7の7つのことについてそれを犯しています。それはちょうど悪い習慣です。だからサイトの周りを見て、緑色の目盛り - 「受け入れられた質問」を見てください。 (同様に、リスト形式の "green" score boxen。)これはあなたが始める質問スレッドの読者に与えるシグナル*です。たとえば、[here](http://stackoverflow.com/help/someone-answers)および[ここ](http://stackoverflow.com/help/accepted-answer)を参照してください。 –

    +0

    私は今、非常に困惑しています。あなたは「答えを受け入れる」という意味ですか(質問ではなく)?私はこれまでに5回しかできなかったことがあり、2回の回答を振り返って受け入れることができました。今私は、私がCで簡単に行うことができるようにチャーでcharを読むことが可能かどうかについて、私の質問に対する答えを受け入れることができるようになるでしょう。 –