よしなしことを、日々徒然に……
※ 2018年以降の記事は、別ブログの方へUPしています ※
新しいブログへは こちら からどうぞ。



 複数置換のマクロ
2016年02月21日(Sun) 
テキスト形式(SHIFT-JIS)で保存してしまったオンライン小説の中で、 ? という表示に文字化けしがちな Unicode 文字や様々な表記の揺れを、複数指定して一括で置換する方法。
先日頂いたコメントを元に、なんとか UTF-8 形式のテキストファイルから、? に文字化けする Unicode 文字を抽出し、SHIFT-JIS で扱える文字に一括で置換する方法を模索してみました。

そもそもですね、
例えば、「嚙む(噛む)」という字や「蠟燭(蝋燭の印刷標準字体)」という表記は、マシンやソフトによって、表示されたりされなかったり他の文字(主に半角の ? )に変換されてしまうのだと、あなたはご存じですか?
「摑む(掴む)」とか「頰(頬)」、「鷗(鴎)」などもそうです。
漢字だけではありません。
「〜(波ダッシュ U+301C)」や「‑(NON-BREAKING HYPHEN U+2011)」、 「‒(FIGURE DASH U+2012 )」、「–(EN DASH U+2013)」、「−(MINUS SIGN U+2212)」など、これら全部、TeraPad などのSHIFT-JIS 形式で表示するソフトでは、まとめて同じ「?」になってしまいます。

それを知らずに書かれた小説を、長いからとテキスト保存し、いざスマホなどで読もうとすると、あっちもこっちも「?」だらけということになるのです _| ̄|○

特に蝋とか掴とか噛なんて文字は、確かに機種依存文字のほうが格好良いのは判ります。私だって使いたい。でも、みんな考えてみよう。世の中には Windows のしかも最新ブラウザを使っている人ばかりじゃないんだよ?
Macの人だっているし、タブレットの人もいる。古い携帯で読もうという人だっているだろう。そういう人のためにも、極力文字化けしない表記で文章を書こうと思わないか!?

……と、熱く語っても、読むほうがそれぞれなように、書くほうもそれぞれなのもまた事実。こだわりたいのは文字書きの端くれとしてよく判るし、あと「うちのパソコンで出るものは、他のパソコンでも出るんでしょ?」と、疑問すら抱いていない書き手さんも多いでしょう。また差異があまりに微妙すぎて、誤変換されたのに気付かない場合も多いかと<「繁(通常)」と「繁(文字化ける)」なんて、一見しただけで区別が付くかーーーっっ(ノ`□´)ノ 彡┻━┻。・;゜・。+ 

実際私だって、大量にある機種依存文字を全部把握してる訳じゃありません。むしろそんなの絶対不可能。
時にうっかり変換ミスで、著作権切れテキストの入力時に学習しちゃった旧字体を、ブログとかで普通に使っていたりしますし。そういうことは、どうしても起こってきちゃうんですよね……


…………とか、まあ、そんなこんなな事情がありましてですね、今回の挑戦に踏み切ったわけなのですよ<長え


で、もって
何時間もかけて様々な成功と失敗、模索と検証を繰り返し。
ようやくなんとか、手持ちのアプリだけで解決つけることができましたーーー( T ▽ T )


参考にさせていただいたのは、こちらの記事です。

■Wordでリストを元に連続して置換するマクロ | You Look Too Cool
 http://stabucky.com/wp/archives/2309

まず、テキストファイルの保存は、UTF-8 で行う。これはもう大前提。
幸いにも私は、もっぱらファイルの保存を Android 端末の「YMO! 小説を読もう!読書支援ブラウザ」で行っているので、これはクリアしていました。

■YMO! 小説を読もう!読書支援ブラウザ - Google Play の Android アプリ
 https://play.google.com/store/apps/details?id=mhe.mhenv_ymo&hl=ja

ちなみにこれでダウンロードしたテキストファイルは、

/mnt/sdcard/mhenv/.yomou/作者名/タイトル_n****.txt

といった感じで保存されています。
頭に「.」が付いているフォルダは隠しフォルダなので、スマホ側にそれらが表示できるファイラーおよび、見つけたテキストファイルをパソコンに転送できる環境が必要です。

まあそのあたりは置いておいて。
パソコンに移動させたこの UTF-8 形式のテキストファイル。私が愛用している TeraPad(テキストエディタ)や Devas(正規表現で複数ファイルを同時検索置換できる grep ソフト)で開くと、それだけでもう Unicode などの機種依存文字が ? に化けてしまいます。そして一度でも上書きしてしまえば、もう取り返しがつきません。
ファイルを縦書きで読みやすいよう整形したい私にとって、それは大きなネックだったのですね。

なのでまず、テキストエディタや grep ソフトにかける前に、SHIFT-JIS にしか対応していないソフトでも安心して扱えるよう、文字化けしがちな機種依存文字と……ついでに間違って使われていることが多い記号なども、まとめて一括変換したいと言う訳です。

必要なのは、Windows 標準装備のWord、のみ!
これも重要ポイントです。そう簡単にパソコンの再セットアップなどできない私。長らく使い込んできて信頼のできるアプリ以外は、もう極力入れたくないのです。

そこに、ほとんど使用していないワードの出番がやって参りました(笑)<私はエクセル派

まずは事前準備。
ワードを起動し、新規作成画面で置換したい文字のリストを作ってゆきます。



こう言った感じで、半角セミコロン(;)で区切り、左側に置換前の文字列;右側に置換後の文字列を一行ずつ記述していきます。
間に改行が入っていても問題ないし、半角セミコロン(;)がない行は無視されるので、記号とか漢字とか、それぞれ分類して書いていくと後で判りやすいかもですね。

ちなみに↑のキャプチャは、置換前が上から順に、波ダッシュ・EM DASH・半角ハイフン2連続、罫線2連続、ついでに繋の旧字体です。どれもしばしば文字化けしたり、混在して使われていて読みにくくなる文字です。

でもって。
このファイルを「一括置換リスト」とでも名前をつけて、適当な場所に保存しておきます。ファイル形式は、ワードのセキュリティにもよりますが、マクロ有効文書(*.docm)にしておけば確実かと。

続いて、マクロの登録です。
内容は以下の通り。

Sub リストを元に置換()
'
' リストを元に置換 Macro
'
Dim mae(100)
Dim ato(100)

With Application.FileDialog(msoFileDialogFilePicker)
.Title = "ファイルを選択"
.AllowMultiSelect = False
.Show
FileName = .SelectedItems(1)
End With

Set paras = ActiveDocument.Paragraphs
x = 0
For i = 1 To paras.Count
Line = paras(i).Range.Text
temp = Split(Line, ";")
If UBound(temp) > 0 Then
mae(x) = temp(0)
ato(x) = Replace(temp(1), Chr(13), "")
x = x + 1
End If
Next i

Documents.Open FileName:=FileName
For i = 0 To x - 1
Set myRange = ActiveDocument.Range(Start:=0, End:=0)
With myRange.Find
.ClearFormatting
.Text = mae(i)
With .Replacement
.ClearFormatting
.Text = ato(i)
End With
.Execute Replace:=wdReplaceAll
End With
Next i
End Sub

ワードにマクロを登録する方法については、こちらで詳しく紹介されています。

■Wordでリストを元に連続して置換するマクロ | You Look Too Cool
 http://stabucky.com/wp/archives/2309

……こっちのマクロは、肝心の UTF-8 のファイルに対応していなかったので、使えなかったんですよぅ(´・ω・`)
ですがマクロの登録方法の説明などは、おおいに参考になりました(感謝)

もうちょっと判りやすい方法だと、開発タブを有効にし、マクロアイコンをクリック → マクロ名に任意の名前(リストを元に置換、とか)を入れて、マクロの保存先をさっき保存した一括置換リスト.docm 文書にして、「作成」ボタンをクリック。
すると Visual Basic Editor の、ちょうどいい場所が開いてくれるので、そこへ↑の灰色の文字のマクロをペーストして上書き保存。
これで、この 一括置換リスト.docm 文書を開いている時だけ、該当のマクロが使用できるようになります。


次は、いよいよ実際の変換作業。
まずこの 一括置換リスト.docm を開いた状態で、開発タブからマクロのアイコンをクリック。
先ほど登録した「リストを元に置換」マクロを選んで実行すると、ファイル選択画面が出てきます。



そこで Unicode 文字入りの UTF-8 形式テキストファイルを選ぶと……



左側のように Unicode 文字や表記揺れのあった部分が、リストで指定しておいた通りに変換された状態で開かれます。
あとは、名前をつけて保存で再度テキスト形式を選択し、 Windows(規定値)を選んで「!赤で示されたテキストは指定されたエンコードでは正しく保存されません」の警告が出なければOK。
これで SHIFT-JIS しか使えないアプリで開いても文字化けすることはありません。

もし警告が出るようならば、そのまま別名で保存したテキストファイルを SHIFT-JIS しか使えないアプリで開き、 ? と文字化けている箇所の前後を確認。まだ開いているワードの画面方で検索して、該当部分の化ける前の状態を(※画面を終了させる前ならば、ワードで開いてる方では元のままなんです)チェック。判った文字を 一括置換リスト.docm に追加してから、変換し直せば良い訳ですよ。

あ、間違えて大本のファイルを上書きしてしまわないよう、一番最初の変換前のファイルは、作業開始前に別の名前にでもしてバックアップ保存しておいた方が良いです。書き換え禁止にしとくのも手かも。うっかりミスって、誰しもがやらかしますからね……ふふふ(遠い目)


……いやあしかし、本当にここまでたどり着いて手順を確立、まとめ終えるのに、本気で何時間かけたことか(苦笑)

ともあれ、ありがたい助言をありがとうございました! <( _ _ )> >いつものかた
これでこの先、ずいぶん作業が楽になってくれるはずです。
さて、あとはこのリストにどの文字を登録するかだなあ……
No.7419 (電脳)

 この記事へのコメントは以下のフォームからどうぞ
Name
E-Mail
URL
感想
2560文字まで

Pass

 
 この記事のトラックバックURL
https://plant.mints.ne.jp/sfs6_diary/sfs6_diary_tb.cgi/201602217419


No. PASS

<< 2016年02月 >>
Sun Mon Tue Wed Thr Fri Sat
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29          

 プロフィール
神崎 真(かんざき まこと)
小説とマンガと電子小物をこよなく愛する、昭和生まれのネットジャンキー。
ちなみに当覚え書きでは、
ゼロさん= W-ZERO3(WS004)
スマホ= 003P(Android端末)
シグ3= SigmarionIII です。

サーチ :


 最新の記事
 複数置換のマクロ

 リンク
 神崎へメール
 私立杜守図書館
 蔵書リスト

 

   

 ブログ内記事検索:
 
 AND OR  


Back to Home...

[管理用] [TOP]
shiromuku(fs6)DIARY version 2.41