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

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

ただいまの
回答率

90.48%

  • VBA

    1868questions

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

  • Excel

    1599questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

  • Word

    84questions

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

  • 置換

    40questions

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

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

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 1,349

gugupoo

score 9

以下のような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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

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

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

以上です。

<!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>

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/07 23:05

    プログラム自体をテストさせて頂きました!
    記述したソースの
    ~~~~~~~~~~<br>~~~~~~~
    のものから、そして
    実際のhtmlソースもこちらのプログラムを用いて実践させて頂きましたところ、

    一発で完全に希望通りの置換が出来ました!!!!

    Webページ上でこのような置換ができて、感謝してもしきれません!!!

    本当に有難うございました!!!!!!!!!

    キャンセル

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 23:02

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

    キャンセル

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

  • ただいまの回答率 90.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • VBA

    1868questions

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

  • Excel

    1599questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

  • Word

    84questions

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

  • 置換

    40questions

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

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