2013-08-26 10 views

risposta

1

Ecco un modello per una soluzione che ha opzioni per:

  • stdin
  • file di
  • "heredoc" all'interno il programma (molto probabilmente utile per i test)

.

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 => 

Questo frammento richiede l'utilizzo di uno StringInputStream - e qui è:

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 
     } 
    } 
    } 
15

Sfortunatamente, non - almeno non direttamente nelle configurazioni di corsa.

Il meglio che si può fare, per quanto ne so, è sia per:

  • modificare lo script/programma da eseguire sia senza args (legge System.in) o con un argomento filename (legge il file)

  • crea uno script/programma wrapper che agisce come sopra.

Spero che questo aiuti,

vikingsteve

+0

ho creato un modello di supporto standard input/file/heredoc: il codice indicato nella risposta qui sotto. – javadba

Problemi correlati