Viele Daten auslesen oder statt Data, Read usw.

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von der_Kurt.

    Viele Daten auslesen oder statt Data, Read usw.

    Hallo,



    ich habe ein Programmlisting ist Basic (kein Visual Basic) und möchte es in Visual Basic schreiben.

    Dieses Programm hat viele Daten. Ausgelesen werden die mit Read.

    Beispiel:

    For K=0 to 6
    Read N(K)
    Next K
    Data 365.25, .75, 30.6001, 24, 1720994.5, 2415020, 3.467e-4

    Das war nur ein kleines Beispiel.

    Wie mache ich das in Visual Basic?

    Muss ich die Einzeln schreiben?
    N(0)=365.25: N(1)=.75 usw.

    Oder was gibt es für möglichkeiten?

    Gruß

    Eberhard61
    Hallo,



    die Daten sind im Programmlisting enthalten. Keine Extra-Datei.

    Die Quelle der Read N(K) sind die Daten die neben "DATA" stehen. Also die zahlen 365.25, .75 usw.
    So wurde das im alten GW-Basic gemacht. "Read" liest die Konstanten der DATA-Zeilen in Programm-Variable. "DATA" definiert die Konstanten in einem Quelltext, die mit READ-Befehl gelesen werden sollen(aus Referensbuch Power Basic).



    Read ließt die Data Zeilen aus gibt sie in eine Variable.
    Aus Data 365.25, .75, 30.6001
    Wird N(0)=365.25: N(1)=.75: N(2)=30.6001

    Gruß

    Eberhard61
    Hallo,

    noch mal zur Verdeutlichung meines Problemes habe ich ein Teil des Listings, das in GW-Basic geschrieben wurde und ich schon in Powerbasic-Dos 3.2 umgesetzt habe. Das Programm besteht aus vielen Daten die Eingelesen werden müssen.

    Hier ein kleiner Teil:

    Quellcode

    1. ' ---- Faktoren fuer Mondstoerungungen
    2. Dim B(31,5)
    3. For K1=1 to 31
    4. For K2=0 to 5
    5. Read B(K1,K2)
    6. Next K2
    7. Next K1
    8. Data 0, 1.274, 2, 0, 0, -1, 0, .658, 2, 0, 0, 0, -.186, 0, 0, 0, 1, 0
    9. Data 0, -.114, 0, 2, 0, 0, 0, -.059, -2, 0, 0, 2, .057, 0, 2, 0, -1, -1
    10. Data 0, .053, 2, 0, 0, 1, .046, 0, 2, 0, -1, 0, .041, 0, 0, 0, -1, 1
    11. Data 0, -.035, 1, 0, 0, 0, -.03, 0, 0, 0, 1, 1, 0, -.015, -2, 2, 0, 0
    12. Data 0, -.013, 0, 2, 0, 1, 0, -.011, 0, 2, 0, -1, 0, .011, 4, 0, 0, -1
    13. Data 0, .009, 4, 0, 0, -2, -.008, 0, 2, 0, 1, -1, -.007, 0, 2, 0, 1, 0
    14. Data 0, .005, -1, 0, 0, 1, .005, 0, 1, 0, 1, 0
    15. ' Ende Lx
    16. Data 0, 5.128, 0, 1, 0, 0, 0, .281, 0, 1, 0, 1, 0, .278, 0, -1, 0, 1
    17. Data 0, .173, 2, -1, 0, 0, 0, .055, 2, 1, 0, -1, 0, .046, 2, -1, 0, -1
    18. Data 0, .033, 2, 1, 0, 0, 0, 0.17, 0, 1, 0, 2, 0, .009, 2, -1, 0, 1
    19. Data 0, .009, 0, -1, 0, 2, .008, 0, 2, -1, -1, 0
    20. ' Ende Bx



    Wie mache ich das in Visual Basic?

    Gruß

    Eberhard
    Hallo Eberhard61!

    Interessante Herausforderung hast du hier:

    Nochmal für die, die das nicht kennen:

    die Data-Zeile legt einen Haufen von Werten fest:
    Data 1,2,3,4,5,6
    die Read-Anweisung liest bei jedem Aufruf den nächsten Wert aus.
    Read A :Read B
    bewirkt: in A steht der Wert 1, in B steht der Wert 2.

    Das Ganze stammt aus Ur-Basic-Zeiten (GW-Basic war irgendwann 1991 herum), und funktioniert in VB nicht mehr.


    Als Gegenstück zu Data fällt mir auf Anhieb eine Warteschlange(Queue) ein. Das ist eine Aufzählung,
    der man mit .Enqueue ein Element hinten dranfügen kann, und mit .Dequeue das erste Element rauslesen kann.

    Da es die Data-Anweisung ja nicht mehr gibt, habe ich eine abgewandelte Form geschrieben. (Und Read auch dazu)
    Dazu musst du
    • deine Daten als Zeichenkette übergeben, (aus Data 0, 1.222 .... wird Data "0, 1.222 ... ")
    • den Aufruf (die Data-Zeilen) am Anfang durchführen (Im Gegensatz zu der Data-Anweisung in früheren Sprachen, wo es ja egal war, wo diese Data-Anweisungen standen)

    Die Data-Zeile, die jetzt eine Data-Anweisung ist, sieht so aus:

    VB.NET-Quellcode

    1. data("0, 1.274, 2, 0, 0, -1, 0, 0.658, 2, 0, 0, 0, -0.186, 0, 0, 0, 1, 0")
    2. data("0, -0.114, 0, 2, 0, 0, 0, -0.059, -2, 0, 0, 2, 0.057, 0, 2, 0, -1, -1")

    VB.NET-Quellcode

    1. 'Definiert auf der Klassenebene, damit diese Queue im gesamten Programm Gültigkeit hat.
    2. Dim AlleMeinedaten As New Collections.Generic.Queue(Of String)


    VB.NET-Quellcode

    1. Sub data(ByVal zeichenkette As String)
    2. 'Ein Datenfeld wird erzeugt und...
    3. '... die Zeichenkette wird gesplittet nach ","
    4. Dim mydata As String() = zeichenkette.Split(","c)
    5. For Each element As String In mydata
    6. 'noch ein bißchen zurechtformatiert
    7. element = element.Replace(".", ",")
    8. If element.Trim = "" Then element = "0"
    9. If element.Substring(0) = "." Then element = "0" & element
    10. 'Und hier an die Warteschlange angehängt..."
    11. AlleMeinedaten.Enqueue(element)
    12. Next
    13. End Sub


    VB.NET-Quellcode

    1. Sub read(ByRef Wert As Single)
    2. 'Der nächste Wert wird aus der Warteschlange gelesen ...
    3. 'als Single umgewandelt, ...
    4. 'und als Referenz übergeben
    5. Wert = CSng(AlleMeinedaten.Dequeue)
    6. End Sub


    Hoffe, dass dich das irgendwie weiter bringt, (wenn nicht, wars eine gute Übung für mich)

    LG, der_Kurt