2013-05-06 61 views
3

是否有人可以向我展示Dart(控制檯)(最新的r22223)終端輸入(問題和響應)的示例。我見過的唯一例子看起來不起作用或不完整。控制檯應用程序 - 終端輸入

+0

這適用於我:http://stackoverflow.com/questions/16311876/simple-command-line-app-io-in-dart/16312777#16312777但請注意,這不適用於Windows時刻 - 應該在下一個版本中修復。 – 2013-05-06 21:46:56

回答

2
import "dart:async"; 
import "dart:io"; 

void main() { 
    print("Do you want to say something?"); 
    Stream<String> input = stdin.transform(new StringDecoder()); 
    StreamSubscription sub; 
    sub = input.listen((user_input) { 
    print("Really? \"${user_input.trim()}\"? That's all you have to say?"); 
    sub.cancel(); 
    }); 
} 

哪個例子你有沒有發現,並且是它究竟錯了嗎?

+0

謝謝,那最終工作後:a)我在Win7,並且代碼最初沒有工作(「讀取文件失敗8」)。 b)新的Dart編輯器必須在一夜之間出現(r22416),c)Dart編輯器找不到Java,d)安裝Java需要重新安裝刪除Java但未安裝它的Java,e)然後安裝Java ,f)然後你用最新的Dart工作。我會打個勾。 – 2013-05-07 04:55:18

+0

這不是一個錯誤;當你創建閉包並在同一個語句中聲明'sub'時,當評估右側並創建閉包時,'sub'還不存在。通過首先聲明'sub',閉包可以關閉它。 – 2013-05-07 06:10:56

+0

@DarshanComputing刪除該部分。在編輯器上感到羞恥,因爲沒有給出警告標記。 – MarioP 2013-05-07 08:43:17

4

這裏的另一種選擇:

import "dart:async"; 
import "dart:io"; 

void main() { 
    stdout.write('> ');  // stdout.write() rather than print() to avoid newline 
    new StringDecoder().bind(stdin).listen((str) { // Listen to a Stream<String> 
     print('"${str.trim()}"');    // Quote and parrot back the input 
     stdout.write('> ');      // Prompt and keep listening 
    }, onDone:() => print('\nBye!'));   // Stream is done, say bye 
} 

這似乎是在Linux和Windows做工精細。無論您在提示中輸入什麼,它都會引用您的意見。您可以通過在Windows和其他類UNIX系統上輸入EOFcontrol-Dcontrol-Z,然後在Windows上輸入enter)退出。

+0

感謝您的建議。但..我會進一步測試,但是,最初,它在編輯器(r22416)中工作,但不是從命令行。從命令行(Win7),程序只是終止,沒有任何內容顯示爲輸出或輸入。很顯然,終端輸入對於某些應用來說很重要,所以「最好」的解決方案應該是很好的瞭解。這是我最初的觀察。 – 2013-05-07 10:34:35

+0

@BrianOh我剛剛在Windows 7上測試了這一點,並且它與Dart 0.5.5.0_r22416的效果很好,它看起來像是一個不適合你的相同版本。我用'dart.exe io.dart'運行,並且完美運行。你如何啓動它? – 2013-05-07 17:06:07

+0

對不起,如何在沒有ctl-d等情況下襬脫它?例如。 new StringDecoder()。bind(stdin).listen((String sInput){}); – 2013-05-07 20:19:27

相關問題