VBS超初心者です。
VBSにテキストファイルをドラッグ&ドロップして、改行が3回以上連続した箇所を「改行+ダミー文字+改行」に置換するスクリプトを作成してみました。
WEB上のサンプルスクリプトなどを参考にしながら、なんとか動くようにすることはできたのですが、ドイツ語のファイルを処理すると、何故か文字コードがS-JISになって文字化けしてしまいます。
どうしたらUTF-8のまましょりできるのでしょうか。
また、スクリプトの記述もかなり拙いものになっていると思います。
問題点、完全方法などご教授いただけると今後の勉強に役立つと思うので、よろしくお願いします。
Set FS = CreateObject("Scripting.FileSystemObject")
For Each strArgument in Wscript.Arguments
Set ts=Fs.OpenTextFile(strArgument,1,True,TristateTrue)
myStr=ts.ReadAll
Set objRE = New RegExp
objRE.Pattern = "(" & vbCrLf & "){3,}"
repStr = vbCrLf & "[dummy]" & vbCrLf
objRE.IgnoreCase = True
objRE.Global = True
objRE.Multiline = True
newStr = objRE.Replace(myStr,repStr)
ts.Close
Set ts = FS.OpenTextFile(strArgument,2,True,TristateTrue)
ts.Write newStr
ts.Close
No.2ベストアンサー
- 回答日時:
う~む、「超初心者」だったんですね。
応用例を記載したので、そのまま書くとダメなんですよ。
以下は丸々のプログラムです。但し、インデントは漢字空白なので、
半角スペースに変換してください。
Option Explicit
Dim strArgument, myStr, repStr, objRE, newStr, Stm
Set objRE = New RegExp
objRE.Pattern = "(" & vbCrLf & "){3,}"
repStr = vbCrLf & "[dummy]" & vbCrLf
objRE.Global = True
For Each strArgument in Wscript.Arguments
Set Stm = CreateObject("ADODB.Stream")
Stm.Open
Stm.Type = 2
Stm.Charset = "utf-8"
Stm.LoadFromFile strArgument
Stm.Position = 0
myStr = Stm.ReadText
newStr = objRE.Replace(myStr,repStr)
Stm.Position = 0
Stm.WriteText newStr
Stm.SetEOS
Stm.Position = 0
Stm.SaveToFile strArgument, 2
Stm.Close
Set Stm = Nothing
Next
ご教授ありがとうございました。確かにこれで機能しました!
これから、上記のスクリプトをリバースエンジニアリング(という程のことでもないのでしょうが、経験者にとっては)して、自分のものにしていきたいと思います。
Perlと浮気しながらの勉強ですので、亀の歩みになるかも知れませんが、またバカな質問をした際には、ご助言頂けると幸いです。
No.1
- 回答日時:
ADODBのStreamで処理したらどうなりますか?
Dim Stm
Set Stm = CreateObject("ADODB.Stream")
Stm.Open
Stm.Type = 2
Stm.Charset = "utf-8"
Stm.LoadFromFile strArgument
Stm.Position = 0
myStr = Stm.ReadText
== 今までの処理 ==
Stm.Position = 0
Stm.WriteText newStr
Stm.SetEOS
Stm.Position = 0
Stm.SaveToFile strArgument
Stm.Close
Set Stm = Nothing
この回答への補足
まだ始めたばかりなので、見当はずれなことをしてたら御免なさい。
以下のようにするということでしょうか。
(ADODBのStream自体が初耳でした。検索して調べてみましたが、わかったようなわからないような…)
結果:この場合6行目で、「引数が間違った型、許容範囲外、または競合しています。」「コード:800A0BB9」とエラーになってしまいます。
Dim Stm
Set Stm = CreateObject("ADODB.Stream")
Stm.Open
Stm.Type = 2
Stm.Charset = "utf-8"
Stm.LoadFromFile strArgument
Stm.Position = 0
myStr = Stm.ReadText
Set FS = CreateObject("Scripting.FileSystemObject")
For Each strArgument in Wscript.Arguments
Set ts=Fs.OpenTextFile(strArgument,1,True,TristateTrue)
myStr=ts.ReadAll
Set objRE = New RegExp
objRE.Pattern = "(" & vbCrLf & "){3,}"
repStr = vbCrLf & "[dummy]" & vbCrLf
objRE.IgnoreCase = True
objRE.Global = True
objRE.Multiline = True
newStr = objRE.Replace(myStr,repStr)
ts.Close
Set ts = FS.OpenTextFile(strArgument,2,True,TristateTrue)
ts.Write newStr
ts.Close
Next
NextStm.Position = 0
Stm.WriteText newStr
Stm.SetEOS
Stm.Position = 0
Stm.SaveToFile strArgument
Stm.Close
Set Stm = Nothing
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- その他(プログラミング・Web制作) VBSでExcelファイル起動時、重複しても開くのを止めたい 1 2022/10/01 23:20
- UNIX・Linux テキストファイルをページ番号付きでコマンドラインから印刷したい 1 2023/02/22 12:47
- Visual Basic(VBA) FileSearch2007に変わる構文について 1 2022/12/16 16:57
- Visual Basic(VBA) 実行時エラー´5854´ 文字列型パラメーターが長すぎます。 3 2023/06/08 21:17
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カーソルを合わせると説明を表...
-
preタグがプロの現場であまり使...
-
Hタグを改行禁止にしてspanのよ...
-
テーブルの幅を固定するとnowra...
-
htmlで文字列をクリップボード...
-
ddの行の折り返しをしたいです...
-
改行できる・できない入力ボッ...
-
liタグの自動改行をやめたい!
-
Windowsのformでtextareaに入力...
-
XMLの改行方法とリンクの仕方
-
「:」について
-
テキストエリア内の改行禁止
-
改行が変な位置、中途半端な位...
-
textarea と、 input type の...
-
VBE でスペースと改行を見える...
-
XMLを作成してもタグしか表示さ...
-
キーフレーム
-
AfterEffectsでイージーイーズ...
-
VC、コンソールアプリ結果の...
-
Edgeを操作するアプリについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テーブルのセルデータを自動改...
-
テキストエリア内の改行禁止
-
長いURLを途中で改行(折り返す...
-
H1タグに改行の<br>を使う
-
\\n \\r \\t について
-
テーブルの幅を固定するとnowra...
-
テーブル内の文字列を改行させたい
-
<TD><input type="text"></TD>...
-
「:」について
-
PCの画面を縮小したらサイズ...
-
preタグがプロの現場であまり使...
-
改行できる・できない入力ボッ...
-
Windowsのformでtextareaに入力...
-
文字の最後に半角空白が勝手に...
-
XMLの改行方法とリンクの仕方
-
テキストエリア内の改行もその...
-
<br />タグの、brの後の半角ス...
-
htmlで文字列をクリップボード...
-
Hタグを改行禁止にしてspanのよ...
-
VBE でスペースと改行を見える...
おすすめ情報