如何从Ruby中的非UTF-8文本文件中提取数字并将它们放入另一个文件中?

时间:2018-02-19 16:04:28

标签: python ruby regex excel terminal

我有一些终端录制的数据并保存到打字稿文件中。我知道如果需要,我可以将其更改为.txt。问题似乎是,尽管在被问到文件编码时返回了UTF-8,我得到的错误似乎暗示了编码是其他的东西。例如,我无法将内容复制并粘贴到Word或其他文本编辑器中。

无论如何,我没有运气使用标准的.gsub!.tr方法来删除此文件中的非数字字符。

输入如下:

_4ÑZŸs_4ÑZâ7o[?1034h
_4ÑZ8obash-3.2$ e4ÑZ”C
i[A e4ÑZõD
oscript -re4ÑZˇ?
i[Ae4ÑZ∑@
opython go.pyf4ÑZÌ
i
f4ÑZ£Ì
o
f4ÑZÊÚoattn 0
f4ÑZ,Ûoattn 0
attn 0
Hf4ÑZuÛoattn 0
attn 0
attn 0
attn 0
attn 0
attn 0
attn 0

其中' 0'可以是0到128之间的任何数字。

我只想在“' attn"”之后的数字。而且也没有。

这是我目前的代码:

File.open("input.txt").each do |line|
  number = line.gsub('[0-9]+', ' ')
  File.open("output.txt", "w+") { |f| f.write(number)  }
end

并且根据我所做的任何小改动,我要么得到一个枚举器,要么只得到输入文件的最后一位数。

从来没有想过要做这个基本的事情会很困难。

奖励积分:让程序输出这些数字的最佳方法是将它们插入Excel工作表的第1列或第3列(无限期地直到终止终端中的程序)?

生成输入文件的Python程序只从Serial对象获取值并将它们输出到终端,终端生成有问题的文本文件。我只是试图将它们从这个文本文件手动移动到Excel(我现在愚蠢地尝试使用简单的Ruby脚本自动执行任务)。

Python或Ruby中的脚本就足够了,只要它将.txt文件作为输入(因为我正在处理已经生成的数据)。

我有一台Mac,所以我使用Pages,如果这有所作为。

Here是相关的原始文件。编辑:出于安全原因删除了文件。

TL; DR

  1. 如何在新行上打印打字稿(看似非UTF-8)文件中的数字(每个数字长度为1-3位)?

  2. 如何自动完成整个过程,让我的Python程序无限期地(在无限while True:循环内)将值插入.numbers(Excel for Mac)文件?

  3. 谢谢!

2 个答案:

答案 0 :(得分:1)

正则表达式(?<=^attn\s)(?:[0-9]{1,2}|1[01][0-9]|12[0-8])$(?<=^attn\s)\d+

详细说明:

  • (?<=)积极的外观
  • \s匹配任何空格字符(等于[\r\n\t\f\v ]
  • (?:)非捕获组
  • []匹配列表中的单个字符
  • {n,m} nm次之间的匹配
  • |

Python代码

text = open(r'C:\text.txt').read()
matches = re.findall(r'(?<=^attn\s)(?:[0-9]{1,2}|1[01][0-9]|12[0-8])$', text, re.M)

输出:

['11', '0', '99', '120', '0']

Code demo

答案 1 :(得分:0)

你应该把这个问题分成两个单独的问题。这是第一个答案;一些应该做你想做的Ruby代码:

numbers = File.readlines('input.txt').grep(/^attr \d+/).map do |line|
  line.split('attr ').last.chomp.to_i
end

File.write('output.txt', numbers.join("\n"))