Werte aus 3D Tabelle

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Richtglasa.

    Werte aus 3D Tabelle

    Hallo zusammen,

    ich programmiere jetzt schon knapp 10 Jahre in Visual Studio mit Visual Basic. Dieses Forum hat mir schon sehr oft geholfen (vorallem RodFromGermany und Mikeb69). Vielen Dank dafür an alle.
    Jetzt stehe ich aber vor einem Problem, dass ich hier nicht finden kann (vielleicht auch weil ich nicht weis nach was ich suchen muss). Bisher konnte ich mich immer gut davor drücken aber jetzt brauch ich es wirklich (If-Then-Else ist hier definitiv nicht mehr effizient genug).
    Ich habe eine Tabelle (ich glaube diese ist 3D). Siehe Anhang.
    Ich habe den Wert der oberen horizontalen Reihe und den Wert der linken vertikalen Reihe und benötige den dazugehörigen Wert in der Matrix.

    Wo und wie kann ich die Tabelle in hinterlegen?
    Wie kann ich mit Hilfe der beiden Werte den entsprechenden Wert in der Matrix finden?

    Ich danke im Voraus für die Lösungswege.
    Bilder
    • Tabelle.JPG

      51,85 kB, 482×284, 125 mal angesehen
    @Richtglasa Willkommen im Forum.
    Du kannst eine DataTable anlegen.
    Die Struktur kannst Du einmal im Designer vorgeben, da wird Dir der @ErfinderDesRades weiterhelfen.
    Oder Du kannst die Struktur im Code definieren, da findest Du hier ein Beispiel: Differenz in Prozent ausrechnen
    Auf die Daten zugreifen kannst Du dann per Zeile und Spalte. Die Zeile per Index, die Spalte ebenfalls per Index oder den Spaltennamen.
    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!
    Ebenfalls willkommen.
    Ist die Tabelle dimensionstechnisch final? Will heißen: Sind x- und y-Werte alle in dem Bild verewigt? Was ist mit den 3. Werten? Sind die auch schon fix?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Richtglasa schrieb:

    Ich habe eine Tabelle (ich glaube diese ist 3D). Siehe Anhang.
    Ich habe den Wert der oberen horizontalen Reihe und den Wert der linken vertikalen Reihe und benötige den dazugehörigen Wert in der Matrix.
    Nach Bild und dieser Problembeschreibung ist das eine 2D-Tabelle - "Matrix" ist da schon der richtige Begriff.
    Umzusetzen ist das wohl am Besten mit einem JaggedArray Double()(), oder - wenn Anzahl Zeilen/Spalten flexibel sein muss mit einer JaggedList List(Of List(Of Double)).
    Deklaration und Abruf derlei Daten ist einfach, aber die Befüllung ist bisserl kniffliger, und hängt davon ab, wo die Daten herkommen.
    Öhm … ich glaub ich steh grad auf'm Schlauch. @ErfinderDesRades: Wie willst Du denn so auf den Tabellenwert zugreifen, der durch den X-Wert 0,2 und den Y-Wert 0,85 definiert ist?
    Da eher noch eine List(Of TableValuePack), wobei TableValuePack die Propertys XValue, YValue und ActualValue als je Double hat.

    ##########

    @Richtglasa: Wenn die Tabellen vorgegeben sind (durch gesetzliche oder naturwissenschaftliche Fakten), dann würde ich mir diese Tabellen in Rohdatenform speichern und dann einen Parser dafür schreiben, also ein wenig Code, welcher die Daten einliest und in Dein Programm verfrachtet. Notfalls könnte man diese Rohwerttabellen auch ins Programm als Ressource einfügen, damit man die Daten nicht ändern kann. Oder man fügt die Daten einmalig ein und speichert das Ganze in der Datenbank oder woauchimmer ab.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

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

    VaporiZed schrieb:

    Wie willst Du denn so auf den Tabellenwert zugreifen, der durch den X-Wert 0,2 und den Y-Wert 0,85 definiert ist?


    na, ich suche den (y-)Index von 0,85 in der ersten Spalte der Zeilen: 5
    Dann suche ich den (x-)Index von 0,2 in der ersten Zeile : 1
    Dann greife ich zu: Matrix(5)(1) ( = 0,672 )
    @VaporiZed: An die Ressource habe ich auch schon gedacht aber dann bin ich wieder beim If-Then-Else

    @ErfinderDesRades: Das hört sich gut an, wenn das so klappt. Ähnlich der Matrixfunktion in Excel. Gibt es dazu eventuell ein Codebeispiel?
    JaggedArray hör ich heute zum ersten Mal. Matrix hab ich auch noch nie benutzt unter welchen Stichpunkt finde ich da was dazu?
    Achso, Verfrachtung der Zeilen-/Spaltenköpfe in die Tabelle, klar.
    Nuja, geht auch.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Richtglasa schrieb:

    Gibt es dazu eventuell ein Codebeispiel?
    JaggedArray hör ich heute zum ersten Mal. Matrix hab ich auch noch nie benutzt unter welchen Stichpunkt finde ich da was dazu?
    Codebeispiele nicht dass ich wüsste.
    Ich hab mal ein MatrixGrid gebastelt, aber die Matrix-Zugriffs-Logik ist da so eingeschwurbelt, dasses dir glaub nix bringen würde.
    Der Begriff "Matrix" ist hier auch nicht als Klasse verwendet, die man benutzen könnte, sondern als theoretisches Konzept.

    Wie gesagt, so erstellst du eine leere Matrix:

    VB.NET-Quellcode

    1. dim mtr = new list(Of list(Of Double))
    Im weiteren brauchst du Daten, und dann einen Algo, um die Daten in die Matrix einzufüllen.
    Vielleicht ist auch sinnvoll das ganze in eine selbstgeschriebene Matrix-Klasse zu verpacken - wie gesagt: Was fertiges gibts da AFAIK nicht.