Country Lokalisation - CSV Datei in Projekt einbinden und nutzen .

  • VB.NET
  • .NET (FX) 3.0–3.5

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

    Country Lokalisation - CSV Datei in Projekt einbinden und nutzen .

    Hallo ihr lieben .
    Ich hab 2 kleine Frage !
    Die beiden Fragen beziehen sich hierbei auf eine Country Lokalisation.

    1.) Wie kann ich eine ca. 13 MB Große CSV Datei in mein Projekt einbinden und nutzen , oder soll ich sie lieber draußen lassen ?

    2.) Wohin am besten mit den ganzen Flaggen die ich von hier nehmen möchte (( free-country-flags.com/ ))

    Vielen Dank ... :)
    Hi TVX,

    1) du kannst für die CSV-Datei My.Resources verwenden, aber wenn du den My-Namespace nicht benutzen
    willst, musst du sie mitliefern.

    2) Ich würde die Links mit Regex filtern und dann runterladen und einblenden.

    MFG

    Alex-Digital :D
    ~ Alex-Digital :D

    if(!Internet.VBP.Get<User>("Alex-Digital").IsOnline) this.Close(); :D
    @TVX Wenn Du Deine Programme mehrsprachig machen willst, gugst Du hier.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Alex ! Was für Links ,es gibt keine ,ich filtere keine Webseite !

    ZB:

    "1.0.0.0","1.0.0.255","16777216","16777471","AU","Australia"
    "1.0.1.0","1.0.3.255","16777472","16778239","CN","China"
    "1.0.4.0","1.0.7.255","16778240","16779263","AU","Australia"
    "1.0.8.0","1.0.15.255","16779264","16781311","CN","China"
    "1.0.16.0","1.0.31.255","16781312","16785407","JP","Japan"
    "1.0.32.0","1.0.63.255","16785408","16793599","CN","China"
    "1.0.64.0","1.0.127.255","16793600","16809983","JP","Japan"

    Danke RodFromGermany werde ich mir genauer ansehen ...
    So habs jetzt so gelöst + noch en Update Tool für die Liste :

    1.0.0.0,1.0.0.255,16777216,16777471,AU,Australia*
    1.0.1.0,1.0.3.255,16777472,16778239,CN,China*
    1.0.4.0,1.0.7.255,16778240,16779263,AU,Australia*
    1.0.8.0,1.0.15.255,16779264,16781311,CN,China* Usw.....

    Code:

    Quellcode

    1. Option Strict On
    2. Imports System.IO
    3. Public Class Form1
    4. Private IPCountryClass As IPCountry
    5. Private IPCountryList As New List(Of IPCountry)
    6. Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles Me.Shown
    7. Button1.Enabled = False
    8. If BackgroundWorker1.IsBusy = False Then BackgroundWorker1.RunWorkerAsync()
    9. End Sub
    10. Dim Buttons_Freigabe As Boolean
    11. Dim Load_Prüfung_Text As String
    12. Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
    13. Try
    14. Dim arr() As String = My.Resources.GeoIPCountryWhois.Split(CChar("*"))
    15. For i As Integer = 0 To arr.Length - 1
    16. Dim line() As String = arr(i).Replace(vbCrLf, "").Split(CChar(","))
    17. IPCountryClass = New IPCountry
    18. IPCountryClass.IPStart = Convert.ToInt64(line(2))
    19. IPCountryClass.IPEnd = Convert.ToInt64(line(3))
    20. IPCountryClass.CountryName = line(5)
    21. IPCountryList.Add(IPCountryClass)
    22. Next
    23. Buttons_Freigabe = True
    24. Load_Prüfung_Text = "Database loaded successfully"
    25. Catch ex As Exception
    26. Buttons_Freigabe = False
    27. Load_Prüfung_Text = "Database loaded Error"
    28. End Try
    29. End Sub
    30. Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
    31. TextBox1.Text = Load_Prüfung_Text
    32. Button1.Enabled = Buttons_Freigabe
    33. End Sub
    34. Private Function IPToCountry(ByVal ip As String) As String
    35. Try
    36. Dim h, m, l As Integer
    37. Dim IPSplit() As String = ip.Split(CChar("."))
    38. Dim n As Int64 = (Convert.ToInt64(IPSplit(0)) * 16777216) + _
    39. (Convert.ToInt64(IPSplit(1)) * 65536) + _
    40. (Convert.ToInt64(IPSplit(2)) * 256) + _
    41. Convert.ToInt64(IPSplit(3))
    42. l = 1
    43. h = IPCountryList.Count
    44. Do Until l > h
    45. m = (h - l) \ 2 + l
    46. If n < IPCountryList(m).IPStart Then
    47. h = m - 1
    48. Else
    49. If n > IPCountryList(m).IPEnd Then
    50. l = m + 1
    51. Else
    52. Return IPCountryList(m).CountryName
    53. End If
    54. End If
    55. Loop
    56. Return "Unknown Country!"
    57. Catch ex As Exception
    58. Return ex.Message.ToString
    59. End Try
    60. End Function
    61. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    62. MessageBox.Show(IPToCountry(TextBox2.Text.ToString))
    63. End Sub
    64. End Class
    65. Public Class IPCountry
    66. Public CountryName As String
    67. Public IPStart As Int64
    68. Public IPEnd As Int64
    69. End Class


    Oder versuchen die Klassen zu in einer XML Datei zu Speicher :?: 13 MB :!:
    Muss ich mir aber noch genauer ansehn , wie das richtig geht :/


    Download: IP Contry.7z
    www32.zippyshare.com/v/2337260/file.html

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

    Oder versuchen die Klassen zu in einer XML Datei zu Speicher :?: 13 MB :!:
    Muss ich mir aber noch genauer ansehn , wie das richtig geht :/


    Warum kein Dataset? Dann kannst Du die Daten ohne Probleme und ohne Dich überhaupt um den Aufbau des XML-Dokumentes selbst kümmern zu müssen abspeichern und beim Programmstart wieder einlesen.
    Warum speicherst Du die IP-Adressen doppelt ab? Benötigst Du die Dezimalwerte? Berechne Sie doch aber vermeide Redundanz.

    TVX schrieb:

    VB.NET-Quellcode

    1. Imports Microsoft.VisualBasic.FileIO
    What :?:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wenn Du Mehrsprachigkeit einbauen möchtest, bietet sich Serializing am Besten an. Die Methode von Rod ist gut, aber das Problem ist, dass Du mit der nur die GUI-Elemente direkt anpassen kannst, keine Strings innerhalb deiner Klasse.
    Serialisiere am Besten mit JSON, das gibt dann auch keinen so gewaltigen Overhead, wie bei XML.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    Trade schrieb:

    keine Strings innerhalb deiner Klasse.
    Da hast Du nicht ganz zu Ende gelesen. Lokalisierte String Ressourcen ist in VB nur ein wenig stressig anzulegen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany Hm ok, jedoch finde ich das deshalb dann über serialisieren einfacher :D
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Danke Jungs ich hab gestern mal angefangen, mir das Serialisieren anzuschauen .
    Musste aber noch Arbeiten ,jetzt noch einkaufen und dann versuch ichs mal :)

    Ich hab oben noch den Code verbessert und ne Mappe in 2012 angehängt die so funktionstüchtig ist ^^

    Also ich wollte dann eigentlich versuchen den geladenen Inhalt von (( Private IPCountryList As New List(Of IPCountry) direkt abzuspeichern und zu laden ))

    Lg

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