'Sonderzeichen aus Ordnernamen oder Dateinamen entfernen .

  • VB.NET
  • .NET (FX) 4.0

Es gibt 33 Antworten in diesem Thema. Der letzte Beitrag () ist von TVX.

    Du meinst die Erweiterungen - Funktionen die der Klasse zur Verfügung stehen oder ?

    Und Füllen :

    VB.NET-Quellcode

    1. Dim dict = New Dictionary(Of Integer, String) From {{1, "Test1"}, {3, "Test3"}, {2, "Test2"}}
    2. MsgBox(dict(3).ToString)​


    Allerdings hab ich gemerkt das beim Zeichen ersetzen mit regex
    einige Zeichen als Steuerzeichen gedeutet werden können - da muss ich mal nachschauen wie ich das umgehen kann !

    Wichtige reguläre Ausdrücke beim Suchen und Ersetzen in Visual Studio anschauen .

    Lg muss weiter Arbeiten

    TVX schrieb:

    Allerdings hab ich gemerkt das beim Zeichen ersetzen mit regex
    einige Zeichen als Steuerzeichen gedeutet werden können - da muss ich mal nachschauen wie ich das umgehen kann !
    ja, da schau am besten in meine Funktion - da ist das ja gelöst.

    Extrem verwunderlich auch, dass du jetzt ein Dictionary(Of Integer, String) am Wickel hast, wo ich doch seit post#8 nix anneres predige als: Nimm ein Dictionary(Of Char, String)!

    achjeh, und wieder das leidige ToString überall anhängen - also das kannst du eiglich besser.
    Welchen Datentyp hat dict(3)?
    Ja war sehr dumm von mir , muss ich dir wohl leider recht geben !

    Könntest du mir bitte diese 2 kurz erläutern ?

    VB.NET-Quellcode

    1. Escape(String.Concat(replacements.Keys))
    2. Function(mt) replacements(mt.Value(0)


    Also dann So:
    Die Funktion:

    VB.NET-Quellcode

    1. Private Function ProposeFileName(filename As String, replacements As Dictionary(Of Char, String)) As String
    2. Dim pattern = System.Text.RegularExpressions.Regex.Escape(String.Concat(replacements.Keys))
    3. Return System.Text.RegularExpressions.Regex.Replace(filename, "[" & pattern & "]+", Function(mt) replacements(mt.Value(0)))
    4. End Function


    Der Aufruf mit gefülltem Dictionary:

    VB.NET-Quellcode

    1. MsgBox(ProposeFileName("Ä_Ü_Ö_~~~_? ([]", New Dictionary(Of Char, String) From {{CChar("Ä"), "Ae"}, {CChar("Ü"), "Ue"}, {CChar("Ö"), "Oe"}, {CChar("~"), "."}}))


    Oder z.B Dictionary aus einer Textdatei füllen:

    VB.NET-Quellcode

    1. Dim dict As New Dictionary(Of Char, String)
    2. For Each line As String In IO.File.ReadAllLines("Sonderzeichen_Liste.txt")
    3. Dim parts() As String = line.Split(CChar(",")
    4. )dict.Add(CChar(parts(0)), parts(1))
    5. Next

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „TVX“ ()

    übersichtlicher gecodet:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim replacements = New Dictionary(Of Char, String) From {{"Ä"c, "Ae"}, {"Ü"c, "Ue"}, {"Ö"c, "Oe"}, {"~"c, "."}}
    3. MessageBox.Show(ProposeFileName("Ä_Ü_Ö_~~~_? ([]", replacements))
    4. End Sub
    beachte, wie man in vb.net einen Char notiert (im Gegensatz zu String). bitte nicht CChar()!


    TVX schrieb:

    Aber das würde er nicht richtig nehmen [] ,wen schon den schon
    was meinst du mit "nicht nehmen"?
    Wenn du auch '[' replacen willst, dann pack ein betreffendes Replacement mit ins Dictionary, zB {"["c,"->"}

    Escape(String.Concat(replacements.Keys))
    Was steht denn im ObjectBrowser als Zusammenfassung zur Regex.Escape-Funktion?


    Und nochn Tipp: böse Funktionen vermeiden
    daran, dass du noch msgbox benutzst, sieht man, dass du noch immer den ungünstigen General-Import auf Microsoft.Visualbasic hast. Schmeiss den raus (meine Empfehlung).


    Function(mt) replacements(mt.Value(0) so - jetzt kommen wir zu wirklich was trickigem: Das ist eine anonyme Methode - weisst du, was anonyme Methoden sind?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    1.
    Escape(String.Concat(replacements.Keys))

    Versieht einen minimalen Satz von Zeichen und Leerraum mit Escapezeichen .......
    So wird das Modul für reguläre Zeichen angewiesen diese wörtlich zu interpretieren und nicht als Metazeichen !

    2.
    Anonyme Methoden sind Methoden, die nur über einen Delegaten referenziert werden. Sie besitzen keinen Namen und können deswegen auch nicht über diesen aufgerufen werden.....
    Ouelle :
    juergen-bayer.net/artikel/CSha…Ausdruecke_002.aspx#h1_23


    Und ja du hattest Recht( Dictionary ) ist wirklich ne feine Sache ^^
    LG Andre

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „TVX“ ()

    TVX schrieb:

    So wird das Modul für reguläre Zeichen angewiesen diese wörtlich zu interpretieren und nicht als Metazeichen !
    womit gesagt ist, dass er dank des Escapens Zeichen wie [] eben doch "nimmt" (falls du mit "nehmen" dieses gemeint hast).



    TVX schrieb:

    Anonyme Methoden sind Methoden, die nur über einen Delegaten referenziert werden. Sie besitzen keinen Namen und können deswegen auch nicht über diesen aufgerufen werden.....
    Dann ist dieser Ausdruck Function(mt) replacements(mt.Value(0)) doch geklärt: Es ist eine vollständige kleine Funktion.
    Du kannst jetzt eine Datentyp-Übung machen, um rauszufinden, was diese Funktion als argument erwartet, und was sie dafür zurückgibt.
    Also Vorgehensweise wie in Welchen Datentyp hat das Objekt? gezeigt.
    du hast scheints die Frage nicht verstanden - nochmal:
    Der Teilausdruck Function(mt) replacements(mt.Value(0)) ist eine komplette kleine Funktion, mit 1 Argument und einem Rückgabewert.
    Die Frage lautet: Welchen Datentyp hat das Argument, und welchen Datentyp hat der Rückgabewert?

    Geh in den Code, und finde es heraus - wie in Welchen Datentyp hat das Objekt? gezeigt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Frage immer noch nicht verstanden. Noch einmal:
    Gegeben ist die anonyme Function Function(mt) replacements(mt.Value(0)).
    1. Welchen Datentyp hat das Argument?
    2. welchen Datentyp gibt die Function zurück?

    Antworten wie "Es verhindert eine Rückgabe" oder "es ruft einen Wert ab" sind semantisch sinnlos, also haben überhaupt keinen Bezug zur Frage.
    Die Antwort kann nur lauten:
    1. Das Argument mt hat den Datentyp: ...
    2. Der Rückgagbewert hat den Datentyp: ...
    Die Lösungen sind auch kinderleicht zu finden, du musst nur mittm Mauszeiger über dem Code herumwackeln, bis Intellisense dir die Datentypen anzeigt.
    Wie in Welchen Datentyp hat das Objekt?-Video vorgeturnt.
    Edit zur Vervollständigung der Conversation :

    TVX :

    Also (mt) wird das regex Match zugetragen .Hiervon - das regex Match mit value 0 genommen und mit replacements getauscht und an - Function(mt) zurückgegeben .Oder ?

    ErfinderDesRades:

    Ums klar auszudrücken: mt ist ein Match.Also ich leier es mal runter:mt ist das Argument der Function, und ist vom Typ Match.Dieser Match hat eine Value-Property As String.Von diesem String das erste Zeichen As Charwird als Index des Dictionary(Of Char, String) benutzt, ruft also den im Dictionary mit dieem Char assoziierten String ab.Langer Rede kurzer Sinn: In die Methode geht ein Match hinein, und kommt ein String heraus - eine Converter-Funktion.Eingebaut das ganze in eine geeignete Regex.Replace-Überladung - was steht zu dieser Überladung im OB als Summary?

    VIELEN DANK :thumbsup: ErfinderDesRades :thumbsup: für die ausgiebige Erleüterung :!: