web-dev-qa-db-ja.com

intellijでscalaプログラムを実行するときにstdinからの入力をシミュレートします

Stdinリダイレクト用にコマンドライン引数をintellijに設定する方法はありますか?

以下の線に沿ったもの:

実行|実行構成の編集|スクリプトパラメータ

/shared/Java/paf-rules.properties 2 < /shared/Java/testdata.csv
38
javadba

以下にオプションがあるソリューションのテンプレートを示します。

  • 標準
  • ファイル
  • プログラム内の「heredoc」(テストに役立つ可能性が最も高い)

  val input = """ Some string for testing ... """

  def main(args: Array[String]) {
    val is = if (args.length >= 1) {
      if (args(0) == "testdata") {
        new StringInputStream(input)
      } else {
        new FileInputStream(args(0))
      }
    } else {
      System.in
    }
    import scala.io._
    Source.fromInputStream(is).getLines.foreach { line =>

このスニペットでは、StringInputStreamを使用する必要があります。これは次のとおりです。

  class StringInputStream(str : String) extends InputStream {
    var ptr = 0
    var len = str.length
    override def read(): Int = {
        if (ptr < len) {
          ptr+=1
          str.charAt(ptr-1)
        } else {
         -1
        }
    }
  }
1
javadba

残念ながら、いいえ-少なくとも直接実行構成ではありません。

あなたができる最善の方法、afaikは次のいずれかです:

  • 引数なしで実行するようにスクリプト/プログラムを変更します(System.in)またはファイル名引数付き(ファイルを読み取ります)

  • 上記の方法で動作するラッパースクリプト/プログラムを作成します。

お役に立てれば、

バイキングスティーブ

15
vikingsteve