人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

テキスト置換について質問です。
仮に”A001.txt”、”A002.txt”、”A003.txt”・・・と1000ファイルあるとして、それぞれのテキストファイル内に”[ファイル名]”という特定文字があった場合、自身のファイル名を取得して置換する方法を探しています。
A001.txt内”[ファイル名]”→”[A001.txt]”、A002.txt内”[ファイル名]”→”[A002.txt]”といった具合に一括で処理することが希望です。

●質問者: WATANABE
●カテゴリ:コンピュータ インターネット
✍キーワード:txt テキスト ファイル 希望
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● 考え中
●5ポイント

Emacsを使って試してみたら出来たので報告します。

条件:編集するファイルは全て一箇所のフォルダに入っているものとします。


Emacsを軌道してC-x C-fとして、上記のフォルダを指定してdiredモードに入ります。

ここでキーボードマクロの定義します。

C-x (でキーボードマクロの定義に入り、一覧からファイル名をコピーして、ファイルを開けて、

テキストの置換(replace-string)を実行し、ファイル名に置換します。ファイルをSave(C-x C-s)、

Kill(C-x k)してdiredモードに戻り次のファイル名の先頭に移動(C-n)して、

C-x )でキーボードマクロ定義を終了します。

一度このキーボードマクロが上手く定義できれば、あとは、

C-x eでマクロを繰り返すことができますし、

C-u 1000 C-x eで上記マクロを1000回繰り返すことも出来ます。


ちなみに定義したマクロは下記のようになりました。

C-SPC;; set-mark-command

C-e;; move-end-of-line

ESC w;; kill-ring-save

RET;; newline

ESC x;; execute-extended-command

replace;; self-insert-command * 7

2*TAB;; indent-for-tab-command

st;; self-insert-command * 2

TAB;; indent-for-tab-command

RET;; newline

[ファイル名];; self-insert-command * 7

RET;; newline

C-y;; yank

RET;; newline

C-x C-s;; save-buffer

C-x k;; kill-buffer

RET;; newline

C-n;; next-line


2 ● HALSPECIAL
●70ポイント ベストアンサー

WSH(VBScript)です。

こちらでいけないでしょうか?

メモ帳などのエディタに貼り付けて、※の部分を書き替え

ファイルの置換.vbs

のようなファイル名で保存します。(拡張子をvbsにする事)

ダブルクリックすると実行されます。


また、エクセルVBAの関数の一部としても使用できます。

その場合は

WScript.」を除去してください。

Option Explicit

Const TARGET_FOLDER = "D:\TEMP"  '※フォルダを指定
Const REPLACE_FROM = "[ファイル名]" '※置換前文字列
Dim REPLACE_TO  ' 置換後文字列

Const ForReading = 1 '読み込み
Const ForWriting = 2 '書きこみ(上書きモード)
Const ForAppending = 8 '書きこみ(追記モード)

Dim strFilePath, infile, outfile, strData, strExt
Dim objFSO, objFolder, objFile, objSubFolder, objTXT
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(TARGET_FOLDER)

For Each objFile In objFolder.Files
 strFilePath = objFSO.BuildPath(TARGET_FOLDER, objFile.Name)
 strExt = objFSO.GetExtensionName(objFile.Name)
 If LCase(strExt) = "txt" Then
 Set infile = objFSO.OpenTextFile(strFilePath,ForReading)
 strData = infile.ReadAll
 infile.Close
 Set infile = Nothing
 Set outfile = objFSO.OpenTextFile(strFilePath,ForWriting)  '(上書き)
 REPLACE_TO = "[" & objFile.Name & "]" '※自身のファイル名
 outfile.Write Replace(strData,REPLACE_FROM,REPLACE_TO)
 outfile.Close
 Set outfile = Nothing
 End If
Next

Set objFolder = Nothing
Set objFSO = Nothing

MsgBox "終了", vbInformation

http://q.hatena.ne.jp/1255144176#a956818

◎質問者からの返答

希望通りの事ができました。ありがとうございました。


3 ● Committeeman
●10ポイント

こちらの記事が参考になると思います

http://itpro.nikkeibp.co.jp/article/COLUMN/20091124/340923/?ST=d...


4 ● brandbaidu
●10ポイント

(はてなにより削除しました)

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ