リッチテキストを通常テキストファイルに一括変換する方法

何処のトピックに書き込めばよいものか判らなかったので、こちらに投稿します。
Nitram+Nuncaさんが配布されている『TransNotes for iPod』で
スティッキーズ系ソフトウェアのテキストデータをiPodに送信したいのですが、
最近のメモソフトはどれもリッチテキスト形式で保存を行っており、
そのままではiPodへの転送を行う事が出来ません。
無論メモの内容を手作業で通常テキストにすることは可能ですが、
膨大なメモデータを逐一通常テキストに変換するのは明らかに非効率です。
そこでリッチテキスト形式のファイルをテキスト形式に一括変換する方法を
探しているのですが、どなたか御存知ありませんでしょうか?
単独のソフトウェアやAppleScriptドロップレット等どんな方法でも構いませんが、
変換処理を極力自動化出来る事が理想です。
どうぞ宜しくお願いします。

投稿日 2004/07/29 16:53

返信: 19

2004/07/30 12:01 Community User への返信

(iPodがらみでは無いですが)私も以前から、rtfからtxtに一括変換できないかなと思っていました。でも、TextEditでいちいち手作業で変換するのも面倒ですよね。
そこで、TextEditをSystemEventsで操作したスクリプトを組んでみました。
(TextEdit自体で{リッチ,標準}の属性を切り替えられれば良いのですが、用語辞書に見当たらなかったので、SystemEventsで制御してみました)
tell application "System Events"
tell process "TextEdit"
click menu item "標準テキストにする" of menu "フォーマット" of menu bar item "フォーマット" of menu bar 1
click button "OK" of sheet 1 of window n --nは変換対象の書類名
end tell
end tell
スクリプトの肝は上記の部分ですが、これを組み込んだドロップレットを作ってみました。
私の環境(MacOSX10.3.4(日本語)、ユニバーサルアクセスの補助装置アクセスON)では問題なく動作しています。
リッチテキストのフォーマットを自己ルーチンで解釈するよりは、TextEditの「標準テキストにする」を利用した方が手っ取り早かったので、せっかくOSX10.3でSystemEventsが使えるようになった事ですし、そうしてみました。
もし興味があるようでしたら、Resください。そのドロップレットをWebからダウンロード可能にしようと思います。

2004/07/30 14:19 Community User への返信

私も当初はTextEditの変換機能に注目していたのですが、
AppleScriptでの操作方法が判らなかった為断念していました。
もし投稿して頂いた内容がドロップレットとして実行可能であれば、
まさに私の思い描いている処理が実現出来ます。
是非ドロップレットをアップして頂けませんでしょうか?
※手元にはAppleScriptの某有名解説書があるものの、
内容がOS 9準拠なのでかなり時代遅れな印象を受けます。
やはりOS X準拠のものを用意すべきなんでしょうね…。

2004/07/30 17:13 Community User への返信

TextEditをSystemEventsで自動操作しますので、透明人間がメニューを選んでボタンを押しているような微笑ましい動作ですが、もしよろしかったら使ってみて下さい。
私の環境でのテストでは、rtf、 rtfd(画像付き、変換後は画像を失います)の両方のフォーマット書類を問題なく標準テキスト化できています。
test1.rtf, test2.rtfd --> test1.txt, test2.txt
(スクリプト自体はできているので)数日でWeb公開ができると思います。用意でき次第、ここに書き込みますので、しばらくお待ちください。

2004/07/31 09:49 Community User への返信

とりあえず、公開してみました。
SystemEventsでTextEditを操作しているだけの単純な内容ですので、処理時間も、TextEditで開いて変換して新規保存して閉じる、‥‥の時間を要します。
とは言うものの、手作業でTextEditを扱うよりは、はるかに高速です。
SystemEventsでのGUI操作は、スクリーンセーバが上に被さるとエラーがでるようですので、処理中はスクリーンセーバOFF(ホットコーナーか何かで)にしておくしかないようです。
http://ezqnet.hp.infoseek.co.jp/pages/dp/rtftxt/

2004/07/31 13:04 Community User への返信

早速動作確認してみたのですが、SystemEvent云々のエラーで
処理が止まってしまいます。
動作環境については添付されていた説明書に従っており、
テキストエディット側の設定をいじってみたり別のファイルで
試してみたりしたのですが、一向に変化が見られません。
(添付のサンプルHTMlファイルでもダメでした)
一体何処に問題があるのでしょうか… ??
ちなみに、OSのバージョンは10.3.4です。

2004/07/31 16:10 Community User への返信

確認しました!
私の環境(自宅、仕事場とも)ではスイスイ動いてたので、気付きませんでしたが、どうもElement名(メニュー名とかボタン名とか)のテキストに不整合が出ていたようです。
button "OK" を明示的に、button ("OK" as Unicode text)にしてやったら、他環境(他人のG4,G5)でも動作しました。
修正版をアップしますので、半日ほど(現在7/31夕方)お待ちください。
しかし、なんで私の環境(会社のeMac、自宅のMDD)では難なく動作するんだろうか‥‥?
stringとunicode textの不整合(というか、私の迂闊、ですが...)には、よく足を取られるんですが、今回もやってしまいました...。

2004/08/02 21:14 Community User への返信

v3.0が公開された直後にダウンロードし、
動作確認させて頂きました。
…が、相変わらず私の環境では挙動不審です。
v3.2についても余り変化がなく、どちらもTextEditの
環境設定ウィンドウを開いて何となくいじくっていると
(※特にどの設定項目が有効というコトも無く)
突然スクリプトが動くようになります。
…とりあえず無事に変換されたファイルをiPodに
転送してみたのですが、結果はすこぶる良好です。
普段iBookに書き溜めたメモがiPodでいつでも
観られるというのは、何とも快適であります。
そして、Macを使う以上スクリプトは必須だと
身にしみて感じる今日この頃です…。
v3.2と同時に公開されたスクリプティングガイドも
大変参考になりました。

2004/08/02 22:27 Community User への返信

リッチテキストやWord書類をテキストに変換する rtf2txt というコマンドがあるのですが
http://www.bluem.net/downloads/rtf2txt_en/
大量のファイルをさばくのであれば、コマンドを自動化できる方が速いかと思い
いろいろなホームページをさまよいながら、ドロップレットを作成してみました。
しかし・・・ なにぶん初心者が作ったスクリプトなので泥臭さ満点で動作も保証しかねる
ようなレベルのものなので、できればスクリプトに詳しい方に手直しいただければ・・・と思うのですが。
(一からきれいに作り直してもらえるなら、なお良し (^^;))
一応、ドロップレットの中身を下にアップします。
ファイル (*.doc, *.rtf) をドラッグアンドドロップすると、ファイルと同じ階層にrtf2txtという
フォルダを作成し、その中に変換したファイルを収めるというものです。
フォルダ・ファイル名に日本語・スペースが使われていても大丈夫なようにはなっているはずです。
ただ、"(" があると通りません。回避策が分かる方がおられましたら教えてください。よろしくお願いします。
--------------------------------------------------------------------------------------
property pFolderNameToSave : "rtf2txt"
on GetPosixPathTo(tPathString)
set tBkSlash to (ASCII character 128) as text
return (do shell script "echo " & tPathString & " | sed 's/" & tBkSlash & "/[^/]*$/" & tBkSlash & "//'")
end GetPosixPathTo
on GetPathTo(tPathString)
return (do shell script "echo " & tPathString & " | sed 's/:[^:]*$/:/'")
end GetPathTo
on GetFileNameFromFullPathPOSIX(tPathString)
set myNF to (do shell script ("echo " & tPathString & " | awk -F/ '{ print NF }'"))
set fName to (do shell script ("echo " & tPathString & " | awk -F/ '{ print $" & myNF & "}'"))
return fName
end GetFileNameFromFullPathPOSIX
on open tFiles
-- ** set path variables **--
set tFile to (item 1 of tFiles)
set fPath to (tFile as string)
set baseFolderPath to my GetPathTo(fPath)
set baseFolderPathPOSIX to my GetPosixPathTo(POSIX path of tFile)
set folderPathToSave to (baseFolderPath & pFolderNameToSave & ":")
set folderPathToSavePOSIX to (baseFolderPathPOSIX & pFolderNameToSave & "/")
--** Create folder to save snaps in if not exists **--
tell application "Finder"
if (exists folder folderPathToSave) is false then
make folder at folder baseFolderPath with properties {name:pFolderNameToSave}
end if
end tell

repeat with tFile in tFiles
set fPathPOSIX to (POSIX path of tFile)
set fName to my GetFileNameFromFullPathPOSIX(fPathPOSIX)
set fNameTxt to ((characters 1 thru ((length of fName) - 3) of fName) & "txt") as string
set outputPath to (folderPathToSavePOSIX & fNameTxt)
set fileExt to (characters ((length of fName) - 2) thru (length of fName) of fName) as text
set junkFile to ("junk." & fileExt)
if (fPathPOSIX ends with ".rtf") or (fPathPOSIX ends with ".doc") then
do shell script ("cd " & quoted form of baseFolderPathPOSIX & " ; cp " & quoted form of fName & " " & junkFile & " ; /usr/local/bin/rtf2txt -e utf8 " & junkFile & " | iconv -f utf-8 -t shift-jis > " & quoted form of outputPath & " ; \rm " & junkFile)
else
tell application "Finder"
activate
display dialog ("『" & fName & "』は変換できません。ファイル形式もしくは拡張子が異なります。")
end tell
end if

end repeat

end open

2004/08/03 17:26 Community User への返信

コマンドの方が確実で速いですよね。
私も早速、rtf2txtを使ってみましたが、こっちの方が良いですね。
やっぱり、System EventsによるGUI操作はキワモノっぽい感じなので...。
いじってて始めて知りましたが、画像付きのrtfdファイルって、ディレクトリだったんですね。フォルダの中に画像とTXT.rtfが格納されていました。(もしかしたら、良く知られている事でしょうか...?)
早速、私もrtf2txtを使ってドロップレットを作ってみました。
近々にSystemEvents版と同じ場所に公開しようと思います。

2004/08/03 19:04 Community User への返信

>早速、私もrtf2txtを使ってドロップレットを作ってみました。
>近々にSystemEvents版と同じ場所に公開しようと思います。
差し支えがなければ、スクリプトの中身が見えるようにしていただけないでしょうか?
やりたいことはたくさんあるのに、それがなかなか自分の力では形にできないので
手本となるものが欲しいのです。よろしくお願いします。

2004/08/03 19:34 Community User への返信

私も色々な方々のソースを参考に、なんとか基本的な事は書けるように成長して参りました。ただ、ソースの中に私的な情報(Webにジャンプする為のアドレスとかエラーコード番号とか色々...)も埋め込まれているので、それを抜いた形で「参考版」として公開しようかと思います。
私の作ったスクリプトは、周りは出来る限りFinderで固めて、変換だけrtf2txtにおこなわせるという構造です。変換対象はrtfとrtfdにしました。また、私自身どうしても日本語パス(とdo shell script)への不信感が拭えないので、確実に英字オンリ−になるようテンポラリフォルダで作業する形式にしてみました。
rtfdはフォルダを掘って、内部のrtfを引きずりだして変換する仕様にしてみましたが、私自身rtfdの仕様書を読んだ事もないので、かなり「なりゆき」的な構造ではあります。
>手本となるものが欲しいのです。
いやあ‥‥。ソース読むと幻滅してしまうかも‥‥です。
お目汚し程度に参考にして下さい。

2004/08/03 21:08 Community User への返信

>それを抜いた形で「参考版」として公開しようかと思います。
お手数をおかけして申し訳ありません。ありがとうございます (^^)
>いやあ‥‥。ソース読むと幻滅してしまうかも‥‥です。
私の知識ではどうがんばっても、do shell scriptを使わずにというアプローチは考えつきませんし
(do shell scriptを使いたくて使っているわけではなくただのバカの一つ覚えですから・・・ (^^:)
是非とも参考にさせていただきたいと思います (^^)

このスレッドはシステム、またはAppleコミュニティチームによってロックされました。 問題解決の参考になる情報であれば、どの投稿にでも投票いただけます。またコミュニティで他の回答を検索することもできます。

リッチテキストを通常テキストファイルに一括変換する方法

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。