.ini Datei auswerten/lesen

  • VB.NET

Es gibt 31 Antworten in diesem Thema. Der letzte Beitrag () ist von MatthiasB.

    .ini Datei auswerten/lesen

    Hallo,
    Ich würde gerne eine .ini DAtei auslesen und so wiedergeben, das das so ausschauen tut:

    Server | Adrresse/URL
    Homepage homepage.de/mods

    die ini-Datei schaut so aus:

    Quellcode

    1. [Server]
    2. Website
    3. [url]
    4. http://webiste.com/mods
    5. [Server2]
    6. Website
    7. [url2]
    8. http://website.de/mods


    also in einer Tabelle wiedergeben :)
    Hallo,
    ich finde es immer etwas schade, wenn manche nur einen Link posten, ohne etwas dazu zu sagen..
    Ich habe dir auch einen Link herausgesucht von vbarchiv, wo es einen kleinen Workshop gibt. Ist zwar etwas länger aber ich denke, da auch viel an Grundlagen und Sachen nebenbei erzählt wird, dass es doch ganz nützlich ist.
    vbarchiv.net/workshop/details.php?id=21
    Hier ist nochmal ein Link, welcher alles nochmals aufs wesentliche gekürzt hat:
    shadoware.de/vb/ini.html

    EDIT:

    Du könntest doch deine Datei folgendermaßen anlegen:

    "SERVER1"_TRENNZEICHEN_"WEBSEITE1"

    "SERVER2"_TRENNZEICHEN_"WEBSEITE2"

    Du könntest deine Datei dann jeweils Zeilenweise auslesen und mit Hilfe des Trennzeichens (vlt ein Semikolon oder "+++") beide Elemente voneinander trennen und dann weiter verarbeiten.

    Oder was hälst du vom guten, alten CSV (Comma Separated Value) Format? Dann würdest du "Server,Link" schreiben.
    Wo hängt es denn, damit wir dir weiterhelfen können?

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

    ch finde es immer etwas schade, wenn manche nur einen Link posten, ohne etwas dazu zu sagen..

    Im link steht schon alles beschrieben, da gibts nicht mehr zum sagen.
    Links die du gepostet hast sind Vb6 code.

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

    MatthiasB schrieb:

    Oder was hälst du vom guten, alten CSV (Comma Separated Value) Format? Dann würdest du "Server,Link" schreiben.


    Hey das könnte ich auch benutzen, mir ist es wayne wie es in der Datei ausschaut ;P

    Das Problem ist, wie ich die Tabelle in VB hinbekomme, die sieht sau "hässlich" aus mit DataGrid :(

    Und bis jetzt habe ich noch keine weitere Alternative gefunden.
    Wäre das in einer ListBox realisierbar ? :)
    Wenn ich das richtig verstanden habe, kommen für dich auch .XML Dateien infrage.

    Für deinen Zweck sieht es ungefähr so aus:

    -> Imports System.Xml

    VB.NET-Quellcode

    1. Dim Anzahl As Integer = 5 'Anzahl der server
    2. Dim xml_settings As New XmlWriterSettings()
    3. xml_settings.Indent = True
    4. xml_settings.Encoding = System.Text.Encoding.ASCII
    5. Try
    6. Dim xmlwrt As XmlWriter = XmlWriter.Create("C:\Daten.xml", xml_settings)
    7. With xmlwrt
    8. .WriteStartElement("Daten")
    9. For i = 1 To (Anzahl) Step 1
    10. .WriteStartElement("Server" + i.ToString)
    11. .WriteStartAttribute("Variablen")
    12. .WriteAttributeString("website", "Name der Website" + i.ToString)
    13. .WriteAttributeString("url", "homepage.de/mods" + i.ToString)
    14. .WriteEndElement()
    15. Next
    16. .WriteEndElement()
    17. .Close()
    18. End With
    19. Catch ex As Exception
    20. MessageBox.Show(ex.ToString)
    21. End Try

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

    danke, ja die xml-datein kommen auch in frage,
    aber wie würde jetzt die XML-Datei ausschauen ?

    EDIT://

    da kommt nur in die Datei:

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8"?>


    Der vb-code:

    VB.NET-Quellcode

    1. Dim Anzahl As Integer 'Anzahl der server
    2. Dim xml_settings As New XmlWriterSettings()
    3. 'settings.Indent = True
    4. Try
    5. Dim xmlwrt As XmlWriter = XmlWriter.Create("D:\Daten.xml", xml_settings)
    6. With xmlwrt
    7. .WriteStartDocument()
    8. For i = 1 To (Anzahl) Step 1
    9. .WriteStartElement("Server " + i.ToString)
    10. .WriteStartAttribute("Variablen")
    11. '.WriteElementString("Website")
    12. '.WriteAttributeString("URL")
    13. .WriteEndElement()
    14. Next
    15. '.WriteEndDocument()
    16. .Close()
    17. End With
    18. Catch ex As Exception
    19. MessageBox.Show(ex.ToString)
    20. End Try


    Das was auskommentiert ist, kamen fehler :)
    Setting >

    Quellcode

    1. Fehler 1 "settings" wurde nicht deklariert. Auf das Objekt kann aufgrund seiner Schutzstufe möglicherweise nicht zugegriffen werden. D:\Lars\Documents\Visual Studio 2010\Projects\LS2011 Launcher\LS2011 Launcher\Form3.vb 29 9 LS2011 Launcher


    WriteElementString >

    Quellcode

    1. Fehler 1 Fehler bei der Überladungsauflösung, da keine zugreifbare "WriteElementString" diese Anzahl von Argumenten akzeptiert. D:\Lars\Documents\Visual Studio 2010\Projects\LS2011 Launcher\LS2011 Launcher\Form3.vb 41 21 LS2011 Launcher


    WriteAtributeString >

    Quellcode

    1. Fehler 2 Fehler bei der Überladungsauflösung, da keine zugreifbare "WriteAttributeString" diese Anzahl von Argumenten akzeptiert. D:\Lars\Documents\Visual Studio 2010\Projects\LS2011 Launcher\LS2011 Launcher\Form3.vb 42 21 LS2011 Launcher


    .WriteEndDocument() >

    Und das wars.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Evolutio“ ()

    Jupp, hab mein Code geändert, da ich den vorher nicht getestet habe.

    Bei dem Beispiel sieht es jetzt folgender maßen aus:

    XML-Quellcode

    1. <?xml version="1.0" encoding="US-ASCII"?>
    2. -<Daten>
    3. <Server1 url="homepage.de/mods1" website="Name der Website1" Variablen=""/>
    4. <Server2 url="homepage.de/mods2" website="Name der Website2" Variablen=""/>
    5. <Server3 url="homepage.de/mods3" website="Name der Website3" Variablen=""/>
    6. <Server4 url="homepage.de/mods4" website="Name der Website4" Variablen=""/>
    7. <Server5 url="homepage.de/mods5" website="Name der Website5" Variablen=""/>
    8. </Daten>
    Achso, du wolltest es Tabbelarisch anzeigen lassen..
    Du könntest es eben über ein Datagrid machen (gibt sehr viele Stylings dafür, um es schön zu machen). Oder aber, wie wäre es alternativ mit einer Listbox?
    In WPF (ich gehe davon aus, dass du VS2010 etc benutzt) kannst du ja DataTemplates und ItemTemplates erstellen (welche du auch mit dem DataGrid benutzen kannst) um dort deine grafische Ausgabe anzupassen.

    Um somit deine Frage zu beantworten: Ja, das wäre es.
    Was willst du denn genau mit den Daten machen?

    Zum anschauen ist das mit einer Listbox natürlich auch möglich aber meiner Meinung nach ein wenig unübersichtlich.
    Als alternative zum Datagridview kannst du auch ein TableLayoutPanel verwenden. -> Label´s hinzufügen und diese dann mit dem Passenden Text befüllen.
    Wenn du z.B. nur Server1 auswählen möchtest und die dazugehörige URL "intern" verwendest. Dann wäre eine Combobox auch nicht schlecht.

    Evolutio schrieb:

    @Duff411 danke dir ;)
    Ja, kann ich auch benutzen, es soll nur 3Spalten haben, wo halt der XML ausgegeben wird.


    In WPF kannst du u.a. folgendes erstellen:

    XML-Quellcode

    1. <ListBox Name="lbxListe" ItemsSource="{Binding}">
    2. <DataTemplate>
    3. <StackPanel Orientation="Horizontal">
    4. <TextBox Name="txtEins" Text="{Binding Path=text1}" />
    5. <TextBox Name="txtZwei" Text="{Binding Path=text2}" />
    6. <TextBox Name="txtDrei" Text="{Binding Path=text3}" />
    7. </StackPanel>
    8. </DataTemplate>
    9. </ListBox>
    Hiermit hättest du eine Listbox, wo jedes Element ein Datatemplate hätte. (drei Einträge) und mittels Databinding etc könntest du dieser Liste dann einfach eine Liste of MeineKlasse übergeben (MeineKlasse hätte dann die drei variablen "text1" , "text2" , "text3" ) und somit könntest du in einer Listbox mehrere Daten, dreispaltig anzeigen lassen.Über genauere Styles etc kannst du dir ja ALLES individuell zurechtschneiden (Breite, höhe, wie Weit die Einträge auseinander seinen sollen etc)
    Warum so umständlich? Du nimmst jede beliebige INI-Class zum Auslesen und der Rest ist simples VB schreiben.
    (Geht bestimmt einfacher, aber nach ein paar Bier habe ich keine sonderliche Lust es umbedingt schön aussehen zu lassen, geht ja nur um's Prinzip)

    VB.NET-Quellcode

    1. Dim str as String = ""
    2. str = ini_read("Server", "") + " " + ini_read("url")
    3. RichTextBox1.AppendText(str + vbNewLine) 'habe hier ne Richtextbox genommen, kanst aber auch Listview oder Listbox oder was du willst nehmen, hast's schließlich nicht genau geschrieben
    4. For i as integer = 1 to 91231 'oder wie viele Einträge in der INI stehen
    5. str = ini_read("Server" + i.ToString, "") + " " + ini_read("url" + i.ToString)
    6. RichTextBox1.AppendText(str + vbNewLine)
    7. Next


    So Pi mal Daumen würde ich es machen. Wüsste nicht wieso du dafür umbedingt XML etc. brauchst.

    //edit: Würde es dir dann in diesr Weise ausgeben:

    Server url.de
    Server1 url1.de
    Server2 url2.de

    Kannst den Code ja beliebig anpassen wenn du z.B. in ner Listview haben willst.
    Achso du benutzt Forms, dann geht das leider nicht, so wie ich mir das dachte :S (Bin in der WPF-Welt)
    Ja entweder packst du dann alles in ein Label/Textbox wie auch immer oder du erstellst mehrere textboxen/labels denen du dann den Wert zuweist. Müsstest diese dann nur eben entsprechend poitionieren.
    @ MatthiasB -> Mit dein Vorschlag bekommt man aber das Gewünschte Design.

    Kenn mich mit WPF leider nicht aus. Bin gerade dabei mich ein wenig einzulesen/ausprobieren.

    Man kann aber ein WPF in einer Form einbinden -> ElementHost
    Dann sollte der rest mit Databinding auch möglich sein oder?
    Ich habe mir das so gedacht:

    Das in einer ListBox .
    Die Server sollen halt aus einer Dateigelesen werden.
    Meinetwegen kann die auch so aussehen:

    Server.txt
    Server1,URL1,Website1
    Server2,URL2,Website2

    Oder
    [Server]
    Server1=Server1
    URL1=http://whatever.de/mods
    Website1=http://whatever.de

    oder

    Server1
    URL1
    website1

    Server2
    usw

    es kann auch ne .xml sein. oder eine .dat/bin oder .csv oder .exl
    Hauptsache, so wie ich es haben möchte geht es in der Art :)

    Danke euch allen erstmal :)