ゲームばっかりな日記だったやつ

半分跡地みたいなもの。書くネタは無い。

文字列置換

ここ数日の流れの話が分かる人なら、理由は大体分かってしまいそうなものだけど。今、文字列置換を行う必要があり、色々と苦難の連続でございます。というのも、文章だとちょっと複雑になると思うけれど、

    1. ファイル名がURLエンコードされている
    2. ファイル内でのリンク先も、同様にURLエンコードされている
    3. 文字コードEUC-JP
    4. URLエンコードEUC-JP
    5. しかし、テキストデータから文字列自動抽出・URLデコードできるソフトを見つけても、どれもEUCではデコードできない(そのまま変換しても文字が化ける)
    6. 中身がXMLなので、無理やり拡張子をHTMLにすると、ブラウザの文字コード自動認識がXMLタグ部分の文字エンコード方式を読んでくれず、勝手にShiftJISになってしまう
    7. そのためだけに、先にファイル自体をEUC→ShiftJIS変換すると、今度はEUCのURLデコード部分で問題が出そう(ここは微妙)

こんな流れで苦戦中。とりあえずファイル名だけは完全に解決した。
その中で、正規表現なんかももちろん使うのだけど、URLエンコードされた文字列を特定することは容易いものの、それをデコードするような機能が正規表現には一切存在しないらしいことが非常に勿体無い。しかし、その文字列特定も

    • (%..)*

のように文字列指定でしかなく、具体的に16進数をHITさせる書き方にするのは面倒くさいので、不完全になってしまう。

    • (%(0-9|A-F)(0-9|A-F))*

みたいな書き方なら良いのかもしれないけど、面倒くさいだけでなく、そもそも多重の括弧を設定できるのかが怪しい。今使っているDevasというソフトの場合は少なくとも、括弧の出てきた順番を数字として書き、それを「元の記述のまま置換する(=置換せずその部分だけそのまま)」という処理で、とりあえずaタグのhrefにhtmlの拡張子をつけた、という使い方をしていた。ただ自分は、正規表現をちゃんと学んだことが一切なく、ソフトのヘルプ等による独学なので、正しい書き方を守ってないかもしれない(そこが「少なくともこのソフトの場合は」の理由)。
実際使った表記は、具体的にはまず「拡張子なしのリンク先を、無理やりhtmlファイルにしたものに書き換える」という作業であり、

    • <a href="(%..)([^"]*)" title="
    • <a href="\1\2.html" title="

みたいな書き方のごり押し。二つ目の括弧はうろ覚え、*の位置と[]の使い方がこうだったかは不明。その上、この弄っているhtmlファイルの書き方がたまたまこうだっただけで、例えばダブルクオートを省略してるなど、条件違えば当然検索文字も大幅に異なるので、真似だけしても失敗します(同じ書き方だとヒットしなくなる)。何でもかんでも、この検索文字・置換文字で同じ結果が出るわけでは無い。当たり前だが。
まあ、とりあえず拡張子付加には成功したのだけど、これも「0〜9」と「A〜F」を個別に無理やりHITさせているだけであり、本当は10進数検索の\D(Dec)に対して\H(Hex)みたいな16進数検索ができればスマートなのだけど、まあ希望を叶えられただけマシか。
まあここまで書いておいて何だが、問題はそこじゃなく、置換表現のほうが大きい。URLデコードを行う場合、「%xx」というような符号から文字コードを取得し、そのコードの文字を新たに生成した上で、それに取って代わられた元の文字列「%xx」の羅列は破棄することになる。つまり、文字コードから文字列を生成し、置換に充てることができる表現が正規表現に無いと、そもそも正規表現でデコードを行うことは不可能。ここが目下、今回の作業における一番の問題である。これさえできれば、とりあえずリンクでファイルを繋ぐ点だけならすぐに解決するのだが。
まあ、スタイルシートスクリプトは、フォルダ構造を理解するには中身を観ないといけない。ので、ローカルでの完全復元は諦めた。然るに、上記の問題さえ解決すれば、とりあえず実用上困ることの無い復元は達せられるということになるので、ここだけは何とかしたいと思うのだが、なかなか難しそうだ。
・・・どうにかならんかなぁ。自作でツールとか無理。プログラムでの外部ファイル読み書きとか、一回二回くらいしかやったこと無いので(できるんだろうけど、慣れるまで何度もコーディング練習しないと、書き込みでファイル自体を壊しそう)。しかもその一回二回の経験は、固定長のデータを羅列したテキストファイルから、機械的にデータを読み込むだけのもの、書き出しは一切なし。無理。
とりあえず、この問題に光が見えるまでは保留。おやすみなさい。