2013-05-07 5 views
0

터미널 입력에 대해 다음과 유사하게 표시되었지만 ctl-d로 입력을 종료하는 것은 좋지 않습니다. 이 "루프"를 빠져 나가는 또 다른 방법이 있습니까?콘솔 응용 프로그램 - StringDecoder stdin

import "dart:io"; 

void main() { 
    stdout.write("Enter Data : "); 
    new StringDecoder().bind(stdin).listen((String sInput){}); 
//// Do something with sInput ............ 
} 
+0

"좋지 않다"고하면 무엇을 의미합니까? – jdigital

+0

@jdigital. "연산자"가 "입력"을 누른 다음 입력 된 데이터를 사용하기 만하면됩니다. –

+0

이 기사를 살펴보십시오. http://stackoverflow.com/questions/15440138/how-to-read-console-input-on-m3-dart – jdigital

답변

1

당신은 다트를 사용할 때 exit 방법을 실행하여 다트 프로그램을 종료 할 수 있습니다 : 그것은 코드가 listen

에 이벤트 핸들러에 체크 안에 갈 것

void exit(int status) 
Exit the Dart VM process immediately with the given status code. 

This does not wait for any asynchronous operations to terminate. 
Using exit is therefore very likely to lose data. 

From the docs

을 io를

1

몇 가지 옵션이 떠오릅니다. (하나가 설정되어있는 경우) 사용자가 입력 한 키 다음에 EOF 문자 또는 유형 exit를 입력 할 때

new StringDecoder().bind(stdin) 
    .takeWhile((s) => s.trim() != 'exit') 
    .listen((sInput) { 

같은 onDone 핸들러를 사용합니다 : 첫째, 당신은 '완료'조건을 설정하는 takeWhile()를 사용할 수 있습니다. 당신은 cancel()으로 가입을 취소하여 더 많은 유연성을 가질 수 있습니다 스트림을 닫지 않습니다 구독을 취소

void main() { 
    stdout.write("Enter Data : "); 
    var sub; 
    sub = new StringDecoder().bind(stdin).listen((String sInput) { 
    if (sInput.trim() == 'exit' || sInput.trim() == 'bye') 
     sub.cancel(); 
    // Do something with sInput ............ 
    }); 

, 그래서 어떤 onDone 핸들러가 호출되지 않습니다.

물론 남은 것이 없다면 exit(0) [1]으로 언제든지 종료 할 수 있습니다.