特定文字列を全て置換するのではなく、「置換しない→置換しない→置換しない→置換する→置換しない」 のようにループして処理する方法はありますでしょうか。
解決済
回答 2
投稿
- 評価
- クリップ 0
- VIEW 1,936
以下のようなhtmlソースを一括で「挿入」もしくは「置換」できるようなプログラムを探しております。。
~~~~~~~~~~<br>~~~~~~~~~~~~~~<br>~~~
~~~~~~~~~~~~~~~~~~<br>~~~<br>~~~~~~
~~~~~~~<br>~~~~~~~~<br>~~~~~~~~~~~~
~~~~~<br>~~~~~~~~~<br>~~~~~~~~<br>~~~
~~~~~~~~<br>~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~<br>~~~~~<br>~~~<br>~~~~~~
~~~<br>~~~~~~~~<br>~~~~~~~~~~~~~~~~
~~~~~~~~~~<br>~~~<br>~~~~~<br>~~~~~~~
例えばこういったhtmlソースがあったとしまして、( ~~~~は適当なhtmlタグ)
これを以下のように一括で置換するような方法を探しております。。
~~~~~~~~~~<br>~~~~~~~~~~~~~~<br>~~~
~~~~~~~~~~~~~~~~~~<br>~~~<br><aaaa>~~~
~~~~~~~<br>~~~~~~~~<br>~~~~~~~~~~~~
~~~~~<br>~~~~~~~~~<br><aaaa>~~~~~~~~<br>
~~~~~~~~<br>~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~<br>~~~~~<br><aaaa>~~~<br>~~~
~~~<br>~~~~~~~~<br>~~~~~~~~~~~~~~~~
~~~~~~~~~~<br><aaaa>~~~<br>~~~~~<br>~~~~
<br>という文字列があった場合に
全ての<br>を<br><aaaa> にするのではなく
4つ目の<br>ごとに<br><aaaa>と、置換する具合です。
挿入、でも置換でも、
エクセルのプログラムでも、
何らかのフリーソフトでも構いません;
全ての文字列を置換、でなく
3つ飛ばして4つ目を置換、再度3つ飛ばして4つ目を置換、と
こういった置換をする方法はございますでしょうか・・
よろしくお願い致します;
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+1
プログラム書いてみました。ブラウザで開いていただければすぐ使えます。
以下の手順に沿って進めてみてください。
- HTML内のコードをテキストエディタにコピペ。
- ファイル名をindex.htmlにして保存
- ダブルクリックでそのファイルを開く(ブラウザが立ち上がります)
- 各項目を埋めて「置換スタート」ボタンを押す
以上です。
<!DOCTYPE html>
<html lang="ja">
<head>
<title>テキストの置換</title>
<meta charset="utf-8">
</head>
<body>
<h1>テキストの置換</h1>
<p>
置換前<br>
<textarea id="before" rows="8" cols="40"></textarea>
</p>
<p>
置換したい文字列<br>
<input type="text" id="target" value="">
</p>
<p>
追加したい文字列<br>
<input type="text" id="add" value="">
</p>
<p>
何文字置きに置換する?(数字)<br>
<input type="number" id="number" value="">
</p>
<p>
<input type="submit" id="submit" value="置換スタート">
</p>
<p>
置換後<br>
<textarea id="after" rows="8" cols="40"></textarea>
</p>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>
<script>
var gv;
jQuery(function(){ gv.replaceText(); });
(function(gv,$)
{
gv.replaceText = function()
{
var r = new Replace(
{
before:{element:"#before",errorMsg:"「置換前」が空だよ\n"},
target:{element:"#target",errorMsg:"「置換したい文字列」が空だよ\n"},
add:{element:"#add",errorMsg:"「追加したい文字列」が空だよ\n"},
number:{element:"#number",errorMsg:["「何文字置きに置換する?(数字)」が空だよ","「何文字置きに置換する?(数字)」の数字がおかしいよ。整数で正の数のみだよ。"]},
after:"#after"
});
$("#submit").on("click",function(){r.clickSubmit()});
function Replace(el)
{
this.el = {};
this.el.before = new Elm(el.before);
this.el.target = new Elm(el.target);
this.el.add = new Elm(el.add);
this.el.number = new Elm(el.number);
this.el.errorCheckEl = ['before','target','add','number'];
this.el.errorCheckElLength = 4;
this.el.after = $(el.after);
}
Replace.prototype.clickSubmit = function()
{
var value = [],replaceValue = { value:"",replaceCount:0 };
if(this.valueCheck()) return;
value = this.el.before.getVal().split(this.el.target.getVal());
if(value.length <= 1) { alert("「置換したい文字列」で指定した「" + this.el.target.getVal() + "」は「置換前」にないよ"); return; }
replaceValue = this.replace({ resultAry:value });
this.showReplaceValue(replaceValue);
};
Replace.prototype.valueCheck = function()
{
var error = [];
for (var i = 0; i < this.el.errorCheckElLength; i++)
{
this.el[this.el.errorCheckEl[i]].setVal();
if(this.el[this.el.errorCheckEl[i]].isError()) error.push(this.el[this.el.errorCheckEl[i]].getErrorMsg());
}
if(error.length > 0){ alert(error.join("")); return true; }
else return false;
};
Replace.prototype.replace = function(v)
{
var temp = {value:"",replaceCount:0},
length = v.resultAry.length;
for (var i = 0; i < length; i++)
{
temp.value += v.resultAry[i];
if(i === length - 1) break;
temp.value += this.el.target.getVal();
if((i + 1) % this.el.number.getVal() === 0)
{
temp.value += this.el.add.getVal();
temp.replaceCount++;
}
}
return temp;
};
Replace.prototype.showReplaceValue = function(v)
{
this.el.after.val(v.value);
alert(v.replaceCount + "個の「" + this.el.target.getVal() + "」を「" + this.el.target.getVal() + this.el.add.getVal() + "」に置換しました。");
};
function Elm(e)
{
this.el = $(e.element);
this.errorTxt = e.errorMsg;
this.val = "";
this.error = null;
}
Elm.prototype.setVal = function(){ this.val = this.el.val(); };
Elm.prototype.getVal = function(){ return this.val; };
Elm.prototype.isError = function()
{
this.error = null;
if(Array.isArray(this.errorTxt))
{
//only number
if(this.val === "") this.error = this.errorTxt[0];
else if(isNaN(this.val) || this.val < 0 || Math.round(this.val) != this.val) this.error = this.errorTxt[1];
}else if(this.val === "") this.error = this.errorTxt;
return (this.error != null) ? true : false;
};
Elm.prototype.getErrorMsg = function(){ return this.error; };
};
})(gv || (gv = {}),jQuery);
</script>
</body>
</html>
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
VBScript になりますが、こんな感じでどうでしょう。
細かいとこは調整が必要かと思いますが…
Set obj = WScript.CreateObject("Scripting.FileSystemObject")
Set inp = obj.OpenTextFile("xxx.html", 1)
Set outp = obj.OpenTextFile("out.html", 2, True)
str = inp.ReadLine
ary = Split(str, "<br>")
i = 0
For Each x in ary
If (i + 1) Mod 5 = 0 Then
ary(i) = "<aaaa>" + ary(i)
End If
i = i + 1
Next
outp.WriteLine Join(ary, "<br>")
inp.Close
outp.Close
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.36%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2016/04/07 23:05
記述したソースの
~~~~~~~~~~<br>~~~~~~~
のものから、そして
実際のhtmlソースもこちらのプログラムを用いて実践させて頂きましたところ、
一発で完全に希望通りの置換が出来ました!!!!
Webページ上でこのような置換ができて、感謝してもしきれません!!!
本当に有難うございました!!!!!!!!!