プロが教える店舗&オフィスのセキュリティ対策術

フォルダ内の文字列を一括で置き換えたいたいと思っております。


ファイル1
■さんこんにちは★

ファイル2
■さんこんにちは★

ファイル3
■さんこんにちは★




■の部分は名前毎に違いますので全て同じ置き換えが出来ないのが現状です。

上記の形式でHTMLファイルが多数製作済みであります。
名前(ページ毎)に現在は置き換えておりますが一括で置き換える方法を知っている方がおりましたら是非お教え頂ければと思います。

私のイメージ的にはエクセルの1列目にファイル名、2列目に検索文字、3列目に置き換え文字を置き一括でファイル内に反映がさせれればベストなのですが・・・

宜しくお願い致します。

A 回答 (7件)

★注意点。

→回答順に合併して下さい(No.5が前編、No.6が後編)
・1ファイルに複数の文字列を置換するとき、その定義順序に気をつけて下さい。
 置換1個目『a』⇒『1』
 置換2個目『aa』⇒『2』
 置換3個目『aaa』⇒『3』
 のデータの場合は、
 間違い⇒『ファイル名,a,1,aa,2,aaa,3』
 正しい⇒『ファイル名,aaa,3,aa,2,a,1』
 とします。→わかりますか?順序。
・なぜ、このような順序になるかというと『置換処理』を行単位で行うときに、
 『置換1個目』→『置換2個目』→『置換3個目』の順に3回置換を繰り返します。
・このことから間違った定義(上記)をすると次のような動作になります。
 置換前のデータは『a aa aaa』とします。
 1回目⇒『1 11 111』
 2回目⇒『1 11 111』
 3回目⇒『1 11 111』
・正しい定義(上記)の場合は
 1回目⇒『a aa 3』
 2回目⇒『a 2 3』
 3回目⇒『1 2 3』
・となります。
 変換後の文字列が次の検索文字列と重なる場合に順序や文字列を考えなければいけないのです。

●csvの定義例
sample1.html,あ,ア,い,イ,う,ウ,え,エ,お,オ
sample2.html,か,カ,き,キ,く,ク,け,ケ,こ,コ
sample3.html,さ,サ,し,シ,す,ス,せ,セ,そ,ソ

●置換説明
・sample1.html は『あ』行の文字をカタカナに変換します。
・sample2.html は『か』行の文字をカタカナに変換します。
・sample3.html は『さ』行の文字をカタカナに変換します。
・以上。おわり。→最初に置換テストを行って、必ず動作確認をして下さい。
    • good
    • 0

'ループ部


Function ReplaceList(strFile,strBase,strPath)
nNow = 0
nMax = 0
Set objList = objFS.OpenTextFile(strFile,1)

Do Until objList.AtEndOfStream
aryList = Split(objList.ReadLine,",")
'ダブル・クォーテーションを削除
For n=0 To UBound(aryList)
If Asc(aryList(n))=34 Then
aryList(n) = Mid(aryList(n),2,Len(aryList(n))-2)
End If
Next
strInFile = strBase & "\" & aryList(0)
strOutFile = strPath & "\" & aryList(0)
If ReplaceSub(strInFile,strOutFile,Int((n-1)/2),aryList) Then
nNow = nNow + 1
End If
nMax = nMax + 1
Loop
objList.Close

If nMax=0 Then
ReplaceList = "定義ファイル(csv)のデータが空でした。"
ElseIf nNow=0 Then
ReplaceList = "1ファイルも置換処理されませんでした。"
Else
strMsg = FormatPercent(nNow/nMax,1,-1,0)
ReplaceList = "置換した結果、" & nNow & "/" & nMax & " 個(" & strMsg & ")のファイルを置換しました。"
End If
End Function

'置換処理
Function ReplaceSub(strInFile,strOutFile,nMax,aryList)
If objFS.FileExists(strInFile) Then
Set objInFile = objFS.OpenTextFile(strInFile,1)
Set objOutFile = objFS.OpenTextFile(strOutFile,2,True)

Do Until objInFile.AtEndOfStream
strMsg = objInFile.ReadLine
n=1
For i=1 To nMax
StrMsg = Replace(StrMsg,aryList(n),aryList(n+1))
n = n + 2
Next
objOutFile.WriteLine( strMsg )
Loop
objOutFile.Close
objInFile.Close
ReplaceSub = 1
Else
ReplaceSub = 0
End If
End Function
    • good
    • 0

'一括置換プログラム(作成者:Oh-Orange)


boxErr = "エラー"
boxCap = "確認"
boxMsg = "一括置換プログラムをキャンセルしました。"
strFile = "ここに定義ファイルを入力して下さい。"
strBase = "ここに基準フォルダを入力して下さい。"
strPath = "ここに出力フォルダを入力して下さい。"
Set objFS = CreateObject("Scripting.FileSystemObject")

If InputDialog(1,strFile)=0 Then
MsgBox boxMsg,vbOKOnly,boxCap
ElseIf InputDialog(2,strBase)=0 Then
MsgBox boxMsg,vbOKOnly,boxCap
ElseIf InputDialog(3,strPath)=0 Then
MsgBox boxMsg,vbOKOnly,boxCap
Else
Select Case InputCheck(strFile,strBase,strPath)'0以下=エラー,0=中止,1=実行可能
Case -1
strMsg = vbCrLf & vbCrLf & strFile & vbCrLf & vbCrLf
MsgBox "定義ファイル:" & strMsg & "が見つかりません。",vbOKOnly,boxErr
Case -2
strMsg = vbCrLf + vbCrLf + strBase + vbCrLf + vbCrLf
MsgBox "基準フォルダ:" & strMsg & "が見つかりません。",vbOKOnly,boxErr
Case -3
strMsg = vbCrLf + vbCrLf + strPath + vbCrLf + vbCrLf
MsgBox "出力フォルダ:" & strMsg & "が作成できません。",vbOKOnly,boxErr
Case 0
MsgBox boxMsg,vbOKOnly,boxCap
Case Else
MsgBox ReplaceList(strFile,strBase,strPath),vbOKOnly,"置換完了"
End Select
End If

'入力部
Function InputDialog(nStep,strBuff)
Select Case nStep
Case 1
strMsg = "定義ファイルの入力(フルパス指定)"
Case 2
strMsg = "基準フォルダの入力(フルパス指定)"
Case 3
strMsg = "出力フォルダの入力(フルパス指定)"
End Select
strCap = "一括置換プログラム(STEP:" & nStep & "/4)"
strBuff = InputBox(strMsg,strCap,strBuff)

If strBuff="" Then
InputDialog = 0
Else
InputDialog = 1
End If
End Function

'チェック部
Function InputCheck(strFile,strBase,strPath)
strCap = "一括置換プログラム(STEP:4/4)"
strMsg = "定義ファイル:" & strFile & vbCrLf & _
"基準フォルダ:" & strBase & vbCrLf & _
"出力フォルダ:" & strPath & vbCrLf & vbCrLf & _
"上記が置換処理の設定です。一括置換を開始しますか?"
If MsgBox(strMsg,vbYesNo,strCap)=vbNo Then
InputCheck = 0
ElseIf Not objFS.FileExists(strFile) Then
InputCheck = -1
ElseIf Not objFS.FolderExists(strBase) Then
InputCheck = -2
ElseIf objFS.FolderExists(strPath) Then
InputCheck = 1
Else
objFS.CreateFolder(strPath)
InputCheck = 1
End If
End Function
    • good
    • 0

★1ファイルに付き数箇所の文字列を置換できるようにします。


・このため csv ファイルは次のように変更しました。
 1列目……ファイル名
 2,3列目…検索文字列1、置換文字列1
 4,5列目…検索文字列2、置換文字列2
 6,7列目…検索文字列3、置換文字列3
・上記のデータ形式になります。行単位で処理しますので、各行で列数が異なっても良い。
 つまり、『検索文字列』と『置換文字列』を必ずペアで指定すれば良いのです。
 『置換文字列』を省略して文字列の削除には対応しません。→大変ですので。
・各文字列の両端にダブル・クォーテーション(”)文字があっても、なくてもかまいません。
 ただし、必ず両端をペアで囲って下さい。→左端だけあって右端がないと動作に支障がでます。

作成方法:
・次の回答で『VBScript』のソースを紹介します。
 メモ帳などにコピー&ペーストしてから適当なファイル名『replace.vbs』に保存して下さい。
 ファイル名は自由ですが拡張子は『vbs』にして下さい。
 なお、文字数の関係で複数に分割しますので合併して下さい。
 ※保存する場所は自由です。→csv ファイルは oohara99 さんが上記を参考に用意して下さい。

使用方法:
・保存したスクリプト『replace.vbs』をダブルクリックして下さい。
・『STEP:1/4』~『STEP:4/4』のダイアログが出ますので指示通り入力して下さい。
・置換作業中は一切のメッセージを出力しませんが、全ての置換が終わると『置換完了』という
 ダイアログが表示されます。全てが終わるまでメッセージを表示しないため、時間がかかっても
 完了するまで待って下さい。→完了後、簡単な置換結果の報告ダイアログを出します。
・なお、ダイアログでのファイル名やフォルダ名は必ずフルパス名で入力して下さい。
 フルパス名とは『C:\Documents and Settings\(ユーザ名)\My Documents\New』という形式です。
 フォルダ名の最後に『\』は付けないで下さい。重要!
・csv ファイルは正しいデータが入っていると見なしてエラーチェックはしません。ここに注意!
・私の環境で動作テストした結果は正常でした。

最後に:
・スクリプトは汎用性を持たせていますので、csv ファイルを切り替えることで今後のパソコン生活に
 活用できると思います。→改変しても、配布してもかまいません。oohara99 さんの自由です。
・以上。おわり。→csv ファイル内のファイル名には、必ず拡張子も指定して下さい。今回は『html』です。
    • good
    • 0

★希望通りの『新規ファイル作成』タイプにします。


・念のためもう一度仕様を簡単に説明すると、1ファイルにつき1文字列を1つだけ置換します。
 このとき、『■』文字列を新たな『▲』文字列に置換して、新しいファイルを別フォルダに
 作成していきます。→1ファイルにつき複数・文字列を置換する場合はまた補足などして下さい。
・注意点としては『あ■ん』という『■』文字列を含む文字列は『あ▲ん』となりますので使用する
 際には気をつけて下さい。

●作成するスクリプトについて
・スクリプトを実行すると
 STEP:1/4⇒『csvファイルの入力』
 STEP:2/4⇒『基準フォルダの入力』
 STEP:3/4⇒『出力フォルダの入力』
 STEP:4/4⇒『置換確認のダイアログ』
 とたずねて来るタイプにします。
・csvファイルは1行に『ファイル名』、『検索文字列』、『置換文字列』の3要素を記述します。
 ファイル名にはパス名は付けないで下さい。→その代わりに処理する『基準フォルダ』のパスが使われます。
・基準フォルダは処理する HTML ファイルが存在するフォルダを入力します。
・出力フォルダは置換した HTML ファイルを保存するフォルダを入力します。

最後に:
・置換ファイル(HTML)のパス名がそれぞれ違う場合は処理を変更しますがどうなりますか?
・以上の使い方でよろしいですか?→『OK』なら作成します。

この回答への補足

ご連絡ありがとうございます。

記載頂いた内容で問題ございません。
出来る事でしたら1ファイルに付き数箇所を一度で変更出来ると大変助かります。

HTMLのパス名につきましては私が知識が無いためにお任せいたします。
OKですので宜しくお願い致します。

迅速なご回答大変感謝致しております。

深くお礼を申し上げます。

補足日時:2007/03/09 19:47
    • good
    • 0

★VBScript でスクリプト処理を行えば出来そうです。


・OS は Windows XP ですか?→確認!
・もしも、Windows XP ならば VBScript(ビジュアル・ベーシック・スクリプト)という
 プログラミング言語のようなもので一括置換できます。
・HTML ファイルのフォルダ構造と『csv』ファイルのデータ・イメージを簡単に補足で
 教えてくれれば作りますよ。→ぜひ作ってみたいんです。VBScript の勉強のために。
・『csv』ファイルのデータ・イメージは質問者さんの『ファイル名』、『検索文字』、
 『置き換え文字』形式でいきます。
・今考えている処理動作は、HTML ファイルに上書きするタイプと置換後のファイルを
 別のフォルダにコピーして作らせる方法の2つです。
・上書きの場合は、一時ファイルに置換した後に元のファイルに上書きするような仕組みで、
 別のフォルダにコピーする場合は、新規フォルダに同名のファイル名が作成されます。
・どちらの方法が使いやすいかを教えて下さい。
・以上。待っています。→他に要望があれば取り入れて作成します。

この回答への補足

ご回答感謝いたします。

補足情報を記載させて頂きます。

OSはWindows XPとなります。
現在作成しているページ自体はPHPでの作成となります。
作成時点で名前を変える場所を■、▲、●等の記号にしページ毎に置き換えをしております。

------------------------------------------
【ページ内一部】
<meta name="description" content="■"とは何?気になる所を簡単解説■のご紹介、商品、サービスのご紹介です。
-------------------------------------------
■の場所が大体1ページに50箇所程となります。

ファイルですが多数のファイルを一括で変えたいと思いますので動作が速い方が助かります。
希望は新規ファイル作成がベストと思います。

私の知識が低い為に解り難い場所などがございましたらご指摘頂ければ再度補足をさせて頂きます。

宜しくお願い致します。

補足日時:2007/03/09 13:11
    • good
    • 0

「こんにちわ」を「こんばんわ」にする、ということでしょうか。


以下のようなフリーソフトがたくさんあります。

TextSS
複数のHTML&テキストファイル内を一括置換 フルセット版
http://www.vector.co.jp/soft/win95/util/se072729 …

この回答への補足

お早いご回答ありがとうございます。

記載頂いたソフトですと全て同じ文字列に変更されてしまいます。

ファイル毎に変更をしたいのですが無理なのでしょうか?

私の説明不足申し訳ございません。
下記に例を付属致しますので良いアイディアがございましたらお教え頂ければと思います。



ファイル1
■さんこんにちは

ファイル2
■さんこんにちは

ファイル3
■さんこんにちは

■の部分は名前(ファイル毎)に違いますので全て同じ置き換えが出来ないのが現状です。


私のイメージの例です。


ファイル名     検索文字      置き換え文字

index1         ■          鈴木

index2         ■          山田

index3         ■          佐藤

index4         ■          小林

index5         ■          中野




index300        ■          大原

補足日時:2007/03/07 11:42
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!