Sprache aus Dateinamen lesen und in CultureInfo konvertieren

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von jvbsl.

    Sprache aus Dateinamen lesen und in CultureInfo konvertieren

    Ich steh vor folgendem Problem und zwar habe ich mehrere Dateien die für unterschiedliche Sprachen sind. Die Sprache steht als Abkürzung im Dateinamen. Nun gibt es aber unterschiedliche Abkürzungen, die ich berücksichtigen muss. Wie kann ich nun bei folgenden Dateinamen die Sprache auslesen.


    Datei 1: proofsp2-fr-fr_92004894f79e0003801a0ccb8cdd77108f1f138f.cab
    Datei 2: bcm2007langpackqfe-kb946307-fullfile-fra_71f584d380480dd6f1ba501a3952e357a2d426cd.cab


    fr bzw. fra steht in dem Fall für Frankreich.
    Hi Singu!

    Datei 1: proofsp2-fr-fr_92004894f79e0003801a0ccb8cdd77108f1f138f.cab
    Datei 2: bcm2007langpackqfe-kb946307-fullfile-fra_71f584d380480dd6f1ba501a3952e357a2d426cd.cab


    Sieht eigentlich nach einem eindeutigen Muster aus. Sprache steht zwischen dem letzten Bindestrich und dem letzten Underscore.
    Das sollte mit Lastindexof und Substring easy zu machen sein. (Oder mit Regex).

    VB.NET-Quellcode

    1. Imports System.Globalization
    2. Dim cInfo As New CultureInfo("fr") ' als Beispiel
    3. 'Liste der zugelassenen Werte steht in MSDN.
    4. MessageBox.Show(cInfo.DisplayName)
    5. MessageBox.Show(cInfo.EnglishName)
    6. MessageBox.Show(cInfo.Name)
    7. MessageBox.Show(cInfo.ThreeLetterISOLanguageName)
    8. MessageBox.Show(cInfo.ThreeLetterWindowsLanguageName)
    9. MessageBox.Show(cInfo.TwoLetterISOLanguageName)


    Der Rest sollte mit der Cultureinfo-Klasse zu machen sein.

    LG, der_Kurt
    Danke, aber das hilft zwar weiter, aber ich will die Sprache auslesen und nicht prüfen ob die Sprache da drin ist.

    Edit: Am besten ist es wenn man die einzelnen Teile über Groups auslesen kan

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

    Hallo Singu,
    das lässt mir keine ruhe.
    Hast du mal mit Reflection reingesehen ? vieleicht steht ja was brauchbares drin ?
    Oder vieleicht über die Metagaten ? könnte sein ?

    Woher kommen diese Dateinamen ? Oder hast du das ausgelesen ?


    danke
    bernd
    :huh: Hab ich das eigentliche Problem verschlafen?

    Du hast im Dateinamen eine Abkürzung (z.B. "FR", "DE", "IT" ö.ä.). Dies kannst Du mit den Stringfunktionen oder mit Regex auslesen.
    Mit der Cultureinfo-Klasse kannst du (lt. Beispiel oben) aus dieser Abkürzung den Namen der Sprache ("Französisch", "Deutsch",...) auslesen.

    Habe bei mir getestet, ...deinen Dateinamen als Eingabe, als Ausgabe bekam ich "Französisch"

    LG, der_Kurt
    wie das mit RegEx geht kannst du ganz schnell rausfinden wenn du den Link aus Post 7 nimmst -.-
    Ich hab den Link aus Post 7 ausprobiert, aber das Ergebnis ist nicht das was ich wollte.

    So sieht es aus, da kann ich auch mit Contains prüfen

    VB.NET-Quellcode

    1. Imports System.Text.RegularExpressions
    2. Module Module1
    3. Sub Main
    4. Dim txt As String ="msxml6-kb925673-enu-x86_571e99946aa6674ee6a70cf5801682ec323c7ae0.exe"
    5. Dim re1 As String="(msxml6)" 'Variable Name 1
    6. Dim re2 As String=".*?" 'Non-greedy match on filler
    7. Dim re3 As String="(kb925673)" 'Variable Name 2
    8. Dim re4 As String=".*?" 'Non-greedy match on filler
    9. Dim re5 As String="(enu)" 'Variable Name 3
    10. Dim re6 As String=".*?" 'Non-greedy match on filler
    11. Dim re7 As String="(x86)" 'Alphanum 1
    12. Dim r As Regex = new Regex(re1+re2+re3+re4+re5+re6+re7,RegexOptions.IgnoreCase Or RegexOptions.Singleline)
    13. Dim m As Match = r.Match(txt)
    14. If (m.Success) Then
    15. Dim var1=m.Groups(1)
    16. Dim var2=m.Groups(2)
    17. Dim var3=m.Groups(3)
    18. Dim alphanum1=m.Groups(4)
    19. Console.WriteLine("("+var1.ToString()+")"+"("+var2.ToString()+")"+"("+var3.ToString()+")"+"("+alphanum1.ToString()+")"+"")
    20. End If
    21. Console.ReadLine()
    22. End Sub
    23. End Module
    24. '-----
    25. ' Paste the code into a new Console Application
    26. '-----


    Folgende Dateinamen möchte ich auslesen können.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. Dim Files As New List(Of String)
    4. Files.Add("msxml6-kb925673-enu-x86_571e99946aa6674ee6a70cf5801682ec323c7ae0.exe")
    5. Files.Add("capicom-kb931906-v2102_5891b5de8ce331dc998656e20f1ce0b795e88786.exe")
    6. Files.Add("bcm2007qfe-kb946140-fullfile-enu_9c8d60aef0faf5ba4a7b71ba3647241b89c19dda.cab")
    7. Files.Add("targetdir_6e283ea8ce0f01524f9e125369b56c716209f711.cab")
    8. Files.Add("clientsharedmuisp2-de-de_11efd7449ae5f046af1435206a18df583fafcb4b.cab")
    9. End Sub
    10. End Class
    und wenn in einem der Codes nicht nur fr sonder auch de o.ä. drin ist =? da reicht .Contains auch nich mehr
    Split(Split("_")(0),"-")(Split(Split("_")(0),"-").Length -1)

    ...

    aber mit RegEx geht das besser... sollte doch mit einem Regex "-?<Language>(.*)_"-> oder so ähnlich...

    Edit: achja falls du es noch nicht registriert hast, alles andere Wichtige hat bereits der_Kurt geschrieben...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---