« LINEアカウント乗っ取りの頻発 | メイン | 平城京天平祭 2014/8/31 »

htmlのメニュー部分を一斉編集する

ページがstaticなhtmlでできていて、MovableTypeのような動的な生成でない場合、メニューバーの編集は手で一つ一つ実施していたら日が暮れます。たとえば、http://animelocations.iza-yoi.netの場合、staticなhtmlが130あり、すべてのhtmlにメニューバーが記載されています。

通常、このようなメニューバーを編集する場合、テキストを一括置換するソフトを使用します。
試しに、animelocations上のメニューバーを一括編集するツールを作成したときのメモです。
私のサイトの場合は、「<div id="menu">」~「</div>」のタグで指定された部分がメニュー部分なので、その箇所を指定した文字列へ置き換える処理で作成しましたが、ほかの構造やテキスト置換ツールでも動作原理は基本的に同じかと思います。

【フォルダを選択するダイアログを表示する】

// フォルダを選択するダイアログを表示する
public string BrowseDialog()
{
FolderBrowserDialog fbd = new FolderBrowserDialog();

fbd.Description = "フォルダを指定。";

fbd.RootFolder = Environment.SpecialFolder.Desktop;


fbd.ShowNewFolderButton = true;


if (fbd.ShowDialog(this) == DialogResult.OK)
{
return fbd.SelectedPath;
}
else
{
return "";
}

【指定ディレクトリ直下のファイル一覧をlistBoxへ登録する】

void registerToListbox(string dir)
{
string[] files = Directory.GetFiles(dir);
foreach (string s in files)
{
if (s.IndexOf(".html") != -1)
{
listBoxFiles.Items.Add(s);
}
}
}


【指定htmlファイルのメニュー部分を表示】

if (listBoxFiles.Items.Count < 1)
{
return "";
}

string path = (string)listBoxFiles.Items[0];


System.IO.StreamReader sr = new System.IO.StreamReader(
path,
System.Text.Encoding.GetEncoding("utf-8"));
//内容をすべて読み込む
string s = sr.ReadToEnd();
//閉じる
sr.Close();

int start = s.IndexOf("

");
int end = s.IndexOf("
", start) + 6;

s = s.Substring(start, end - start);

return s;


【htmlのメニュー部分へメニュー要素を書き込む】

private void writeEachHtml(){
if (listBoxFiles.Items.Count < 1)
{
return;
}

string path;
String s;
System.IO.StreamReader sr;

for (int i = 0; i < listBoxFiles.Items.Count; i++)
{
path = (string)listBoxFiles.Items[i];

//MessageBox.Show(path + " を処理します");

sr = new System.IO.StreamReader(
path,
System.Text.Encoding.GetEncoding("utf-8"));
//内容をすべて読み込む
s = sr.ReadToEnd();
//閉じる
sr.Close();

int start = s.IndexOf("

");
int end;
if (start == -1)
{
//MessageBox.Show((string)listBoxFiles.Items[i] + "は無視します");
end = 0;
}
else
{
end = s.IndexOf("
", start) + 6;
}

if (end != 0)
{

s = s.Substring(0, start) + txtMenuString.Text + s.Substring(end, s.Length - end);


//書き込むファイルが既に存在している場合は、上書きする
System.IO.StreamWriter sw = new System.IO.StreamWriter(
path,
false,
System.Text.Encoding.GetEncoding("utf-8"));
//TextBox1.Textの内容を書き込む
sw.Write(s);
//閉じる
sw.Close();
}
}
}


トラックバック

このエントリーのトラックバックURL:
http://www.ddhost.jp/mt/mt-tb.cgi/911

About

2014年08月30日 22:25に投稿されたエントリーのページです。

ひとつ前の投稿は「LINEアカウント乗っ取りの頻発」です。

次の投稿は「平城京天平祭 2014/8/31」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。