質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Word

Microsoft WordはMicrosoftが開発した業務用の文書生成用のソフトウェアです。

置換

置換とは文字列中の特定の文字に対して、別の文字列に置き換えることを指します。

Q&A

解決済

2回答

2244閲覧

特定文字列を全て置換するのではなく、「置換しない→置換しない→置換しない→置換する→置換しない」 のようにループして処理する方法はありますでしょうか。

gugupoo

総合スコア31

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Word

Microsoft WordはMicrosoftが開発した業務用の文書生成用のソフトウェアです。

置換

置換とは文字列中の特定の文字に対して、別の文字列に置き換えることを指します。

0グッド

0クリップ

投稿2016/04/07 10:48

以下のような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つ目を置換、と
こういった置換をする方法はございますでしょうか・・
よろしくお願い致します;

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

プログラム書いてみました。ブラウザで開いていただければすぐ使えます。
以下の手順に沿って進めてみてください。

  1. HTML内のコードをテキストエディタにコピペ。
  2. ファイル名をindex.htmlにして保存
  3. ダブルクリックでそのファイルを開く(ブラウザが立ち上がります)
  4. 各項目を埋めて「置換スタート」ボタンを押す

以上です。

html

1<!DOCTYPE html> 2<html lang="ja"> 3 <head> 4 <title>テキストの置換</title> 5 <meta charset="utf-8"> 6 </head> 7 <body> 8 <h1>テキストの置換</h1> 9 <p> 10 置換前<br> 11 <textarea id="before" rows="8" cols="40"></textarea> 12 </p> 13 <p> 14 置換したい文字列<br> 15 <input type="text" id="target" value=""> 16 </p> 17 <p> 18 追加したい文字列<br> 19 <input type="text" id="add" value=""> 20 </p> 21 <p> 22 何文字置きに置換する?(数字)<br> 23 <input type="number" id="number" value=""> 24 </p> 25 <p> 26 <input type="submit" id="submit" value="置換スタート"> 27 </p> 28 <p> 29 置換後<br> 30 <textarea id="after" rows="8" cols="40"></textarea> 31 </p> 32 33 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script> 34 <script> 35 36 var gv; 37 jQuery(function(){ gv.replaceText(); }); 38 39 (function(gv,$) 40 { 41 gv.replaceText = function() 42 { 43 var r = new Replace( 44 { 45 before:{element:"#before",errorMsg:"「置換前」が空だよ\n"}, 46 target:{element:"#target",errorMsg:"「置換したい文字列」が空だよ\n"}, 47 add:{element:"#add",errorMsg:"「追加したい文字列」が空だよ\n"}, 48 number:{element:"#number",errorMsg:["「何文字置きに置換する?(数字)」が空だよ","「何文字置きに置換する?(数字)」の数字がおかしいよ。整数で正の数のみだよ。"]}, 49 after:"#after" 50 }); 51 52 $("#submit").on("click",function(){r.clickSubmit()}); 53 54 55 function Replace(el) 56 { 57 this.el = {}; 58 this.el.before = new Elm(el.before); 59 this.el.target = new Elm(el.target); 60 this.el.add = new Elm(el.add); 61 this.el.number = new Elm(el.number); 62 this.el.errorCheckEl = ['before','target','add','number']; 63 this.el.errorCheckElLength = 4; 64 this.el.after = $(el.after); 65 } 66 67 Replace.prototype.clickSubmit = function() 68 { 69 var value = [],replaceValue = { value:"",replaceCount:0 }; 70 if(this.valueCheck()) return; 71 value = this.el.before.getVal().split(this.el.target.getVal()); 72 if(value.length <= 1) { alert("「置換したい文字列」で指定した「" + this.el.target.getVal() + "」は「置換前」にないよ"); return; } 73 replaceValue = this.replace({ resultAry:value }); 74 this.showReplaceValue(replaceValue); 75 }; 76 77 Replace.prototype.valueCheck = function() 78 { 79 var error = []; 80 for (var i = 0; i < this.el.errorCheckElLength; i++) 81 { 82 this.el[this.el.errorCheckEl[i]].setVal(); 83 if(this.el[this.el.errorCheckEl[i]].isError()) error.push(this.el[this.el.errorCheckEl[i]].getErrorMsg()); 84 } 85 if(error.length > 0){ alert(error.join("")); return true; } 86 else return false; 87 }; 88 89 Replace.prototype.replace = function(v) 90 { 91 var temp = {value:"",replaceCount:0}, 92 length = v.resultAry.length; 93 for (var i = 0; i < length; i++) 94 { 95 temp.value += v.resultAry[i]; 96 if(i === length - 1) break; 97 temp.value += this.el.target.getVal(); 98 if((i + 1) % this.el.number.getVal() === 0) 99 { 100 temp.value += this.el.add.getVal(); 101 temp.replaceCount++; 102 } 103 } 104 return temp; 105 }; 106 107 Replace.prototype.showReplaceValue = function(v) 108 { 109 this.el.after.val(v.value); 110 alert(v.replaceCount + "個の「" + this.el.target.getVal() + "」を「" + this.el.target.getVal() + this.el.add.getVal() + "」に置換しました。"); 111 }; 112 113 function Elm(e) 114 { 115 this.el = $(e.element); 116 this.errorTxt = e.errorMsg; 117 this.val = ""; 118 this.error = null; 119 } 120 Elm.prototype.setVal = function(){ this.val = this.el.val(); }; 121 Elm.prototype.getVal = function(){ return this.val; }; 122 Elm.prototype.isError = function() 123 { 124 this.error = null; 125 if(Array.isArray(this.errorTxt)) 126 { 127 //only number 128 if(this.val === "") this.error = this.errorTxt[0]; 129 else if(isNaN(this.val) || this.val < 0 || Math.round(this.val) != this.val) this.error = this.errorTxt[1]; 130 }else if(this.val === "") this.error = this.errorTxt; 131 132 return (this.error != null) ? true : false; 133 }; 134 Elm.prototype.getErrorMsg = function(){ return this.error; }; 135 136 }; 137 138 })(gv || (gv = {}),jQuery); 139 </script> 140 </body> 141</html>

投稿2016/04/07 13:04

編集2016/04/07 16:59
IShix

総合スコア1724

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gugupoo

2016/04/07 14:05

プログラム自体をテストさせて頂きました! 記述したソースの ~~~~~~~~~~<br>~~~~~~~ のものから、そして 実際のhtmlソースもこちらのプログラムを用いて実践させて頂きましたところ、 一発で完全に希望通りの置換が出来ました!!!! Webページ上でこのような置換ができて、感謝してもしきれません!!! 本当に有難うございました!!!!!!!!!
guest

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

投稿2016/04/07 11:58

takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gugupoo

2016/04/07 14:02

有難うございました! 私、エクセルのプログラムでも、フリーソフトでも、と言っておきながら、 調整等できなく、こちらのソースコードをどのように生かしていいか模索しておりました。 しかし大きく勉強することができました、有難うございました!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問