2011-08-08 2 views
0

私はこれを数時間苦労していますが、正しく動作するようにはできません。私は何をしたいと、それは可能ですバッチでhtmlの行を見つけて、その下にテキストを追加してください

<div class="post"> 
    <h2 class="title"><a href="#">**var**</a></h2> 
    <p class="meta"><span class="date">**var**</span> 
    <span class="posted">Posted by <a href="#">**var**</a></span></p> 
    <div style="clear: both;"> 
     &nbsp; 
    </div> 
    <div class="entry moreless"> 
     **var** 
    </div> 
</div> 

のようないくつかの変数が含まれている行

<div id="content"> 

を見つけて、その下の数行を追加しているのですか?もしそうなら、どのように?

--David

+0

テンプレートの各行た言語で、から剥離されるテンプレートに1024文字に制限されて?それがUnixシステム上のファイルの束ならば、 'man sed'またはPerlかもしれません。 – tripleee

+0

スクリプトや、行を自動的に見つけてその変数を下に置くようなものが必要ですか? –

+0

umm ...私はバットでこれを作りたい、それはかなりシンプルだけど、ここでCプログラムを投稿すれば、私はそれと戦わないだろう。そして、私はhtmlファイルを編集したいと思っています...すべてがタイトルにあります。 –

答えて

2

これを解決するために利用できるより良いツールがあります。しかし、それは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% 

いくつかの制限が

  1. 空行(空白しか含んでいない行)は、コンテンツ部分から削除されます。このソリューションであります。おそらくHTMLの問題ではないでしょう。この制限を解消すると、ソリューションが複雑になり、速度が遅くなります。
  2. で始まる行。コンテンツ部分から削除されます。この制限は簡単に削除されますが、コードは醜いです。最後のFOR/FループでEOL文字として<LF>と指定する必要があります。
  3. テンプレートファイルでは、Windows改行規格<CR> <LF>を使用する必要があります。 <LF>を使用したUnix形式のファイルは、この解決策では失敗します。これも解決することができますが、やはりそれは複雑化し、物事を遅らせるでしょう。
  4. 前述のとおり、テンプレートのコンテンツトリガーには先頭のスペースが含まれますが、その行には末尾に文字はありません。この制限を解除すると、処理が遅くなります。
  5. 行は何のバリエーションと、
  6. 末尾の制御キャラクタは、どの入力所与
+0

いいね!私たちはすでにPHPで作成していますが、reeeaaallly遅いので、これは良い解決策になります:)。私は後でこれを試してみたいものを勉強しなければならない。後で1か月以内に答えるのは申し訳ありませんが、私は何か質問がありませんので、私はチェックされたstackoverflowを少しhaventしています。 –

+0

@DavidDebnarコードを変更しました。ブランク行が正しく処理されるように、 'set \ p'で読み込む前に重要な' set "ln =" 'を追加しました。 – dbenham

関連する問題