Email to Torsten Weber
Feed Icon
.NET User Group Leipzig

Zum zeilenweisen sortieren nehme ich bisher UltraEdit. Kann das eigentlich nicht Visual Studio auch? Nein, dieses Leistungsmerkmal nicht enthalten (@Tim: wie wäre das als ein Feature Request). Es gibt zwar eine Formatierung über Bearbeiten, Erweitert, Dokument formatieren, aber das ist auch schon alles. Extra dann UltraEdit einzusetzen, auch wenn es per Kontextmenü über die in Projektmappen enthaltenen Dokumente leicht geht, ist halt keine smarte Lösung. Die Anforderung, nur den markierten Bereich zu sortieren, bringt dann alles mit den Vorgängen Ausschneiden, Sortieren und Einfügen gleich noch mehr ins Wanken. Das habe ich als Anlass genommen und ein Makro geschrieben.

So sieht eine Datei, beispielweise eine OPML-Datei für einen Blog, unsortiert aus.
Sie ist hier im Beispiel partiell unsortiert und enthält leere Zeilen.

zeilenweise sortieren, nur den marktierten Bereich, in Visual Studio

Für eine Sortierung ist einfach der entsprechende Bereich zu markieren.
Die komplette Datei kann per Bearbeiten, Alle auswählen¹ oder STRG + A auch sortiert werden.

zeilenweise sortieren, nur den marktierten Bereich, in Visual Studio

Dann ist das Makro SortSelectionAndSmartFormat auszuführen und schon ist alles sortiert und formatiert.
So einfach geht's. Und integriert.

zeilenweise sortieren, nur den marktierten Bereich, in Visual Studio

Hier das Makro:

#Region "Sub SortSelectionAndSmartFormat"
   ' Sortiert und formatiert die aktuelle Auswahl.
   Sub SortSelectionAndSmartFormat()
      If (DTE.ActiveDocument Is Nothing) Then
         Exit Sub
      End If

      If (DTE.ActiveDocument.ReadOnly) Then
         Exit Sub
      End If

      Dim currentTextSelection As TextSelection
      currentTextSelection = DTE.ActiveDocument.Selection

      If (currentTextSelection.TextRanges.Count = 1) Then
         Exit Sub
      End If

      If (DTE.UndoContext.IsOpen) Then
         DTE.UndoContext.Close()
      End If

      Try
         DTE.UndoContext.Open("SortSelectionAndSmartFormat")
         currentTextSelection.SmartFormat()
      Catch
      End Try

      Try
         Dim currentLines() As System.String = Split(currentTextSelection.Text, vbCrLf)

         System.Array.Sort(currentLines)
         currentTextSelection.Delete()

         For Each i As System.String In currentLines
            If Not i = System.String.Empty Then
               currentTextSelection.Insert(i.Trim(vbCrLf) & vbCrLf)
            End If
         Next
         DTE.UndoContext.Close()

      Catch
      End Try

      Exit Sub
   End Sub
#End Region

Und hier das Makro SortSelectionAndSmartFormat (1,21 KB) zum Download.

¹ es sollte wohl richtig heißen "Alles auswählen", da hat wohl jemand das "s" vergessen Tim

Tuesday, March 18, 2008 4:39:29 PM (W. Europe Standard Time, UTC+01:00)
Hallo Torsten,

genau diese Funktion habe ich bisher auch immer vermisst und wie Du UltraEdit verwendet. Vielen Dank für dieses nützliche Makro. Unglaublich, dass es nicht dabei war. Ich bin sonst von der Funktionalität des Visual Studios recht begeistert.

Dass es "Alle auswählen" heisst, könnte sich damit erklären, dass damit Alle Zeilen auswählen gemeint ist. Insofern wäre das "s" optional.


Also vielen Dank und viele Grüße.
All comments require the approval of the site owner before being displayed.
Name
E-mail
(will show your gravatar icon)
Home page

Comment (Some html is allowed: a@href@title, b, blockquote@cite, em, i, strike, strong, sub, sup, u) where the @ means "attribute." For example, you can use <a href="" title=""> or <blockquote cite="Scott">.  

Live Comment Preview

Boldness, risk‐taking and a little bit of craziness – lateral thinker Torsten Weber
Boldness, risk‐taking and a little bit of craziness – lateral thinker Torsten Weber

.NET User Group Leipzig

Categories

Calendar

<February 2012>
SunMonTueWedThuFriSat
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

Archive

My subscribed blogs

show all
show less
Blogs of good friends (as OPML)
More Blogs (as OPML)