VBSを勉強中です。下記URLによるとnotepadの起動は出来るようですが、編集は可能でしょうか?
http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/index.h …
編集は始めの2, 3行だけです。notepad用のコマンド一覧とかあるのでしょうか。
エクセルVBAはそこそこ出来ます。
No.6ベストアンサー
- 回答日時:
単純に置換なら以下のコードで実装可能
ただし、エラー処理などは一切しておりません。
VBS勉強中とのことなので、各々の関数の使い方や意味については、ご自身で学習してください。
どれも基礎レベルの内容です。
'------Sample.vbs---------
'Sample.txtファイル内の"t"の文字を""へ置き換え、置き換えたファイルをSample2.txtとして出力
'作成したVBSファイルと読み込み用ファイルは同一フォルダ内に配置する必要がある
Dim objFSO 'ファイルシステムオブジェクト
Dim Readtxt , Writetxt '読み込み用ファイル、書き込み用ファイル
Set objFSO = CreateObject("Scripting.FilesystemObject")
Set Readtxt = objFSO.OpenTextFile( objFSO.GetParentFolderName( Wscript.ScriptFullName ) & "\Sample.txt" , 1 )
Set Writetxt = objFSO. OpenTextFile ( objFSO.GetParentFolderName( Wscript.ScriptFullName ) & "\Sample2.txt" , 2 ,True )
Do until Readtxt.AtEndOfStream
Writetxt.Writeline Replace(Readtxt.Readline,"t","")
Loop
Set objFSO = Nothing
Readtxt.Close
Writetxt.Close
No.5
- 回答日時:
#4 の補足:
私はあまり詳しいわけではありませんし、役に立たない情報ですが、
>notepad用のコマンド一覧とかあるのでしょうか。
調べてみたのですが、XP時代の旧Notepad とは違うようです。
コマンドは、具体的には、Win32 APIで動かすことになりますが、その内容を調べるのは、
Resource Hacker というツールで、Notepad のDialogの部分を逆アセンブルするようなことをします。
ここの真ん中ぐらいに画像があります。この左の欄の"Dialog"などで、handle 名を取得します。以下は、旧Notepad です。
http://www.techrepublic.com/article/step-by-step …
Win32 APIは、
Set win32 = CreateObject("DynamicWrapper")
のように使います。
http://www.drdobbs.com/windows/an-automation-obj …
UWSC のほうが簡単だと思います。
>ただ、目的はVBS勉強でもありますので、今回はVBS前提で作ります。
難しい所に手を出しますね。普通の言語のほうがまだ楽です。
Excel VBAとは格段に難しいです。
講座は、MSの「Hey, Scripting Guy!」で、何年も、ずっと続いていたのですが、途中でわかりにくくなって挫折した覚えがあります。
ともかく、専用エディタを一つ手にいれることをオススメします。
前回の、SystemScripter や VBSEdit/HTAEdit を入れると良いです。一般のエディタでは、デバッグが大変です。#4は、SystemScripter と普通のエディタ半々で書きました。
http://www.vbsedit.com/ 有償で値段が高い(いずれは無料になるかも。これは便利です。)
何が難しいかというと、WMI が頻繁に出てくるからです。ハードに詳しくないとさっぱり理解できません。
http://www.vbsedit.com/scripts/default.asp
HTAは、VBScript, CScript の延長です。
HTA_helpomatic は、作成ツールですが、今、Microsoft サイトでは見つけられませんでした。HTA Helpomatic Download で手に入りますが、マルウェアがあるサイトもありますから、要注意です。SystemScripter は代わりにはなります。
いつもありがとうございます。
エディタ関係ありがとうございます。まだ使えそうにありませんが。マクロは最初だからエクセルマクロがVBSに名前が変わっただけの、簡単なものを考えてますが、呈示頂いたものはかなり読み取りに時間がかかりそうです。
No.4
- 回答日時:
今回、ちょっと関心があったのですが、他のソフトと競合して、VBSEdit というアプリを壊してしまいました。
(VBSEdit というのは、VBSを作成するときの専用エディタです。)代わりに、今、SystemScripter で作っていますが、これは、シェアウェアが解除になったものの、日本語がうまく入力できません。便利なことは便利です。
牟田口さんのサイトにも出てきています。Debugging Modeで、オブジェクトの中身が取れます。これは、Freeになりました。しかし、若干ハングするようです。
http://www.powertheshell.com/systemscripter-supp …
Continue to use SystemScripter without Activation
最初、HTAファイルで作りたかったのですが、長い間いじったことがないので、当分時間が掛かりそうです。代用品というか、元のVBSで考えてみました。別に、下手の横好きですから、参考にすることもありません。
正規表現は、複数の組みあせがある場合ですね。
例えば、です。→だ。
[tTtT](全角半角まじり)を削除する場合です。
この場合は、Function を設けます。
なお、直接 Notepadを処理するなら、UWSCを使います。これは、Win32 APIを搭載しています。そうでないなら、VBS では、ラッパーを設けます。
http://www.uwsc.info/
ファイル名の指定は、VBSプログラムに、ドラックして重ねますと、実行されます。現在は、拡張子はtxt に限ります。また、バックアップファイルが出ますが、$***.txt となります。ファイルの大きさの制限は、2Gだったような気がしますが、あまり大きなものはやめておいた方が無難です。最終的には、HTAにしたほうが見栄えがよいです。
>編集は始めの2, 3行だけです。
読み落としていました。少し、コードが変わります。
'//--
Dim objFso
Dim BName
Dim delTx
Dim Fname
Dim mPath
Dim objFile
Dim objFName
Dim objTx
Dim objTxIn
Dim orgFName
Dim outTx
Dim Tx
'''FindWdDel.Vbs
Set objFso = CreateObject("Scripting.FileSystemObject")
''------
If WScript.Arguments.length =0 Then
WScript.Echo "ファイルをドラッグして、このプログラムにDropしてください。"
WScript.Quit
End If
''----------
Fname =WScript.Arguments.Item(0)
''テスト用
'' Fname = "C:\Users\[myName]\My Documents\Wsh\test2.txt"
If LCase(objFso.GetExtensionName(Fname)) = "txt" Then
'Rename
orgFName =Fname
Set objFile = objFso.GetFile(FName)
BName = Left(objFile.Name, Len(objFile.Name) - 4)
Fname ="$" & BName & ".txt"
Else
WScript.Echo "拡張子がtxtではありません。"
WScript.Quit
End If
mPath =objFso.GetParentFolderName(objFile.Path) & "\"
If objFso.FileExists(mPath & Fname) Then
Set objFile =objFso.GetFile(mPath & Fname)
''同名バックアップファイルがある時は止める場合
'MsgBox "既に同じ名前のバックアップファイルがあります。" & Fname
'WScript.Quit
objFile.Delete
End If
Set objFile =objFso.GetFile(orgFName)
objFile.Name = Fname
Set objTxIn = objFso.OpenTextFile(objFile.Path)
Tx = objTxIn.ReadAll() 'upto 2G
delTx =InputBox ("削除する文字を入れてください")
Do Until Len(delTx)>0 Or delTx =""
delTx =InputBox ("文字が入っていません。")
Loop
If delTx = "" Then
MsgBox "終了しますします!"
WScript.Quit
End If
On Error Resume Next
outTx = Replace(Tx, delTx, "")
Set objTx =objFso.CreateTextFile(orgFname)
objTx.Write (outTx)
If Err.number > 0 Then
MsgBox Err.number &": " & Err.Description
Else
MsgBox "正常に出力されました。"
End If
'//--
No.2
- 回答日時:
> 文字列"t"を削除したいのです。
具体的な削除の仕方が不明ですので、ちゃんと明確に記載したほうが良いかと。
ファイル内の全ての"t"を削除するのであれば、メモ帳の置換機能("t"→"")を使えば良いです。
特定の行の削除のみ行いたいのであればメモ帳は使用せずに、対象のテキストファイルを直接一行ずつ読み取って、正規表現で置換("t"→"")すれば良いです。
http://www.kanaya440.com/contents/tips/vbs/004.h …
https://msdn.microsoft.com/ja-jp/library/ms97457 …
再度ありがとうございます。
>対象のテキストファイルを直接一行ずつ読み取って
質問文のURLを調べたところ、ありました。TextStreamで出来るようですね。TestStreamと正規表現で攻めてみます。
No.1
- 回答日時:
ありがとうございます。
判断が伴う場合はどうですか?具体的には文字列"t"を削除したいのです。内容を読み取りtなら削除、になる筈です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Microsoft ASP C#からvbsを実行したい 5 2022/11/24 17:31
- その他(プログラミング・Web制作) テキストエディタで複数行にわたる文字列の行頭に番号を振る方法 4 2023/03/11 12:57
- Visual Basic(VBA) エクセルVBA エクセルを開いた後に編集可能な状態にするには? 2 2023/06/14 11:58
- デスクトップパソコン 動画編集やフォトショップ、イラストレーターなど、このスペックで問題ないですか? 7 2022/08/19 18:10
- Excel(エクセル) CSVファイルでVBAを動かす方法 3 2023/04/04 10:22
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- その他(クラウドサービス・オンラインストレージ) seesaawikiのページ編集において「誰かが編集しているときは他の人が編集できない」は可能ですか 1 2022/06/27 18:01
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- その他(趣味・アウトドア・車) 趣味で動画投稿をしたりしています。 編集する前は色々考えたり楽しいのですが、編集しようとすると気持ち 1 2022/10/02 20:03
- その他(パソコン・スマホ・電化製品) 動画編集(切り抜き)用ノートPC又はタブレットについて 動画編集など全く触ったことがない素人からの質 4 2022/08/21 21:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチ処理でファイルの中身を...
-
テキストファイルのタブをカン...
-
多数のサブディレクトリ内のフ...
-
拡張子を元に戻す
-
バッチファイルで文字列削除に...
-
forfilesで検索したファイルを...
-
VBAでワークシートを引数として...
-
ファイルを処理中に次の処理に...
-
.txtではなく.logの方が良いの...
-
バッチファイルからVBAに引数を...
-
【Excel】 VBAを使って毎回名前...
-
テキストファイルのファイル名...
-
renameコマンドについて
-
Excelで、大量のファイルをテキ...
-
cshでファイルサイズ取得
-
COPYコマンドで結合すると余計...
-
テキストファイルの内容を連結...
-
EXCEl/VBAで拡張子なしのファイ...
-
VBAでエクセルをtxtに変換する...
-
ftpコマンドで複数のファイルを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチ処理でファイルの中身を...
-
VBAでワークシートを引数として...
-
.txtではなく.logの方が良いの...
-
拡張子を元に戻す
-
多数のサブディレクトリ内のフ...
-
COPYコマンドで結合すると余計...
-
バッチファイル 複数ファイル...
-
テキストファイルで提出とは?
-
バッチファイルで文字列削除に...
-
Windowsのバッチファイルを利用...
-
テキストファイルのファイル名...
-
ファイルの最後に文字列挿入
-
psqlでエラーログをとりたい
-
forfilesで検索したファイルを...
-
バッチファイルからVBAに引数を...
-
accessでSQL文を使ってcsvファ...
-
テキストファイルのタブをカン...
-
MATLABで行列を配列に格納する方法
-
renameコマンドについて
-
【Excel】 VBAを使って毎回名前...
おすすめ情報