gpt4 book ai didi

dart - 如何将标准输入(不止一行)捕获到 Dart 中的字符串?

转载 作者:行者123 更新时间:2023-12-03 02:53:47 24 4
gpt4 key购买 nike

我有一个 Dart 命令行程序,它希望能够将数据从 shell 传输到 Dart 程序(例如,cat file.txt | dart my_program.dart 或接受输入,直到用户使用 Ctrl+d)。通过在线教程,我发现关于保存来自 stdin 的输入的唯一文档是 stdin.readLineSync()。然而,顾名思义,这只会读取第一行。

如何将stdin的全部内容捕获到一个String中?另外,如果用户试图输入一个非常大的文件,是否会有任何安全问题? String 的长度有限制吗?我该如何防范?

感谢您的帮助!

最佳答案

以下程序如果以交互方式使用,将回显您的输入但将每个字符大写。

您也可以通过管道将文件传递给它。

dart upper_cat.dart < file.txt

这将输出每个字符都大写的文件。

import 'dart:convert';
import 'dart:io';

main() {

// Stop your keystrokes being printed automatically.
stdin.echoMode = false;

// This will cause the stdin stream to provide the input as soon as it
// arrives, so in interactive mode this will be one key press at a time.
stdin.lineMode = false;

var subscription;
subscription = stdin.listen((List<int> data) {

// Ctrl-D in the terminal sends an ascii end of transmission character.
// http://www.asciitable.com/
if (data.contains(4)) {
// On my computer (linux) if you don't switch this back on the console
// will do wierd things.
stdin.echoMode = true;

// Stop listening.
subscription.cancel();
} else {

// Translate character codes into a string.
var s = LATIN1.decode(data);

// Capitalise the input and write it back to the screen.
stdout.write(s.toUpperCase());
}
});

}

还有 console图书馆来帮助处理这类事情。我还没有尝试过,但试一试并报告回来 ;)

以下示例处理 UTF8 输入 - 上面的示例需要 1 字节字符作为输入。

import 'dart:convert';
import 'dart:io';

main() {

stdin.echoMode = false;
stdin.lineMode = false;

var subscription;
subscription = stdin
.map((List<int> data) {
if (data.contains(4)) {
stdin.echoMode = true;
subscription.cancel();
}
return data;
})
.transform(UTF8.decoder)
.map((String s) => s.toUpperCase())
.listen(stdout.write);
}

关于dart - 如何将标准输入(不止一行)捕获到 Dart 中的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28790279/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com