在産品開發的時候,雖然大家知道需要做I18N的支援。不過在開發代碼的過程中,由于需要首先關注邏輯實作,是以檔案中也難免會hardcode中文文字什麼的。在代碼的UI描述和業務邏輯都很穩定後,最後還需要清理一下代碼中是否還有中文資源,因為那些類似錯誤提示一類的描述,在程式未出錯時Tester幾乎是無法發現的。
不過這個檢查如果靠眼睛看,也是非常之郁悶的事情,那麼除了編寫額外的工具分析文檔,還有沒有其它簡單又自動的方法幫我們解決問題呢?由于VS.NET
2003給我提供了非常強大的宏功能(可以在宏中使用.NET
Framework類庫!),是以對于這種小case使用宏來解決就太合适不過了。下面這個宏的功能就是在目前文檔中找出非ASCII字元,并把出現的行号和内容輸出到Output工具視窗中。代碼如下:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLl52bO9CXzJ3b0F2YpRmbJdmbp5WasRXdP9CXzV2Zh1WSvwVbvNmLzd2bsJmbj5yd3d3Lc9CX6MHc0RHaiojIsJye.gif)
Imports EnvDTE
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLl52bO9CXzJ3b0F2YpRmbJdmbp5WasRXdP9CXzV2Zh1WSvwVbvNmLzd2bsJmbj5yd3d3Lc9CX6MHc0RHaiojIsJye.gif)
Imports System.Windows.Forms
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLl52bO9CXzJ3b0F2YpRmbJdmbp5WasRXdP9CXzV2Zh1WSvwVbvNmLzd2bsJmbj5yd3d3Lc9CX6MHc0RHaiojIsJye.gif)
Imports System.Text
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLl52bO9CXzJ3b0F2YpRmbJdmbp5WasRXdP9CXzV2Zh1WSvwVbvNmLzd2bsJmbj5yd3d3Lc9CX6MHc0RHaiojIsJye.gif)
Imports System.Globalization
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLl52bO9CXzJ3b0F2YpRmbJdmbp5WasRXdP9CXzV2Zh1WSvwVbvNmLzd2bsJmbj5yd3d3Lc9CX6MHc0RHaiojIsJye.gif)
Imports System.Text.RegularExpressions
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLl52bO9CXzJ3b0F2YpRmbJdmbp5WasRXdP9CXzV2Zh1WSvwVbvNmLzd2bsJmbj5yd3d3Lc9CX6MHc0RHaiojIsJye.gif)
Imports System.Diagnostics
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLl52bO9CXzJ3b0F2YpRmbJdmbp5WasRXdP9CXzV2Zh1WSvwVbvNmLzd2bsJmbj5yd3d3Lc9CX6MHc0RHaiojIsJye.gif)
Imports MyMacros.Util
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLl52bO9CXzJ3b0F2YpRmbJdmbp5WasRXdP9CXzV2Zh1WSvwVbvNmLzd2bsJmbj5yd3d3Lc9CX6MHc0RHaiojIsJye.gif)
Public Module BirdshomeModule Birdshome
Sub FindChineseWords()Sub FindChineseWords()
Dim doc As Document = DTE.ActiveDocument
Dim docText As TextDocument = doc.Object
Dim lineCount = docText.EndPoint.Line
Dim ep As EditPoint = docText.StartPoint.CreateEditPoint()
Dim strLine As String
Dim i As Integer
Dim regex As Regex = New Regex("[^\u0000-\u00ff]+")
Dim strbResult As StringBuilder = New StringBuilder
For i = 1 To lineCount - 1
strLine = ep.GetLines(i, i + 1)
Dim m As MatchCollection = regex.Matches(strLine)
If m.Count > 0 Then
strbResult.Append(i.ToString())
strbResult.Append(". ")
Dim j As Integer
For j = 0 To m.Count - 1
strbResult.Append(m(j).Value)
strbResult.Append(", ")
Next
strbResult.Length = strbResult.Length - 2
strbResult.Append(";")
strbResult.Append(System.Environment.NewLine)
End If
Next
'MessageBox.Show(strbResult.ToString)
Dim win As Window = DTE.Windows.Item(Constants.vsWindowKindCommandWindow)
Dim target As Object
If (DTE.ActiveWindow Is win) Then
target = win.Object
Else
target = GetOutputWindowPane("Chinese Words")
target.clear()
End If
target.OutputString(strbResult.ToString())
End Sub
End Module
方法GetOutputWindowPane在如下公用子產品中:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLl52bO9CXzJ3b0F2YpRmbJdmbp5WasRXdP9CXzV2Zh1WSvwVbvNmLzd2bsJmbj5yd3d3Lc9CX6MHc0RHaiojIsJye.gif)
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLl52bO9CXzJ3b0F2YpRmbJdmbp5WasRXdP9CXzV2Zh1WSvwVbvNmLzd2bsJmbj5yd3d3Lc9CX6MHc0RHaiojIsJye.gif)
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLl52bO9CXzJ3b0F2YpRmbJdmbp5WasRXdP9CXzV2Zh1WSvwVbvNmLzd2bsJmbj5yd3d3Lc9CX6MHc0RHaiojIsJye.gif)
Public Module UtilModule Util
Function GetOutputWindowPane()Function GetOutputWindowPane(ByVal Name As String, Optional ByVal show As Boolean = True) As OutputWindowPane
Dim win As Window = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput)
If show Then win.Visible = True
Dim ow As OutputWindow = win.Object
Dim owpane As OutputWindowPane
Try
owpane = ow.OutputWindowPanes.Item(Name)
Catch e As System.Exception
owpane = ow.OutputWindowPanes.Add(Name)
End Try
owpane.Activate()
Return owpane
End Function
//
多寫寫VB,覺得它的文法還是挺自然的:)
以中文google首頁的html代碼(Formatted by
IDE)為示例,運作本腳本代碼的結果如下圖:
本文轉自部落格園鳥食軒的部落格,原文連結:http://www.cnblogs.com/birdshome/,如需轉載請自行聯系原部落客。