0

「こんにちは」+変数+「、プロジェクトへようこそ」などの文字列操作が多くの場所で使用されているプロジェクトを開発中です(例は非常にマイナーなものです)。

要件の1つは、string.formatスタイルに変換することです。

それは非常に長くて退屈な仕事であり、変換中に人為的エラーが発生する可能性があるため、以前の作業コードを壊したくありません。

それを処理するために作成できるマクロまたはVSコマンドがあればいいのですが。コードのブロックをマークし、リファクタリングオプションでExtract関数を実行するのと同じです。

4

1 に答える 1

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
于 2010-08-10T00:57:40.097 に答える