2010-07-28 78 views
0

我有開發項目,像「Hi」+變量+「,歡迎來到項目」字符串操作在許多地方使用(給出的例子是非常小的一)。VS宏/加載項將字符串連接轉換爲字符串.format樣式

其中一個要求是將其轉換爲string.format樣式。

這是一個非常漫長而乏味的工作,在那裏我不想打破早期的工作代碼,因爲在轉換時可能會發生任何人爲錯誤。

我想如果任何宏或VS命令,我可以創建來處理它。就像我們標記代碼塊並在Re-factor選項中執行Extract函數一樣。

+0

你的問題是?我相信沒有人會爲你編寫完整的命令:)分析問題並將其分解爲可管理的部分 – 2010-07-28 12:26:23

+0

如果不是命令,則有關如何創建的指針將有所幫助。但我期待這樣的事情應該已經存在,因爲它非常通用。 – BigBoss 2010-07-28 12:46:46

+0

提供下面的代碼,因爲你不能訪問我的博客 – 2010-08-11 11:42:45

回答

2

我覺得代碼有點長,張貼在這裏,但我貼在我的博客答案: http://www.brianschmitt.com/2010/08/converting-concatenated-string-into.html

- 編輯 - 每這裏的評論是相關的宏 - 不知道爲什麼你不能訪問...

Public Sub ConvertToStringFormat() 
    DTE.UndoContext.Open("ConvertToStringFormat") 
    Dim textSelection As TextSelection = DTE.ActiveDocument.Selection 
    Dim output As String = "string.Format(""{0}"", {1})" 
    Dim delimt As String = ", " 
    Dim fmtdTostring As String = ".tostring(""" 

    Dim txtSelection As String() = System.Text.RegularExpressions.Regex.Split(textSelection.Text.Trim, "\+\s_[+\n\r\t]|&\s_[+\n\r\t]|\+|&") 
    Dim hardStrings As String = String.Empty 
    Dim valueStrings As String = String.Empty 
    Dim counter As Int16 = 0 

    For Each str As String In txtSelection 
     Dim tmpString As String = str.Trim 
     If tmpString.StartsWith("""") Then 
      hardStrings &= tmpString.Substring(1, tmpString.Length - 2) 
     Else 
      Dim fmt As String = String.Empty 
      Dim indxToString As Int32 = 0 

      If tmpString.ToLower.Contains(fmtdTostring) Then 
       indxToString = tmpString.ToLower.IndexOf(fmtdTostring) 
       fmt = tmpString.Substring(indxToString + 11, tmpString.Length - tmpString.ToLower.IndexOf(""")", indxToString) - 1) 
      End If 

      If fmt <> String.Empty Then 
       hardStrings &= "{" & counter.ToString & ":" & fmt & "}" 
       valueStrings &= tmpString.Substring(0, indxToString) & delimt 
      Else 
       hardStrings &= "{" & counter.ToString & "}" 
       valueStrings &= tmpString & delimt 
      End If 

      counter += 1 
     End If 
    Next 

    If valueStrings <> String.Empty Then valueStrings = valueStrings.Substring(0, valueStrings.Length - delimt.Length) 

    textSelection.Text = String.Format(output, hardStrings, valueStrings) 
    DTE.UndoContext.Close() 

End Sub 
+0

上面的鏈接不工作,看起來像你網站上的所有網頁都提供一個空白的gif文件。這可能與HTTPHandler有關。 – BigBoss 2010-08-10 16:43:56

+0

謝謝Brian。看起來你已經付出了很多努力,會試一試,讓你知道。 – BigBoss 2010-08-12 19:47:00

+0

工程就像一個魅力.. – BigBoss 2010-08-13 17:01:25