天天看點

使用IDE宏周遊代碼中的非ASCII字元

    在産品開發的時候,雖然大家知道需要做I18N的支援。不過在開發代碼的過程中,由于需要首先關注邏輯實作,是以檔案中也難免會hardcode中文文字什麼的。在代碼的UI描述和業務邏輯都很穩定後,最後還需要清理一下代碼中是否還有中文資源,因為那些類似錯誤提示一類的描述,在程式未出錯時Tester幾乎是無法發現的。

不過這個檢查如果靠眼睛看,也是非常之郁悶的事情,那麼除了編寫額外的工具分析文檔,還有沒有其它簡單又自動的方法幫我們解決問題呢?由于VS.NET

2003給我提供了非常強大的宏功能(可以在宏中使用.NET

Framework類庫!),是以對于這種小case使用宏來解決就太合适不過了。下面這個宏的功能就是在目前文檔中找出非ASCII字元,并把出現的行号和内容輸出到Output工具視窗中。代碼如下:

使用IDE宏周遊代碼中的非ASCII字元

Imports EnvDTE

使用IDE宏周遊代碼中的非ASCII字元

Imports System.Windows.Forms

使用IDE宏周遊代碼中的非ASCII字元

Imports System.Text

使用IDE宏周遊代碼中的非ASCII字元

Imports System.Globalization

使用IDE宏周遊代碼中的非ASCII字元

Imports System.Text.RegularExpressions

使用IDE宏周遊代碼中的非ASCII字元

Imports System.Diagnostics

使用IDE宏周遊代碼中的非ASCII字元

Imports MyMacros.Util

使用IDE宏周遊代碼中的非ASCII字元
使用IDE宏周遊代碼中的非ASCII字元
使用IDE宏周遊代碼中的非ASCII字元

Public Module BirdshomeModule Birdshome

使用IDE宏周遊代碼中的非ASCII字元
使用IDE宏周遊代碼中的非ASCII字元

    Sub FindChineseWords()Sub FindChineseWords()

使用IDE宏周遊代碼中的非ASCII字元

        Dim doc As Document = DTE.ActiveDocument

使用IDE宏周遊代碼中的非ASCII字元

        Dim docText As TextDocument = doc.Object

使用IDE宏周遊代碼中的非ASCII字元

        Dim lineCount = docText.EndPoint.Line

使用IDE宏周遊代碼中的非ASCII字元

        Dim ep As EditPoint = docText.StartPoint.CreateEditPoint()

使用IDE宏周遊代碼中的非ASCII字元

        Dim strLine As String

使用IDE宏周遊代碼中的非ASCII字元

        Dim i As Integer

使用IDE宏周遊代碼中的非ASCII字元

        Dim regex As Regex = New Regex("[^\u0000-\u00ff]+")

使用IDE宏周遊代碼中的非ASCII字元

        Dim strbResult As StringBuilder = New StringBuilder

使用IDE宏周遊代碼中的非ASCII字元

        For i = 1 To lineCount - 1

使用IDE宏周遊代碼中的非ASCII字元

            strLine = ep.GetLines(i, i + 1)

使用IDE宏周遊代碼中的非ASCII字元

            Dim m As MatchCollection = regex.Matches(strLine)

使用IDE宏周遊代碼中的非ASCII字元

            If m.Count > 0 Then

使用IDE宏周遊代碼中的非ASCII字元

                strbResult.Append(i.ToString())

使用IDE宏周遊代碼中的非ASCII字元

                strbResult.Append(". ")

使用IDE宏周遊代碼中的非ASCII字元

                Dim j As Integer

使用IDE宏周遊代碼中的非ASCII字元

                For j = 0 To m.Count - 1

使用IDE宏周遊代碼中的非ASCII字元

                    strbResult.Append(m(j).Value)

使用IDE宏周遊代碼中的非ASCII字元

                    strbResult.Append(", ")

使用IDE宏周遊代碼中的非ASCII字元

                Next

使用IDE宏周遊代碼中的非ASCII字元

                strbResult.Length = strbResult.Length - 2

使用IDE宏周遊代碼中的非ASCII字元

                strbResult.Append(";")

使用IDE宏周遊代碼中的非ASCII字元

                strbResult.Append(System.Environment.NewLine)

使用IDE宏周遊代碼中的非ASCII字元

            End If

使用IDE宏周遊代碼中的非ASCII字元

        Next

使用IDE宏周遊代碼中的非ASCII字元

        'MessageBox.Show(strbResult.ToString)

使用IDE宏周遊代碼中的非ASCII字元

        Dim win As Window = DTE.Windows.Item(Constants.vsWindowKindCommandWindow)

使用IDE宏周遊代碼中的非ASCII字元

        Dim target As Object

使用IDE宏周遊代碼中的非ASCII字元

        If (DTE.ActiveWindow Is win) Then

使用IDE宏周遊代碼中的非ASCII字元

            target = win.Object

使用IDE宏周遊代碼中的非ASCII字元

        Else

使用IDE宏周遊代碼中的非ASCII字元

            target = GetOutputWindowPane("Chinese Words")

使用IDE宏周遊代碼中的非ASCII字元

            target.clear()

使用IDE宏周遊代碼中的非ASCII字元

        End If

使用IDE宏周遊代碼中的非ASCII字元

        target.OutputString(strbResult.ToString())

使用IDE宏周遊代碼中的非ASCII字元

    End Sub

使用IDE宏周遊代碼中的非ASCII字元

End Module

方法GetOutputWindowPane在如下公用子產品中:

使用IDE宏周遊代碼中的非ASCII字元
使用IDE宏周遊代碼中的非ASCII字元
使用IDE宏周遊代碼中的非ASCII字元
使用IDE宏周遊代碼中的非ASCII字元
使用IDE宏周遊代碼中的非ASCII字元

Public Module UtilModule Util

使用IDE宏周遊代碼中的非ASCII字元
使用IDE宏周遊代碼中的非ASCII字元

    Function GetOutputWindowPane()Function GetOutputWindowPane(ByVal Name As String, Optional ByVal show As Boolean = True) As OutputWindowPane

使用IDE宏周遊代碼中的非ASCII字元

        Dim win As Window = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput)

使用IDE宏周遊代碼中的非ASCII字元

        If show Then win.Visible = True

使用IDE宏周遊代碼中的非ASCII字元

        Dim ow As OutputWindow = win.Object

使用IDE宏周遊代碼中的非ASCII字元

        Dim owpane As OutputWindowPane

使用IDE宏周遊代碼中的非ASCII字元

        Try

使用IDE宏周遊代碼中的非ASCII字元

            owpane = ow.OutputWindowPanes.Item(Name)

使用IDE宏周遊代碼中的非ASCII字元

        Catch e As System.Exception

使用IDE宏周遊代碼中的非ASCII字元

            owpane = ow.OutputWindowPanes.Add(Name)

使用IDE宏周遊代碼中的非ASCII字元

        End Try

使用IDE宏周遊代碼中的非ASCII字元

        owpane.Activate()

使用IDE宏周遊代碼中的非ASCII字元

        Return owpane

使用IDE宏周遊代碼中的非ASCII字元

    End Function

使用IDE宏周遊代碼中的非ASCII字元

//

多寫寫VB,覺得它的文法還是挺自然的:)

    以中文google首頁的html代碼(Formatted by

IDE)為示例,運作本腳本代碼的結果如下圖:

本文轉自部落格園鳥食軒的部落格,原文連結:http://www.cnblogs.com/birdshome/,如需轉載請自行聯系原部落客。