将ascii格式的表转换为rtf

时间:2013-05-27 18:52:41

标签: macos bash text replace applescript

我在普通的ascii中有一堆非常古老的文本。大部分文本都是格式化为下一个的简单表格:

------------------------------------------
| Some text         |  200.3 | some text |
------------------------------------------
| Another text      |  30.30 | comment   |
------------------------------------------
...many "lines" like above...

我需要将文本转换为“现代”文档。手动将单元格复制到TextEdit.app表是非常痛苦的工作。 (我正在使用OS X)。

在某些脚本中是否有可能将表格转换为RTF或DOC格式?我可以尝试自己编写脚本,只需要一些想法如何开始......

3 个答案:

答案 0 :(得分:4)

我喜欢apple-automator服务,所以我向您展示整个工作流程 - 接下来的步骤:

  • 启动Automator.app
  • 选择Service
  • 设置接收富文本
  • 检查 Output replaces selected text复选框
  • 单击工具栏上的“显示库”(如果隐藏)

现在添加第一个动作:

  • Run shell script
  • 传递输入:to stdin
  • 将Shell更改为:/usr/bin/perl

添加以下脚本

use 5.012;
use open qw(:std :utf8);
print "<table border='1'>\n";
while(<>) {
    chomp;
    next if /^\s*[=-]*\s*$/;
    my @arr = m/(?:^|\G\|)((?:[^\\|]|\\.)*)/sg;
    print "<tr><td>" . join('</td><td>', map {s/^\s*(.*?)\s*$/$1/;$_} splice(@arr,1,-1)) . "</td></tr>\n";
}
print "</table>";

现在是第二个动作:

  • Run shell script
  • 传递输入:to stdin

添加下一个脚本

textutil -stdin -inputencoding UTF-8 -format html -convert rtf -stdout | pbcopy -Prefer rtf

并添加第三个操作:

  • Get content of the clipboard

使用某个名称保存服务,例如:Table2Rtf

工作流:

  • 只需启动TextEdit.app,
  • 即可
  • 加载你的ascii文件
  • 将文档类型更改为RTF(菜单:格式 - >生成富文本格式)
  • 选择“ascii表”(确保选择包含所有|个字符的整个表格)
  • 并从TextEdit -> Services运行上述服务。

如果一切正常 - 用简单的RTF表替换表格,你可以调整列宽等等。

行动确实:

  • perl脚本将文本表转换为简单的HTMLtable
  • textutil将HTML转换为RTF并将rtf复制到剪贴板
  • 最后一个是获取rtf剪贴板内容
  • 并且因为选择了“输出替换了输入” - 结果RTF只是替换文档中的基于文本的表。
  • 您也可以将“rtf”保存为“doc”。

Mac的Automator.app非常强大,通过一些调整,您可以制作converor.app并简单地将所有ascii文件放入其中以转换为rtf文件。

答案 1 :(得分:1)

我会使用一个小的Python脚本将其转换为html,我猜。

#!/usr/bin/env python

import sys, re

print '<html><body><table><tr>'
for line in sys.stdin:
  if re.match(r'^-+$', line):  # separator line?
    print "</tr><tr>"
  else:  # line with values
    print ''.join('<td>%s</td>' % field for field in line.split('|'))
print '</tr></table></body></html>'

答案 2 :(得分:0)

如果用'|'可靠地分隔文本每个字段的字符,awk语言将被证明是“简化”您的信息的好工具: - )

  awk '-F|' -v OFS="\t" 'NF>1{ print $2, $3, $4 )' infile > outfile.tab

就个人而言,我已经十多年没有乱用RTF格式了。为什么你认为它是“现代的”;-)? ..正如你所说,你有“像上面这样的很多行”,也许你应该考虑将这些信息存储在哪里更容易搜索或重新考虑,比如数据库?或至少某种电子表格应用程序。但是我们会详细介绍您有意做出有意义的评论。

如果您觉得此解决方案有帮助,那么S.O.上有1000个帖子。显示类似的awk用法。

IHTH。