2

プレーンなASCIIで書かれた本当に古いテキストがたくさんあります。テキストの大部分は、次のようにフォーマットされた単純な表です。

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

テキストを「モダン」ドキュメントに変換する必要があります。セルを手動で TextEdit.app テーブルにコピーするのは本当に骨の折れる作業です。(私はOS Xを使用しています)。

テーブルをRTFまたはDOC形式に変換する方法をスクリプト化する可能性はありますか? 自分でスクリプトを作成してみることができますが、開始方法のアイデアが必要なだけです...

4

3 に答える 3

3

私は apple-automator サービスが大好きなので、ワークフロー全体と次のステップを紹介します。

  • Automator.app を起動します
  • 選択するService
  • 設定リッチテキストの受信
  • チェックOutput replaces selected textボックスをオンにします
  • ツールバーの「ライブラリを表示」をクリックします(非表示の場合)

最初のアクションを追加します。

  • Run shell script
  • パス入力:to stdin
  • シェルを次のように変更します。/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>";

次に 2 番目のアクション:

  • Run shell script
  • パス入力:to stdin

次のスクリプトを追加

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

3 番目のアクションを追加します。

  • Get content of the clipboard

次のような名前でサービスを保存します。Table2Rtf

ワークフロー:

  • TextEdit.app を起動するだけで、
  • asciiファイルをロードします
  • ドキュメントのタイプを RTF に変更します (メニュー: フォーマット -> リッチ テキストの作成)。
  • |「ASCIIテーブル」を選択します(すべての文字を含むテーブル全体を選択してください)
  • そしてTextEdit -> Services、上記のサービスを実行します。

すべてがうまくいっている場合 - テーブルが単純な RTF テーブルに置き換えられたら、列の幅などを調整できます....

アクションは次のことを行います。

  • スクリプトはperl、テキスト テーブルを単純な HTML テーブルに変換します。
  • HTML を RTFにtextutil変換し、RTF をクリップボードにコピーします。
  • 最後はrtfクリップボードの内容を取得することです
  • そして、「出力が入力を置き換えた」が選択されているため、結果のRTFは、ドキュメント内のテキストベースの表を単純に置き換えます。
  • 「rtf」を「doc」として保存することもできます。

MacAutomator.appは非常に強力で、少し調整すれば、converor.apprtf ファイルに変換するためのすべての ascii ファイルを簡単にドロップできます。

于 2013-05-27T20:00:31.783 に答える
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>'
于 2013-05-27T19:43:24.583 に答える
0

テキストが「|」で確実に区切られている場合 awk 言語は、情報を「煮詰める」ための優れたツールであることが証明されます :-)

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

個人的には、10 年以上 RTF 形式をいじる必要はありませんでした。なぜ「モダン」だと思いますか ;-)? ..「上記のような行がたくさんある」とおっしゃっているように、データベースのように、検索やリファクタリングが容易な場所にこの情報を保存することを検討する必要がありますか? または少なくともある種のスプレッドシート アプリ。しかし、有意義なコメントをするために、あなたの意図についてもっと詳しく教えてください.

このソリューションが役立つと思われる場合は、SO に awk の同様の使用法を示す何千もの投稿があります。

IHTH。

于 2013-05-27T19:56:04.147 に答える