Tag: io

使用Ruby(IRB)打印CP850编码的字符串

我想打开一个包含阿拉伯语文本的文本文件(test.txt)(其编码为CP850),然后将其内容打印到STDOUT: # coding : CP850 STDOUT.set_encoding(Encoding::CP850); # not sure if it’s necessary open(‘G:/test.txt’,?r){|f| f.read.each_char{|c| print c}; # or puts f.read; } gets 但它不打印阿拉伯字符,输出是一些符号和随机字符。 使用Ruby 2.2.3

在Ruby中与子进程通信

有没有人知道如何在Ruby中启动子进程并使用已启动子进程的stdin和stdout与它进行通信? 类似于以下内容: IO.popen(“subprocess”, “r+”) do |io| io.puts(question1) answer1 = io.gets question2 = follow_up_question(question1, answer1) io.puts(question2) answer2 = io.gets # etc end 关键是我想做互动。 我不想只是为已启动的程序发送所有输入,然后检索所有输出,但我想发送内容并随后收到答案。 有什么办法吗? 我尝试了IO.popen,Open3.popen2和大约10个其他方法,但是所有这些方法都希望你先发送子进程的所有输入然后检索所有输出。 我找不到互动的方法。

如何通过段落或块将数据读入数组

我有一个文件,其中包含由空行分隔的文本块,如下所示: block 1 some text some text block 2 some text some text 如何将其读入数组?

如何从命令行打开ruby中的STDOUT.sync

我有Objective-C代码调用ruby脚本并监视STDOUT。 但是,默认情况下ruby似乎没有同步STDOUT,因此我需要在脚本开头放置STDOUT.sync = true以查看输出是否正常。 我可以在调用ruby脚本时将其作为命令行选项吗?

Ruby – 在内存中创建文件

无论如何在Ruby中编写以下代码而不将文件写入磁盘? temp_file = ‘path/to/file.csv’ users = [a@bc, c@ba] CSV.open(temp_file, “w”) do |csv| csv << data_for_report end Reports.sendreport users temp_file File.delete(temp_file) Reports.sendreport附加一个文件并发送一封电子邮件,因此它需要是一个文件……

在Ruby控制台应用程序中获取键盘事件(没有按’enter’输入)的最佳方法是什么?

我一直在网上寻找这个答案一段时间,并发现其他人也在问同样的事情,即使在这里。 所以这篇文章将介绍我的案例,并回应我发现的“解决方案”。 我是Ruby的新手,但出于学习目的,我决定在这里创建一个gem。 我正在尝试对该程序实现键盘导航,这将允许用户使用快捷方式来选择他想要查看的请求类型。 在未来,箭头导航等 我的问题:我找不到一种通过Ruby从用户控制台获取键盘事件的一致方法。 我尝试过的解决方案: Highline gem:似乎不再支持此function。 无论如何它使用STDIN,继续阅读。 STDIN.getch:我需要在并行循环中运行它,因为在用户可以使用快捷方式的同时,可以创建更多数据并且程序需要显示它。 好吧,我在控制台中显示格式化文本(Rails日志)。 当这个循环运行时,我的文本丢失了所有格式。 诅咒:很酷,但我需要设置位置(x,y)来每次显示我的文字? 会让人感到困惑。 这是我想要做的地方。 您可能会注意到我在显示我的文本之前使用“stty -raw echo”(关闭生成)并且之后使用“stty raw -echo”(生成开启)。 这使我的文本格式化。 但我的关键监听器循环不起作用。 我的意思是,它有时有效,但不一致。 如果按两次键,它就不再起作用,有时它也会单独停止。 我在这里放一部分代码: def run # Two loops run in parallel using Threads. # stream_log loops like a normal stream in the file, but it also parser the text. # break it […]

Ruby在哪里跟踪其打开的文件描述符?

这个问题与此无关 这个问题不是关于如何使用File #close或File#open block语法自动关闭文件。 这是一个关于Ruby在运行时存储其打开文件描述符列表的问题。 实际问题 如果您的程序具有开放描述符,但您无权访问相关的文件或IO对象,那么如何找到对当前打开的文件描述符的引用? 举个例子: filename=’/tmp/foo’ %x( touch “#{filename}” ) File.open(filename) filehandle = File.open(filename) 第一个File实例被打开,但对象的引用不存储在变量中。 第二个实例存储在filehandle中,我可以使用#inspect或#close轻松访问它。 但是,丢弃的File对象没有消失; 它只是无法以任何明显的方式访问。 在对象完成之前,Ruby必须在某个地方跟踪它…但在哪里?

在Ruby中将基数为2的数字字符串数组写入二进制文件

我在Ruby中编写了一个简单的霍夫曼编码。 作为输出,我有一个数组,例如: [“010”, “1111”, “10”, “10”, “110”, “1110”, “001”, “110”, “000”, “10”, “011”] 我需要在文件中写入,然后读取它。 我尝试了几种方法: IO.binwrite(“out.cake”, array) 我得到一个简单的文本文件,而不是二进制。 要么: File.open(“out.cake”, ‘wb’ ) do |output| array.each do | byte | output.print byte.chr end end 看起来它的工作原理,但后来我无法将其读入arrays。 我应该使用哪种编码?

观察/阅读不断增长的日志文件

我有一个不断增长的日志文件。 如何通过Ruby脚本观察和解析它? 该脚本将在写入文件时解析每个新行,并在新行包含字符串’ERROR’时将某些内容输出到屏幕

在Ruby中编辑文件中的每一行

我正在尝试找到一种编辑文件中每一行的简单方法,而我在理解如何使用File类时遇到一些麻烦。 我想编辑的文件有几百行,每行有逗号分隔值。 我只对每行中的第一个值感兴趣,并且我希望在第一个值之后删除所有值。 我试着做以下事情: File.open(‘filename.txt’, ‘r+’) do |file| file.each_line { |line| line = line.split(“,”)[0] } file.write file.close end 哪个不起作用,因为File.write方法要求将内容写为参数。 有人可以告诉我如何达到预期的效果吗?