これを解決するために利用できるより良いツールがあります。しかし、それはWindowsのバッチで可能です!
以下のテキストがTEMPLATE.HTMLという最も外側のテンプレートファイルであるとします。内容のトリガ行はインデントすることができますが、このソリューションではトリガの後に余分な文字は使用できません。 (この制限は解決できるが、それは物事が遅くなります)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Sample template for building a page</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
</head>
<body>
<div id="content">
</div>
</body>
</html>
(CONTENT_HTML.TXT命名)以下のサンプルコンテンツファイルが!VARNAMEとして指定された変数が含まれています!バッチファイルは遅延置換を使用して変数置換を実行します。つまり、コンテンツに感嘆符を含めるには、何らかの形でエンコードする必要があります。 2つの選択肢があります。 1つは、HTML文字表記&#33を使用することです。これはテキストコンテンツでうまく動作しますが、HTMLコメントが必要な場合は機能しません。コメントのために私は!X!変数はに拡大されます!
最後に、すべてをまとめてFINAL.HTMLという名前の出力ファイルを作成するバッチファイルがあります。私は変数の値をハードコーディングしましたが、引数として渡すことは簡単です。
@echo off
setlocal enableDelayedExpansion
set X=^^^!
set TITLE=Sample HTML build
set DATE=%date%
set AUTHOR=Santa Clause
set TEMPLATE="template.html"
set CONTENT="content_html.txt"
set FINAL="final.html"
<%TEMPLATE% (
for /f %%A in ('type %TEMPLATE%^|find /c /v ""') do (
for /l %%N in (1 1 %%A) do (
set "ln="
set/p "ln="
echo(!ln!
set "test=!ln:*<=<!"
if "!test!"=="<div id="content">" (
for /f "usebackq delims=" %%L in (%CONTENT%) do echo(%%L
)
)
)
)>%FINAL%
いくつかの制限が
- 空行(空白しか含んでいない行)は、コンテンツ部分から削除されます。このソリューションであります。おそらくHTMLの問題ではないでしょう。この制限を解消すると、ソリューションが複雑になり、速度が遅くなります。
- で始まる行。コンテンツ部分から削除されます。この制限は簡単に削除されますが、コードは醜いです。最後のFOR/FループでEOL文字として<LF>と指定する必要があります。
- テンプレートファイルでは、Windows改行規格<CR> <LF>を使用する必要があります。 <LF>を使用したUnix形式のファイルは、この解決策では失敗します。これも解決することができますが、やはりそれは複雑化し、物事を遅らせるでしょう。
- 前述のとおり、テンプレートのコンテンツトリガーには先頭のスペースが含まれますが、その行には末尾に文字はありません。この制限を解除すると、処理が遅くなります。
- 行は何のバリエーションと、
- 末尾の制御キャラクタは、どの入力所与
テンプレートの各行た言語で、から剥離されるテンプレートに1024文字に制限されて?それがUnixシステム上のファイルの束ならば、 'man sed'またはPerlかもしれません。 – tripleee
スクリプトや、行を自動的に見つけてその変数を下に置くようなものが必要ですか? –
umm ...私はバットでこれを作りたい、それはかなりシンプルだけど、ここでCプログラムを投稿すれば、私はそれと戦わないだろう。そして、私はhtmlファイルを編集したいと思っています...すべてがタイトルにあります。 –