Ersatz für VB6 Syntax: Mid$(einString, 1, 1) = "r"

  • Allgemein

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Kangaroo.

    Ersatz für VB6 Syntax: Mid$(einString, 1, 1) = "r"

    Hallo Leute,

    ich portiere momentan ein älteres meiner VB6-Projekte in VB.NET..
    Diese Funktion hier, gibt mir einen String zurück, der die übergebenen FileAttribute darstellt - genau so wie z.B. im "Total Commander" von Christian Ghisler.
    So wie die Funktion jetzt hier steht, funktioniert sie zwar anstandslos in VB.NET, aber ich möchte sehr gern die VB6-Leiche "Mid" loswerden.

    Leider finde ich keine einfache und übersichtliche Entsprechung für z.B. Mid$(einString, 1, 1) = "r"

    Habt Ihr eine Idee?

    VB.NET-Quellcode

    1. '======================================================================================
    2. ' convert attributes to string
    3. '======================================================================================
    4. Private Function GetAttrStr(ByVal aAttr As System.IO.FileAttributes) As String
    5. Dim sAttr As String = "---- "
    6. If aAttr And FileAttributes.ReadOnly Then Mid$(sAttr, 1, 1) = "r"
    7. If aAttr And FileAttributes.Archive Then Mid$(sAttr, 2, 1) = "a"
    8. If aAttr And FileAttributes.Hidden Then Mid$(sAttr, 3, 1) = "h"
    9. If aAttr And FileAttributes.System Then Mid$(sAttr, 4, 1) = "s"
    10. If aAttr And FileAttributes.Compressed Then Mid$(sAttr, 5, 1) = "c"
    11. Return sAttr
    12. End Function


    LG,
    Bruno

    diylab schrieb:

    Leider finde ich keine einfache und übersichtliche Entsprechung für z.B. Mid$(einString, 1, 1) = "r"

    Die String-Methoden selber geben sowas nicht so richtig her, ausser Du arbeitest mit Insert und Remove . Aber die Stringbuilder Klasse kann es dafür sehr schön und ist noch erheblich performanter als String:

    VB.NET-Quellcode

    1. Dim s As New StringBuilder("----")
    2. s(0) = "a"c
    3. s(3) = "r"c
    4. MessageBox.Show(s.ToString)

    Wenn man fertig ist mit den Operationen, gibt man einfach das Ergebnis mit .toString als String zurück.
    Aber die Stringbuilder Klasse kann es dafür sehr schön und ist noch erheblich performanter als String

    Klasse - das wars - Dankeschön :P !


    VB.NET-Quellcode

    1. '======================================================================================
    2. ' format attributes to string
    3. '======================================================================================
    4. Private Function GetAttrStr(ByVal aAttr As System.IO.FileAttributes) As String
    5. Dim s As New StringBuilder("---- ")
    6. If aAttr And FileAttributes.ReadOnly Then s(0) = "r"c
    7. If aAttr And FileAttributes.Archive Then s(1) = "a"c
    8. If aAttr And FileAttributes.Hidden Then s(2) = "h"c
    9. If aAttr And FileAttributes.System Then s(3) = "s"c
    10. If aAttr And FileAttributes.Compressed Then s(4) = "c"c
    11. Return s.ToString
    12. End Function


    Der StringBuilder ist eine tolle Erfindung, den werde ich wohl öfter benutzen.

    LG,
    Bruno

    PS: @Dodo - Du schriebst, Du würdest es anders lösen? In welche Richtung geht denn Dein Gedankengang? Neugierig bin ich schon.. :rolleyes:
    In diese ^^ wollte aber nicht alles vorsagen, ich bin ein Unterstützer der Eigeninitative *g*

    Jupp - ist auch ok so.
    Ich helfe zwar auch gern und wenn ich etwas weiß auch ausführlich, aber Eigeninitiative ist immer gut. Manchmal braucht man aber einen Schubs in die richtige Richtung..

    Mein Control nimmt nun Gestalt an, aber wenn ich an das letzte Problem denke: "Reparsing Points", dann wird mir heiß und kalt zugleich.
    Das wird eine echt harte Nuss und da brauch ich bestimmt wieder ein bisschen Input 8-).

    LG,
    Bruno
    Bilder
    • dgv_files.png

      65,18 kB, 805×394, 88 mal angesehen

    diylab schrieb:

    aber wenn ich an das letzte Problem denke: "Reparsing Points", dann wird mir heiß und kalt zugleich.

    Was auch immer Reparsing Points sein mögen, klingt jedenfalls interessant ;)

    Von solchen Fragen lebt schliesslich das Forum, es wäre ja auch stinklangweilig immer nur die gleichen Anfängerfragen zu beantworten. Schliesslich lernen wir so ja alle dazu ...