【问题标题】:How to use text file as input to feed in the interactive input of smalltalk and redirect output to a file如何使用文本文件作为输入来输入 smalltalk 的交互式输入并将输出重定向到文件
【发布时间】:2021-05-25 08:28:32
【问题描述】:

我正在努力寻找是否有办法提供输入 到gst a.st b.st ... -的交互命令 并重定向输出。通常,交互式缓冲区将 有st> ...,当你输入命令时,它会通过调用输出一些东西 交互式输出的默认/覆盖displayString 方法。如何获取输入 并使用 linux 命令或一个小的 smalltalk 测试脚本来提供输出。 谢谢。

【问题讨论】:

  • 您能否进一步说明您希望它如何工作?您想从文件中获取输入,而不是从用户那里实时输入吗?你想要所有的输出到一个文件吗?如果提示输入一次一行,例如,使用 Stream>>nextLine 选择器,您可以将文件中的行输入与提示同步,而不必花哨并编写一个脚本来匹配提示与输入。我推荐printNl 而不是displayString 输出到stdout
  • 第二个和第三个问题的答案是肯定的,一次一行。如果您能在下面提供有关如何使用StreamprintNl 作为答案的详细答案,那将很有帮助,谢谢。

标签: smalltalk gnu-smalltalk


【解决方案1】:

这是一个人为的演示程序。它从标准输入读取字符串直到 EOF,对它们进行排序,然后将它们打印出来:

input := stdin nextLine.
c := OrderedCollection new.

[ input ~= nil ] whileTrue: [
    c add: input.
    input := stdin nextLine.
].

c sort do: [ :each | each printNl ]

可以交互运行(输入hhh后按Ctrl-D):

$ gst sortprog.st
tttt
aaa
vvvv
hhh
'aaa'
'hhh'
'tttt'
'vvvv'

或者我可以创建一个文本文件test.in,其内容如下:

tttt
aaa
vvvv
hhh

然后运行:

$ gst sortprog.st < test.in > test.out

然后检查输出文件的内容:

$ cat test.out
'aaa'
'hhh'
'tttt'
'vvvv'

如果您的程序有提示,它们当然会出现在输出文件中。任何发送到stdout 的内容都会发送到该文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多