たまにプログラムソースでインデントがぐちゃぐちゃのソースにあたったりします。
javaとかcとか
IDE使ってれば
javaだったらeclipseでなんとかなったりするんでしょうが
C言語とかをサクラエディタでメンテナンスとかどうにもならず、せめて{}だけでも
インデント整形できないものかと思いまして
vbscriptでなんちゃって整形プログラム作りました。
すべてに対応してるわけではありませんが、簡易版としてある程度使えます
field_max=0 '------------------------------------------------- Set objRegExp = new RegExp 'クリップボード取得 tblText = GetClipBoardText() '改行統一 objRegExp.Pattern = "\r\n" row = objRegExp.Replace(row,vbLf) lines = split(trim(tblText),vbLf) outtext ="" '行処理 indent = "" indentOn =false for i = 0 to UBound(lines) : Do row = lines(i) '前方スペース除去 objRegExp.Pattern = "^[\t ]+" row = objRegExp.Replace(row,"") 'チェック用 'コメント除去 checkrow=row objRegExp.Pattern = "\/\/.*$" checkrow = objRegExp.Replace(checkrow,"") objRegExp.Pattern = "\/\*.*\*\/" checkrow = objRegExp.Replace(checkrow,"") '--------------------------------------------------------コメントスキップ if mid(checkrow,1,2)="//" then 'コメント行スキップ row = indent & row outtext = outtext & vbCrLf & row exit do end if objRegExp.Pattern = "\/\*" Set objMatch = objRegExp.Execute(checkrow) if objMatch.Count>0 then row = indent & row outtext = outtext & vbCrLf & row indentOn =true objRegExp.Pattern = "\*\/" Set objMatch = objRegExp.Execute(checkrow) if objMatch.Count>0 then indentOn = false end if exit do end if objRegExp.Pattern = "\*\/" Set objMatch = objRegExp.Execute(checkrow) if objMatch.Count>0 then row = indent & row outtext = outtext & vbCrLf & row indentOn =false objRegExp.Pattern = "\/\*" Set objMatch = objRegExp.Execute(checkrow) if objMatch.Count>0 then indentOn = true end if exit do end if '--------------------------------------------------------{}チェック objRegExp.Pattern = "\{.*\}" Set objMatch = objRegExp.Execute(checkrow) if objMatch.Count>0 then '何もせずに行追加 row = indent & row outtext = outtext & vbCrLf & row exit do end if '--------------------------------------------------------}{チェック objRegExp.Pattern = "\}.*\{" Set objMatch = objRegExp.Execute(checkrow) if objMatch.Count>0 then 'インデント戻して行追加 if len(indent)> 0 then indent = mid(indent,1,len(indent)-1) end if row = indent & row outtext = outtext & vbCrLf & row 'インデント加算 indent = indent & vbTab exit do end if '--------------------------------------------------------}チェック objRegExp.Pattern = "\}" Set objMatch = objRegExp.Execute(checkrow) if objMatch.Count>0 then if len(indent)> 0 then indent = mid(indent,1,len(indent)-1) end if 'もどしたインデントで行追加 row = indent & row outtext = outtext & vbCrLf & row '}else{ objRegExp.Pattern = "\{" Set objMatch = objRegExp.Execute(checkrow) if objMatch.Count>0 then 'インデント加算 indent = indent & vbTab end if exit do end if '--------------------------------------------------------{チェック objRegExp.Pattern = "\{" Set objMatch = objRegExp.Execute(checkrow) if objMatch.Count>0 then '行追加してインデント加算 row = indent & row outtext = outtext & vbCrLf & row indent = indent & vbTab exit do end if row = indent & row outtext = outtext & vbCrLf & row loop until 1 :next SetClipboardText(outtext) MsgBox("クリップボードにコピーしました") '----------------------------------------------------------------- '半角換算文字数 '----------------------------------------------------------------- Function LengthByHankaku(str) Set RegExp = New RegExp RegExp.Global = true '半角文字数 RegExp.Pattern ="[^\x01-\x7E]+" '半角以外をリプレース 半角が残る hankaku = RegExp.Replace(str,"") '全角文字数 RegExp.Pattern ="[\x01-\x7E]+" '半角をリプレース 全角が残る zenkaku = RegExp.Replace(str,"") '換算文字数 colLen = Len(zenkaku)*2 +Len(hankaku) LengthByHankaku = colLen End Function '------------------------------------------------------------------ 'クリップボード取得 '------------------------------------------------------------------ Function GetClipBoardText() dim objHTML Set objHTML = CreateObject("htmlfile") GetClipBoardText = Trim(objHTML.ParentWindow.ClipboardData.GetData("Text")) End Function '------------------------------------------------------------------ 'クリップボードコピー '------------------------------------------------------------------ Function SetClipboardText(text) set WshShell = CreateObject("WScript.Shell") wshShell.Exec("clip").stdIn.write text Set wshShell = nothing End Function