2015-06-14 2 views
0

В моей программе много разных функций, и одна из них - это команда «load». Как только пользователь вводит входную «нагрузку», он может загружать в файл txt ... Проблема в том, что моя команда - это не только само слово «load», например, «load numbers.txt» или «load data.txt»Scala: загрузка разных файлов по вводу

Теперь я хочу открыть эти текстовые файлы, которые находятся на моем ПК, но мне нужно имя файлов БЕЗ «загрузки» перед командой. Как я могу получить только имя из всей строки ввода?

def ProgramSelector() { 
var endProgram = false 

while (!endProgram) { 

    val userSelection = scala.io.StdIn.readLine("There is no transfer data available yet, please use the 'load' command to initialize the application!\nEnter your command or type 'help' for more information:") 
    if (userSelection == "help") 
    println("some help text here") 
else if (userSelection == "load") 

    //else if (userSelection == "3") 
    //exerciseThree() 
    //else if (userSelection == "4") 
    //exerciseFour() 
    //else if (userSelection == "5") 
    //exerciseFive() 
    //else if (userSelection == "6") 
    //exerciseSix() 
    //else if (userSelection == "7") 
    //exerciseSeven() 
    //else if (userSelection == "8") 
    //exerciseEight() 
    else if (userSelection == "exit") 
    endProgram = true 
    else 
    println("Invalid command!") 

Так у меня есть функция, ProgramSelector где я только сделать, если заявление, если на входе нагрузка ...

+0

Наивное: 'val fileName = line.split (" ") (1)' –

+0

очень приятно! Спасибо! У меня есть еще один вопрос: как я могу сделать здесь, как это в моем примере, например, когда я делаю ввод с «load (filename)», он должен сравнивать только userSelection с входной «нагрузкой» и игнорировать часть с имя файла? – Bajro

+0

Обязательно проверьте ввод. Вышеупомянутое будет выдавать исключение, если функция split возвращает массив размером <2. –

ответ

1

Я попытался сделать это немного более универсальным.

Чтобы показать, как это может быть полезно, я также создал еще одну команду, которую вы можете назвать как «добавить 1 2», и напечатает сумму добавления двух целых чисел.

Если вы серьезно относитесь к созданию интерактивного приложения CLI, я предлагаю вам посмотреть here о том, как создать собственную интерактивную оболочку поверх sbt.

val loadCommand = """load (.*)""".r 
val helpCommand = """help.*""".r 
val exitCommand = """exit.*""".r 
val addCommand = """add\s+(\d+)\s+(\d+)""".r 

val PromptMsg = "There is no transfer data available yet, please use the 'load' command to initialize the application!\nEnter your command or type 'help' for more information: " 

def programSelector() { 
    var endProgram = false 

    val fileKeeper = new scala.collection.mutable.HashSet[String]() 

    while (!endProgram) { 
     val userSelection = scala.io.StdIn.readLine(PromptMsg) 
     userSelection match { 
      case loadCommand(file) => 
       println(s"Adding file $file") 
       fileKeeper add file 
       println(s"Files so far: $fileKeeper") 
      case helpCommand() => 
       println("some help text here") 
      case exitCommand() => 
       endProgram = true 
      case addCommand(a,b) => 
       val sum = a.toInt + b.toInt 
       println(s"Sum=$sum") 
      case _ => 
       println("Invalid command!") 
     } 
    } 
} 


programSelector() 
+0

Спасибо за ваш ответ! Это очень хорошее решение кстати! У меня еще один вопрос: Как я могу избежать загрузки 2-х кратного файла в команде load? например: если я набираю «load myfile.txt», а затем «load myfile.txt», он НЕ должен загружать тот же файл снова! – Bajro

+0

Вы можете запомнить каждый файл в HasSet. 'val fileKeeper = new scala.collection.mutable.HashSet [String]()'. – marios

+0

hmm okay? ... Извините, новичок в программировании, но как бы вы реализовали его здесь в этом сценарии? – Bajro

Смежные вопросы