文字列の置換についての質問です。

以下のような記述のhtmlファイルが数百あります。

==
【山田太郎の日記】
こんにちは。私の名前は○○です。
==
という内容の「yamadatarou.html」

==
【佐藤花子の日記】
はじめまして。私の名前は○○です。
==
という内容の「satouhanako.html」などなど。

各ファイルの○○の部分を【××の日記】の××に置換して
「yamadatarou.html」は「私の名前は山田太郎です。」に、
「satouhanako.html」は「私の名前は佐藤花子です。」
という結果にしたいのですが、数百のファイルを一括で置換するにはどのような方法があるでしょうか?

一括置換ソフトでワイルドカードを使った置換をしようと思ったのですが、「こんにちは。」「はじめまして。」の部分がファイルごとにすべて違うため、できなそうです。

ご回答よろしくお願いしますm(_ _)m

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2011/06/21 20:42:25
  • 終了:2011/06/25 00:35:10

ベストアンサー

id:ku__ra__ge No.1

ku__ra__ge回答回数118ベストアンサー獲得回数402011/06/21 21:36:52

ポイント100pt

以下の内容を「conv.js」というファイル名で保存して、変換したいhtmlファイルが置いてあるフォルダに「conv.js」を移動させてからダブルクリックしてみてください。

うまく動作すれば「おしまい」というメッセージが出てきて、自動的に作成された「convert」というフォルダ内に変換した結果のファイルが保存されます。

var fso = new ActiveXObject("Scripting.FileSystemObject");
fso.CreateFolder("./convert");

var fe = new Enumerator(fso.GetFolder("./").Files);

for (; !fe.atEnd(); fe.moveNext()) {
	var f = fe.item();
	
	if (!f.Name.match(/\.html$/)) continue;

	var ts = fso.OpenTextFile(f.Path);
	var text = ts.ReadAll();
	ts.Close();

	text.match(/【(.*?)の日記】/);
	var name = RegExp.$1;
	var convText = text.replace(/私の名前は.*?です。/g, "私の名前は" + name + "です。");

	var ts = fso.OpenTextFile("./convert/" + f.Name, 2, true);
	ts.Write(convText);
	ts.Close();
}

WScript.Echo("おしまい");
id:boku-harold

ありがとうございます。

ご回答いただいたとおりやってみたところ、

「おしまい」というメッセージとともに「covert」フォルダにファイルが生成されましたが、

置換は行われず、なぜか以下のように日本語の大部分が文字化けしてしまいました。

--

【山田太郎�E日記、E

こんにちは。私�E名前は○○です、E

--

何か原因はわかりますでしょうか?

ちなみにMacOS Xでは動作せず、Win 7環境では動作しました。

実際のファイルは上記の文章だけではなく、もっと長い文章のファイルです。

2011/06/23 00:58:13
  • id:Cherenkov
    OSは?rubyやperlでもいいですか?
  • id:boku-harold
    WinでもMacでも大丈夫です。
    rubyやperlはまったくわかりません。。。
  • id:ku__ra__ge
    すみません。動作環境について書いていませんでしたが、投稿したスクリプトはWindowsの機能を利用したものなので、Mac環境では動作しません。
    また文字化けの原因は、テキストファイルの文字コードがshift-jisではないことが原因だと思われます。

    文字コード一括変換ソフトで、いったん文字コードをshift-jisに変換してから処理することで文字化けしなくなると思います。
    http://www.kashim.com/kanjitranslator/index.html
  • id:boku-harold
    ku__ra__geさま

    Shift-jisに変換したところ、うまく動作しました!
    ありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません