Announcement

Collapse
No announcement yet.

Konstanten in TXT und diese auslesen?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Konstanten in TXT und diese auslesen?

    moien,

    ich würde gerne meine konstanten ausserlab des programm auslagern, damit man die auch mal einfacher ändern kann und nicht immer direkt am programm rumfingern muss.

    also zb in der art

    k1 = 2
    k2 = 3

    alpha = 90

    y1 = 10
    y2 = 20
    y3 = 40


    also mehrer werte,verschiedene arten von werten, die auch mal erweiter werden können,also hinzufügen von kn und yn (werte rein fiktiv).

    also, meine frage dazu ist also.

    wie mach ich das genau, welchen code öffnet mir die txt und liest die aus.
    wie lese ich am besten aus, da ich ja nicht nach festen zeilen gehen kann, sondern kann ich nach der zeile suchen wo k1 steht und dann den wert abfragen?
    und welche art von format wäre am besten? einfach pro zeile lassen, mit einem erkennung/stopperzeichen wie ";" versehen?

    grüße, Andreas

  • #2
    Hallo -horn-,

    ich würde sagen, dass Textdateien nicht mehr "state of the art" wären, gerade, wenn dynamisch Parameter konfiguriert werden sollen (Parameter oder Konstanten sehe ich in diesem Zusammenhang gleich), dann würde ich viel eher auf XML setzen.

    - XML kann mittels einem Schema überprüft werden, und somit ist die Sicherheit gegeben, dass bestimmte Daten auch enthalten sind
    - XML kann man mittels der Methode "XmlDocument.Load(p_sFilename As String)" von einer Datei vollständig ausgelesen werden
    - Die Konstanten könnten alle in einem bestimmten Knoten untergebracht sein, der bei XML mittels XPath auf einmal ausgelesen und durchiteriert werden "XmlDocument.SelectNodes(p_sXPathExpressuin As String)" -> liefert array mit allen Elementen

    Also vor Xml würde ich dann nur noch eine Datenbank in Betracht ziehen, kann aber oft, wie in Deinem Falle oversized sein.

    Viele Grüße
    _ntr_

    Comment


    • #3
      moien,

      hast du da irgendwo ein beispiel für mich wie dann die datei, und der code im programm zum auslesen und weitergeben an daspogramm aussehn muss?

      grüße, Andreas

      Comment


      • #4
        Die Lösung per XML-Configdateien ist bereits Bestandteil von VS.
        Ließ mal dir mal in der MSDN den Punkt über 'Application Settings' durch.

        Die Kurzfassung(Bauanleitung)

        Öffne in VS die Projektoptionen.
        Geh auf den Reiter Settings(heißt vermutlich 'Einstellungen' in einem Deutschen VS) und trage dort einfach Namen,Typ und Wert für deine ~Konstante~ ein.

        VS erzeugt dann beim Build automatisch eine XML-Datei mit Namen 'MeinProjektname.exe.config' in dem diese dann eingetragen werden und dann natürlich auch manuell dort ohne Rebuild des Projekts geändert werden können.

        Im Code kannst du dann deine Konstante per 'My.Settings.MeinKonstantenName'
        ansprechen.

        Comment


        • #5
          Originally posted by Ralf Jansen View Post
          Die Lösung per XML-Configdateien ist bereits Bestandteil von VS.
          Ließ mal dir mal in der MSDN den Punkt über 'Application Settings' durch.

          Die Kurzfassung(Bauanleitung)

          Öffne in VS die Projektoptionen.
          Geh auf den Reiter Settings(heißt vermutlich 'Einstellungen' in einem Deutschen VS) und trage dort einfach Namen,Typ und Wert für deine ~Konstante~ ein.

          VS erzeugt dann beim Build automatisch eine XML-Datei mit Namen 'MeinProjektname.exe.config' in dem diese dann eingetragen werden und dann natürlich auch manuell dort ohne Rebuild des Projekts geändert werden können.

          Im Code kannst du dann deine Konstante per 'My.Settings.MeinKonstantenName'
          ansprechen.
          moien,
          ich nutz sharp develop, und da find ich so ne option nicht.

          grüße, andreas

          Comment


          • #6
            hi,

            ich hab das bis jetzt so gemacht:
            Code:
            '
            ' Erstellt mit SharpDevelop.
            ' Benutzer: Andreas
            ' Datum: 16.06.2007
            ' Zeit: 14:52
            '
            ' Sie können diese Vorlage unter Extras > Optionen > Codeerstellung > Standardheader ändern.
            '
            
            Imports System
            imports system.IO
            Imports System.Xml
            
            Module Main
               
                Sub Main()
                   
                    Dim xml_Doc As XmlDocument
                    Dim xml_EinKnoten As XmlNode                    ' Ein einzelner Knoten
                    Dim xml_AlleKnoten As XmlNodeList              ' Auflistung von KNoten
                    Dim k1, k2 As Decimal
                   
                    xml_Doc = New XmlDocument
            
                    xml_Doc.Load("test.xml")           ' Laden der XML-Datei
            
                    ' Alle buch-Knoten in Auflistung holen mittels XPathString "//buch"
            
                    xml_AlleKnoten = xml_Doc.SelectNodes("//k")   ' // bedeutet Suche startet beim Wurzelknoten
            
                    For Each xml_EinKnoten In xml_AlleKnoten
            
                       ' Den autor-Knoten ermitteln. Suche startet beim sog. Kontextknoten (d.h. bei xml_EinKnoten)
            
                       xml_EinKnoten = xml_EinKnoten.SelectSingleNode("k1")
            
                      console.WriteLine(xml_EinKnoten.InnerText)      ' Name des Autors
                     
                      k1 = xml_EinKnoten.InnerText
            
            Next
            
            For Each xml_EinKnoten In xml_AlleKnoten
            
                       ' Den autor-Knoten ermitteln. Suche startet beim sog. Kontextknoten (d.h. bei xml_EinKnoten)
            
                       xml_EinKnoten = xml_EinKnoten.SelectSingleNode("k2")
            
                      console.WriteLine(xml_EinKnoten.InnerText)      ' Name des Autors
                   
                    k2 = xml_EinKnoten.InnerText
            Next
                   
                       console.WriteLine("{0}",k1+k2)
                       'console.writeline("{0}",node.attributes("k1"))
                       console.ReadLine()
                   
              End Sub
             
            End Module
            mit dieser xmlstruktur als test.xml

            <?xml version="1.0"?>
            <mydata>
            <k>
            <k1>555</k1>
            <k2>777</k2>
            </k>
            </mydata>


            ich hate das irgendwo so halb im netz gefunden, weiss aber nicht mehr wo

            geht das aber auch noch eleganter, bzw einfacher? für jeden wert eine eigene for each schleife zu machen find ich ein wenig viel aufwand.

            grüße, Andreas

            Comment


            • #7
              Hallo -horn-,

              ja das geht eleganter ;-)

              Lade die XML-Konfigdatei in ein DataSet, das geht mittels "DataSet.LoadXml()", und dann kannst Du über die Tabellen und Spalten auf die einzelnen Werte mittels String-Indexer zugreifen.

              Du kannst dann im DataSet auch die Daten manipulieren und zum Schluß einfach mit "DataSet.WriteXml()" das Ganze auch wieder in die Datei schreiben lassen. Sehr bequem, und keinerlei "Verarbeitungscode" zusätzlich notwendig.

              Quellcode könnte ich Dir nur in C# geben.

              Viele Grüße
              _ntr_

              Comment

              Working...
              X