ルール番号N + 0:深く掘ることを恐れないでください

背景


みなさんこんにちは! 私の名前はジェンヤで、プログラマーです。 特別なことは何もありません。 これまで。



今日、私は良い結末の話を共有したいと思います。平均以上のプログラマーであり、些細なタスクを解決しなくても、プロセスとしてのプログラミングは依然として非常にエキサイティングであると確信しました。



最も典型的なタスクの1つは、データをテキストファイルに出力することでした。 ファイル形式は、デスクトップの平均的なデバイスで開くようなものです。 私はこの問題の解決策のシンプルさを確信していました。 しかし、今週、運命は私にレッスンを教えることにしました...



物語


すべては、生活を楽にするライブラリの選択とフォーマットの選択から始まりました。 形式は、docxおよびOenTBSライブラリによって選択されました。 その中のすべてが本来のようになっているようです-ファイル形式は同じであり、テンプレートを使用できます。 しかし、3日間の作業で示されているように、ネストされた配列で動作する場合、このことはそれほど明白ではないので、おそらくこれを理解するためにいくつかの宗派に入る必要があります。 私は、最も抵抗の少ない道をたどることに決め、このライブラリについて自分の考えをモニターと共有し、別のものを探し始めました。



次はodtPHPというシンプルなツールでした 。 誰のサイトは今のところ機能していないようです。 ご想像のとおり、フォーマットはライブラリとともに変更する必要がありました-odtになりました。 本当にやりたいなら、あなたも喜ぶことができます-オープンなフォーマットとそのすべて。



そして、ここから楽しみが始まりました。 ドキュメントはテンプレートから生成されます。 LibreOfficeでテンプレートを作成した場合(つまり、私の指先で最初に作成したテンプレート)、Wordでは、回復に関する質問の後でのみテンプレートが開きます。 また、Word`eでテンプレートを作成するとどうなりますか? その後、回復せずに。 しかし、テンプレートの最小限の編集の後、odtPHPは、テンプレート内に変数が見つからなかったというエラーをスローしました。 必死に叫んで、テンプレートの変数名を指で突いても役に立ちませんでした。 変です。 つまり、目的の変数がそのままテンプレートに書き込まれていることがわかりましたが、odtPHPは正規表現でこの変数を見つけることができませんでした。



Wordのスペース/ダッシュ/その他の文字をソース自体で異なる方法で示すことができるという疑念が忍び寄ってきました。 docxのようなodtは単にアーカイブされたXMLであることがわかっていたので、この問題を掘り下げることを決め、自信のためにGoogleドライブで同じodtテンプレートを作成しました。 さまざまな「作成者」からodtファイルを解凍すると、次の図が表示されます。



画像








フォーマットがフォーマットであることが明らかになりましたが、プログラムはそれを異なる見方をしている可能性があります。 ご想像のとおり、ファイルのすべてのコンテンツはcontent.xmlに保存されます。 開けます。 変数を探しています。 そして、lo! 私は正しい軌道に乗っています! これは私の変数がWord`e(Word`eで作成されたバリアント)でどのように見えるかです:



画像








したがって、このフラグメントはcontent.xmlにあります。



画像








そして、正規表現は可能な限りシンプルでした:



$reg = '@\[!--\sBEGIN\s' . $string . '\s--\](.*)\[!--.+END\s' . $string . '\s--\]@smU';







<text:s />とは何ですか? これはスペースだと思うかもしれませんが、なぜここに挿入され、他の場所にはスペースだけが挿入されたのですか? 明確ではありません。 Wordでこのような魔法のスペースの配置を予測することはできませんでした。 そのため、Wordはどこかにスペースをスペースとして挿入し、<text:s />のように、最小限のテンプレートで変数を見つけることを中断することがわかりました。



そのため、些細な作業は、odt形式の構造を介したかなり魅力的な旅に変わりました!



道徳


あなたがどんなレベルの知識を持っているか、そしてあなたのスキルの評価がどれほど低くなくても、深く掘り下げることを恐れないでください! もちろん、あなたが掘削機の運転者ではなく、「掘削禁止」という標識が近くにない限りは。



PSクールな開発者から先史時代史モラルの形式でそのような物語を読むことは非常に興味深いでしょう。



All Articles