2010-07-28 2 views
0

У меня есть проект в разработке, где строковые операции, такие как «Привет» + переменная + », приветствуются в Project», используются во многих местах (данный пример очень незначительный один).VS Macro/надстройка для преобразования конкатенаций строк в string.format style

Одним из требований является преобразование его в стиль string.format.

Это очень длинная и утомительная работа, где я бы не хотел разорвать предыдущий рабочий код из-за любой человеческой ошибки, которая может произойти при ее преобразовании.

Я бы хотел, чтобы какие-либо макросы или команды VS, которые я могу создать для ее обработки. Точно так же, как мы отмечаем блок кода и выполняем функцию Extract в параметрах Re-factor.

+0

Ваш вопрос? Я уверен, что никто не собирается писать полную команду для вас :) Проанализируйте проблему и разбейте ее на управляемые части. –

+0

Если не команда, то поможет указатель на то, как создать. Но я ожидал, что что-то подобное уже должно быть там, так как оно очень общее. – BigBoss

+0

предоставил код ниже, так как вы не можете получить доступ к моему блогу –

ответ

2

Я чувствовал, что код был немного долго, чтобы разместить здесь, но я отправил ответ на моем блоге: http://www.brianschmitt.com/2010/08/converting-concatenated-string-into.html

- EDIT - Per комментарий здесь является соответствующий макрос - не знаю, почему вы не можете доступ ...

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

+0

Спасибо Брайан. Похоже, вы приложили много усилий, попробуете и дадите знать. – BigBoss

+0

Работает как очарование .. – BigBoss