VBScriptでhtmlファイルの括弧( )を色付けしようとしています。
vbsファイルにhtmlファイルをドラッグ&ドロップすると、括弧も含めて丸括弧内の文字色を変えるスクリプトを作ろうとしています。
対象となるhtmlファイルは、使っている丸括弧は、全て全角で必ず対になっています。本文以外のコメント等で丸括弧は使っていません。
括弧の色付けはタグを挿入するようにしていますが、括弧内の括弧では違う色にしたいと思っています。
自分なりにスクリプトを書いてみましたが、InStrの引数の型が違うと怒られ、進めなくなってしまいました。何が悪いか分からなくなってしまいました。
作成したコードの主要部分を載せます。
Option Explicit
Dim m_objFso
Dim continue'置換ループを抜ける変数
Set m_objFso = CreateObject("Scripting.FileSystemObject")
'---------------------------------------------------------
Dim l_strItem
For Each l_strItem In WScript.Arguments
Call coloring( l_strItem )
Next
Set m_objFso = Nothing
'---------------------------------------------------------
Private Sub coloring( l_strItem )
Dim objFile
Dim strValue'置換対象文字列
Dim lngStart'検索位置
Dim depth'括弧の深さ
lngStart = 1
depth = 0
Set objFile = m_objFso.OpenTextFile( l_strItem )
strValue = objFile.ReadAll
objFile.Close
Do
Call replace( lngStart , strValue , depth )
If continue = 0 Then
Exit Do
End If
Loop While 1
Set objFile = m_objFso.OpenTextFile( l_strItem , 2 )
objFile.Write( strValue )
objFile.Close
Set objFile = Nothing
End Sub
'---------------------------------------------------------
Private Function replace( lngStart , strValue , depth )
Dim leftPosition '右括弧の位置
Dim rightPosition '左括弧の位置
leftPosition = InStr( lngStart , strValue , "(")
rightPosition = InStr( lngStart , strValue , ")")
If rightPosition = 0 Then
continue = 0
Exit Function
ElseIf leftPosition = 0 Then
depth = depth - 1
strValue = Replace( strValue , ")", ")</span>")
lngStart = rightPosition + Len("</span>") + 1
ElseIf leftPosition < rightPosition Then
depth = depth + 1
If depth = 1 Then
strValue = Left( strValue , leftPosition - 1) & "<span style=""color:Aquamarine"">" & mid( strValue , leftPosition )
lngStart = leftPosition + Len("<span style=""color:Aquamarine"">") + 1
Else
strValue = Left( strValue , leftPosition - 1) & "<span style=""color:GreenYellow"">" & mid( strValue , leftPosition )
lngStart = leftPosition + Len("<span style=""color:GreenYellow"">") + 1
End If
Else
depth = depth - 1
strValue = Replace( strValue , ")", ")</span>")
lngStart = rightPosition + Len("</span>") + 1
End If
continue = leftPosition Or rightPosition
End Function
また、もっといい方法があれば教えてください。
No.1ベストアンサー
- 回答日時:
このスクリプトの仕様が正しいかを確認してない。
とりあえず原因だけ言うと。
*VB系は関数や変数の大文字小文字の差を同一視する。
*標準関数にReplaceが存在し、それを用いている。
*ユーザ側で作った関数の名前も何とReplace
*プログラマが標準関数のReplaceを呼ぶつもりで書いているが、このスクリプトは、ユーザーが定義した関数replaceだと思って引数を渡しているため、lngStartがそのような内容になる。
#個人的には
If rightPosition = 0 Then
Msgbox("3:" & lngStart)
continue = 0
Exit Function
ElseIf leftPosition = 0 Then
End If
は
If rightPosition = 0 Then
Msgbox("3:" & lngStart)
continue = 0
Exit Function
End If
If leftPosition = 0 Then
End If
としてネストを深くしないようにしたいところか
この回答への補足
Msgbox("3:" & lngStart)はhimajin100000さんが動作確認用に追加したところですよね。
ElseIfはネストが深くなるんですか?
関数名を変えたらうまくいきました。
標準関数を呼んでいたなんて、思ってもいませんでした。でも、よく考えればreplaceなんてそのままの言葉だし、そうなりますね。
これからは自作関数作るときはオリジナリティあふれる名前にします。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript vertical sliderをautoplayしたい 2 2022/08/25 14:47
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- HTML・CSS アコーディオンメニューが思うように動作しません。 1 2023/08/20 16:48
- PHP style.cssのjQuery条件付きcssが機能しない 4 2022/07/17 18:27
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBスクリプト---アプリの終了に...
-
ジョブ名、ステップ名の取得方...
-
スタートアップ(シャットダウン...
-
UWSCでメモ帳に書いてある数値...
-
PRO-FACE タッチパネル
-
イラストレーター、縦中横のシ...
-
PowerShellでのエラー出力の読...
-
パソコン用語「ツリー」って、...
-
アンケートのCGIを探しています
-
VBSで既に開いているIEにパスワ...
-
CGI 暴走の原因は何が考えられ...
-
アクセスカウンタの2重カウン...
-
SNMPのMIBツリーの見方。
-
Wi-Fi通信で、どうぶつの森・・・
-
お寺の門前に設置してある掲示...
-
HPのページないしリンクにパス...
-
草野球用ホームページ作成
-
自作携帯サイト内ページをパス...
-
PC専用掲示板とPC携帯兼用掲...
-
風俗嬢の心のセンサーは壊れて...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PowerShellでのエラー出力の読...
-
VBスクリプト---アプリの終了に...
-
レジストリの設定をすぐに反映...
-
PRO-FACE タッチパネル
-
ジョブ名、ステップ名の取得方...
-
アプリケーションのフリーズを...
-
複数フォルダを整列して表示vbs
-
5chなどでスクリプト連投などで...
-
EXCEL VBA : PDFファイルを1つ...
-
jQueryを使ってドラムロールを...
-
イラストレーター、縦中横のシ...
-
スタートアップ(シャットダウン...
-
キーエンスのPLCでのスクリプト...
-
シナリオスクリプトとは?
-
ページにJavaScriptを埋め込む...
-
サーバーからクライアントのMAC...
-
エンドレスバトルのスクリプト配布
-
ホームページにブラウザから書...
-
aspへPOST時のエラー(405)
-
VB.NETでVBスクリプトを作るに...
おすすめ情報