Array()'s richtig definieren

  • VBScript

Es gibt 30 Antworten in diesem Thema. Der letzte Beitrag () ist von sonne75.

    Array()'s richtig definieren

    Hallöchen an Euch da draußen,

    da ich hier neu bin, weiß ich nicht ob ich hier richtig bin.

    Ich schreibe mein Script in Javascript und nun auch in VBScript.
    Nun habe ich mittels VBScript einen Zugriff auf eine Personal-Communications-Anwendung geschaffen und lese da diverse Zeilen bzw. Daten aus.

    Nun brauche ich aber ein Array() - ein verzweigtes Array() - um diese Daten später für Javascript verwenden zu können.
    Bisher habe ich ein 2-dimensionales Array() verwendet.

    Visual Basic-Quellcode

    1. Dim var_test
    2. ReDim Preserve var_Test(4, UBound(anderes_Array))
    3. For i = LBound(anderes_Array) To UBound(anderes_Array)
    4. var_test(0,i) = anderes_Array(i)
    5. var_test(1,i) = anderes_Array(i)
    6. var_test(2,i) = anderes_Array(i)
    7. var_test(3,i) = anderes_Array(i)
    8. var_test(4,i) = anderes_Array(i)
    9. Next


    Soweit hat es auch geklappt.

    Nun brauche ich aber ein verzweigtest Array(), um gleichzeitig mehrere Bereiche auszulesen, sie aber alle zusammen zu übergeben.

    Mein Versuch war:

    Visual Basic-Quellcode

    1. Dim var_test
    2. ReDim Preserve var_test(UBound(eines_anderen_Array))(4,UBound(anderes_Array))


    Und an dieser Stelle meckert mein Script, dass er zwischen var_test() UND () ein Anweisungsende erwartet?
    Was ist hier nun falsch? Wie kann ich das Problem lösen?

    Oder anders gefragt: Wie kann ich mehrere Array()'s an JAvascript übergeben?
    Bisher mache ich das ja so:

    Visual Basic-Quellcode

    1. Function TAKSY_Auslesen( BEREICHE, BEREICHSNUMMERN, HTZs )
    2. ...
    3. TAKSY_Auslesen = Gesamt_Komponenten
    4. End Function


    LG Romero
    Willkommen im Forum.
    Ich hab mit VbScript bisher zwar noch nicht gearbeitet, aber schau dir das mal an:
    msdn.microsoft.com/en-us/library/x4k5wbx4(v=vs.84).aspx

    Vllt hilft es dir ein wenig.

    In VB würde ich es zumindest so realisieren.
    Erstmal Danke dafür.

    Ich habe folgendes probiert.

    Visual Basic-Quellcode

    1. Function TAKSY_Auslesen( BEREICHE, BEREICHSNUMMERN, HTZs )
    2. ...
    3. Dim Identnummer_Array(), Item_Array(), Menge_Array(), HTZ_Array()
    4. Dim Gesamt_Komponenten, Unter_Komponenten
    5. Set Gesamt_Komponenten = CreateObject("Scripting.Dictionary")
    6. ...
    7. Redim HTZ_Array(0)
    8. Redim Item_Array(0)
    9. Redim Menge_Array(0)
    10. Redim Identnummer_Array(0)
    11. ...
    12. 'Hier werden Daten in ein 1-dimensionales Array geschrieben
    13. If HTZ_Array(0) = "" Then
    14. HTZ_Array(0) = Trim(Komponenten_HTZ)
    15. Else
    16. ReDim Preserve HTZ_Array(UBound(HTZ_Array) + 1)
    17. HTZ_Array(UBound(HTZ_Array)) = Trim(Komponenten_HTZ)
    18. End If
    19. ...
    20. 'Hier wird ein 2-dimensionales Array erstellt und mit dem vorherigen 1-dimensionales Array befüllt
    21. ReDim Unter_Komponenten(4,UBound(HTZ_Array))
    22. For i = LBound(HTZ_Array) To UBound(HTZ_Array)
    23. Unter_Komponenten(0,i) = HTZ_Array(i)
    24. Unter_Komponenten(1,i) = Item_Array(i)
    25. Unter_Komponenten(2,i) = Menge_Array(i)
    26. Unter_Komponenten(3,i) = Identnummer_Array(i)
    27. Unter_Komponenten(4,i) = Material_Identnummer
    28. Next
    29. Gesamt_Komponenten.Add Unter_Komponenten
    30. TAKSY_Auslesen = Gesamt_Komponenten
    31. End Function


    Und an der Stelle bei Gesamt_Komponenten.Add Unter_Komponenten bringt er mir folgende Fehlermeldung:

    "Falsche Anzahl an Argumenten oder ungültige Eigenschaftszuweisung: 'Gesamt_Komponenten.Add'"

    Was ist daran nun falsch?

    Was ich halt brauche ist ein Array() in VBScript welches Dynamisch ist, da ich nicht weiß wie lang was ist. Und welches ich nach Javascript zurückweise um damit weiter zu arbeiten.

    Und dieses Array() hat unterschiedliche Längen. So kann es sein, dass das Array() 1. Ebene 1-3 Dimensionen hat, und die 2. Ebene 5 Dimensionen und die 3. Ebene hat dann 0-??? Werte, wobei die Werte dann alle gleich lang sind. Also wenn die Werte von 0-100 sind (2. Ebene - 1. Dimension), dann haben auch die Werte der 2. Ebene - 2. Dimension ebenfalls 0-100 Werte.

    Um es also als Code zu schreiben, wäre das für mich so:

    Dim test(1. Ebene)(2. Ebene, 3. Ebene)

    Und das klappt irgendwie nicht.

    Ich brauche halt ein großes Array(), welches ich dann ohne Probleme an Javascript übergebe und welches ich dann in Javascript so einfach wie möglich auslesen kann.

    Beispiel:
    test_variable sieht so aus:

    Visual Basic-Quellcode

    1. test_variable = Array( "a", "b", "c" )
    2. var_a = Array( "soll aus dynamischen Werten (z.B. 100 Werte) aufgefüllt werden" )
    3. var_b = Array( "soll aus dynamischen Werten (z.B. 100 Werte) aufgefüllt werden" )
    4. var_c = Array( "soll aus dynamischen Werten (z.B. 100 Werte) aufgefüllt werden" )
    5. var_d = Array( "soll aus dynamischen Werten (z.B. 100 Werte) aufgefüllt werden" )
    6. var_e = Array( "soll aus 1 Wert bestehen )
    7. var_gesamt = Array( var_a, var_b, var_c, var_d, var_e )
    8. var_alles_gesamt = Array( var_gesamt( von test_variable(0) ), var_gesamt( von test_variable(1) ), var_gesamt( von test_variable(2)) )
    9. 'je nachdem wie lang test_variable ist.


    Dazu brauche ich echt Hilfe von Euch.

    LG Romero
    Ich habe immer noch nicht ganz verstanden, warum du so eine unübersichtliche Array-Struktur basteln musst und diese auch noch unbedingt als einzelnen Parameter an JavaScript übergeben willst, um ihn dann dort wieder auseinanderzunehmen.
    Übergib doch einfach mehrere Parameter.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Und wie übergebe ich mehrere Parameter?

    So das ich sie einfacher in Javascript auslesen kann?

    Wie gesagt, je nachdem wie viele Teile ich von Javascript an VBScript übergebe (1-3 Teile bzw. Variablen) muss sich das Array() dynamisch verändern bzw. wachsen.

    Wichtig ist dabei, dass bei jedem Durchlauf bzw. Auslesung der einzelnen Teile ich immer 5 Array()'s erstellen muss um da die Daten zu speichern.

    Bei Javascript konnte ich ja Array()'s mittels Array.push( ... ) befüllen und diese dann eines anderen Array()'s hinzufügen und mittels Array[0][0]... die Stellen dann auslesen.

    Und will es so machen, dass ich ohne größere Probleme die richtigen dann wieder finden kann.
    Also so in etwa.

    Auslesung:

    Array_von_Bereich befüllen mit Array_1(100 Daten) & Array_2(100 Daten) & Array_3(100 Daten) & Array_4(100 Daten) & Array_5(1 Date)
    Und i kann von 0-2 sein (1-3 Teilen)

    Und das Ganze wollte ich dann in Javascript mittels VBArray[0-4][0-99] = einzelne Auslese-Daten auslesen bzw. die Daten erhalten.

    Nun wie geht sowas?

    Also um es mal anhand eines Bsp. zu schreiben.

    Ich wähle anhand von Autos folgende Marke aus:

    Volkswagen

    Danach gehe ich in ein von VBScript aufgerufenes Programm und lese mir dann (nach Eingabe dieser Daten) folgendes aus:

    Array_1 (Typ): VW Golf, VW Beetle, VW Passat, ...
    Array_2 (Anzahl): 1, 5, 3, ...
    Array_3 (Farbe): blau, grün, rot, ...
    Array_4 (interne ID): 1234, 5678, 9109, ...
    Array_5 (ID von VW): 12345678 (nur 1 Wert)

    Und das Ganze ist dem Array() Array_Marke[0] zuzuordnen.

    Wenn ich aber statt einer Fahrzeugmarke mehrere auswähle (bis zu 3), so soll er nun die oben genannte Array_Marke um weitere 2 Dimensionen erweitern, also Array_Marke[0] = alles zu VW, Array_Marke[1] = alles zu BMW, ...

    Und unter Javascript würde ich das gerne so auslesen dass ich z.B. über Array_Marke[0][2][1] = "grün" erhalte (Array_Marke[0] = "VW" -> Array_Marke[0][2] = "Array der Farbe" -> Array_Marke[0][2][1] = "Farbe grün".

    Hoffe konnte es nun besser erklären.

    LG Romero

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

    Kann mir hier denn keiner helfen?
    Wie ich Array()'s in VBScript so definiere, dass ich sie leichter in Javascript auslesen kann?
    Bzw. wie ich mehrere Array()'s gleichzeitig als Return-Anweisung deklarieren kann (also mehrere einzelne Variable).

    LG Romero
    Es sind aber alles gleichem Typs.

    Es ist nur so, dass die Länge der einzelnen Array-Container unterschiedlich lang sind, je nachdem wie viele Daten es ausliest.
    Wenn es ein ein Bereich ist, welches ich auslese, so kann ich das einfach machen.

    Gesamt_Array(4, 100) => die 100 ist dann variabel.

    Wenn ich aber dann 2 oder mehrere Bereiche mit unterschiedlichen Längen, dann funktioniert das wiederrum nicht, weil bräuchte dann ja folgendes:

    Gesamt_Array(i)(4,100) => i = 0, weil 1. Bereich
    Gesamt_Array(i)(4, 50) => i = 1, weil 2. Bereich
    ...

    Und das klappt auch in VBScript.
    Aber wiederrum die Frage, wie lese ich die einzelnen Teile aus?

    Beim einfachen Verfahren (s.o. mit einem Bereich) ging es mittels getItem(i,j) in 2-For-Schleifen.

    Wie aber bekomme ich es anhand des 2. Beispiels?

    Oder die andere Frage ist, wie kann ich mehrere Parameter in einem VBScript zurückgeben, so wie es petaod schrieb:
    Übergib doch einfach mehrere Parameter
    Brauche entweder den einen oder den anderen Weg, oder du / ihr habt noch eine andere Idee.

    LG Romero
    Und was hat das mit dem Array zu tun? Zumal ich in VBScript doch keine Arrays als Integer usw. definieren kann oder?
    Zumal das Script bei mir bisher das nicht angezeigt hat, dass er es braucht.

    Also was ich will sind Arrays welche ich in VBScript erstelle (dynamische, da ich nie weiß, wieviele Daten jedesmal vorhanden sind) und ich dann in Javascript weiter verwenden möchte.

    Also brauche ich kurz gesagt, für meine 4 Hauptdaten auch 4 dynamische Arrays, welche ich nach und nach befülle. Das habe ich bereits mit Array(???) (werden die einzelnen Haupt-Arrays befüllt) und mit Gesamt_Array(4,UBound(Hauptarray)) (alle 4 Datendimensionen sind gleich lang).

    Sollte ich aber mehr als 1 Hauptbereich auslesen, so müsste ich entweder für jeden Bereich ein Extra Durchlaufeschleife basteln oder ich verwende die andere mehrmals. Das geht aber nur, wenn alle Bereiche auch gleich lang sind, was ja nicht zutrifft. Also müsste ich ein großes Array haben (max. 3 Stellen) wo ich dann diese Gesamt_Array(4,UBound(Hauptarray)) einfach anhänge. Also ein verzweigtest Array Auslese_Gesamt_Array(0-2)(4,UBound( des jeweiligen Hauptarrays )).

    Und diese einzelnen Arrays enthalten Identnummern, Mengen-Einheiten, Itemsnummern, sowie Name. Zusätzlich soll die Bereichsidentnummer mitangeführt werden. Ist zwar nur 1 Zahl, aber das zugehörige Array kann diese Zahl mehrmals haben (was vernachlässigt werden kann).

    Und warum ich das brauche? Nunja ich lese mittels VBScript Daten aus einer Personal Communications - Anwendung von IBM aus und das geht (vorerst) nur mittels VBA bzw. VBScript.

    Nochmal das Muster, wie es aussehen soll:
    vereinfacht

    Bereich 1:
    Array1_Identnummern = (11223344, 55667788, 99001122, 33445566, ...) = z.B. 100 Daten
    Array1_Mengen = (1,1,1,1, ...) = 100 Daten
    Array1_Item = (0100, 0101, 0102, 0103, ...) = 100 Daten
    Array1_Name = (D258-70100-000-00, D258-70101-000-00, D258-70102-000-00, D258-70103-000-00, ...) = 100 Daten
    Array1_Bereichsident = (99887766, 99887766, 99887766, 99887766, ...) = 100 x 1 Daten

    Das Ganze gehört dem 1 Bereich an:
    vereinfacht

    Array1 = (Array1_ Identnummer, Array1_Menge, Array1_Item, Array1_Name, Array1_Bereichsident)
    Array1(4,UBound(Array1_ Identnummer))

    Nun kommt ein 2. (oder 3. Bereich) hinzu:
    vereinfacht

    Array2_Identnummern = (44332211, 88776655, 22339988, 33446611, ...) = z.B. 50 Daten
    Array2_Mengen = (1,1,1,1, ...) = 50 Daten
    Array2_Item = (0400, 0401, 0402, 0403, ...) = 50 Daten
    Array2_Name = (D258-70400-000-00, D258-70401-000-00, D258-70402-000-00, D258-70403-000-00, ...) = 50 Daten
    Array2_Bereichsident = (88770000, 88770000, 88770000, 88770000, ...) = 50 x 1 Daten

    Array2 = (Array2_ Identnummer, Array2_Menge, Array2_Item, Array2_Name, Array2_Bereichsident)
    Array2(4,UBound(Array2_ Identnummer))

    Und das alles zusammen soll wiederrum in ein Gesamt_Array gepackt werden:
    vereinfacht

    Gesamt_Array = (Array1, Array2, ...)
    Gesamt_Array(0)(4,UBound(Array1_ Identnummer))
    Gesamt_Array(1)(4,UBound(Array2_ Identnummer))
    Gesamt_Array(...)(4,UBound(Array3_ Identnummer))

    Und dieses Gesamt_Array soll als Rückgabewert an Javascript gehen.
    Und da weiß ich nicht wie ich das dann auslesen kann.

    Hoffe hast nun verstanden was ich möchte.

    LG Romero
    Wie du siehst, haben deine Arrays unterschiedliche Typen: Strings und Zahlen. Und das ist unmöglich in einem Array zu haben, sondern du brauchst eine Struktur oder eine Klasse, wie ich vorher schon sagte. Weißt du, was eine Struktur ist?
    Weißt du, was eine Struktur ist?
    Na das Festlegen als was ich das Array definiere oder?
    Aber da bisher das Ganze mit einem Bereich (Array(4,Ubound(blablubb)) funktioniert hat und ich diese Daten auch in Javascript erfolgreich auslesen konnte, so war es eigentlich egal (jedenfalls dem VBScript), welchen Datentyp die einzelnen Arrays haben.
    Array hat nichts mit einer Struktur zu tun. Eine Struktur ist eine Ansammlung von Daten mit unterschiedlichen Typen, die sich über einen gemeinsamen Namen ansprechen lässt.

    Visual Basic-Quellcode

    1. Public Structure Test
    2. Public ArrayName(20) As String
    3. Public ArrayNumber(10) As Integer
    4. End Structure
    5. Dim MyStructure As Test
    Das ist doch VBA oder irre ich mich da?

    Ich schreibe VBScript. D.h. das ich da kein "As String", etc brauche bzw. er mir das wieder weglöscht (automatisch).
    Und da er (das Script) bisher keine Fehler dazu brachte, habe ich auch da nicht weiter nachgeforscht oder was verändert.

    Nochmal. Ein 2-dimensionales Array (Array_test(1. Dim., 2. Dim.)) habe ich bereits erstellt und auch in Javascript mittels .getItem() erfolgreich ausgelesen.

    Was ich nun brauche, ist ein Verzweigtes Array Array(2)(3,100) usw.
    Und das möchte ich gern erfolgreich in Javascript auslesen.

    Oder wie kann ich mehrere Parameter als Rückgabeanweisung übergeben?

    LG Romero
    Irgendwie reden wir aneinander vorbei, liebe Sonne75 ;) :rolleyes:

    ich meinte eher das hier:
    msdn.microsoft.com/de-de/library/hkhhsz9t%28v=vs.90%29.aspx

    Das sind verzweigte Arrays, in VB. Und genau so eine "Struktur" brauche ich.
    Und das Erstellen eines solchen verzweigten Arrays habe ich auch bereits hinbekommen.
    Nun wieder die Frage: wie lese ich dieses Verzweigte Array in javascript aus, bzw. wie kann ich mehrere Parameter als Rückgabeanweisung an Javascript zurückgeben?

    Und bisher habe ich diese Klassen-Struktur nicht gebraucht. Also das Script speicherte mir die Daten erfolgreich in die Arrays rein. Und konnte diese auch prima auslesen. Egal wie ich die Arrays vorher bestimmt habe.

    Es hat nur ein Dim Array_test gereicht.

    LG Romero
    Es ist keine Klassenstruktur. Und es ist auch keine "Struktur" in Anführungszeichen, wie du sie nennst. Sondern ein ganz normales Konstrukt für Daten mit unterschiedlichen Wertetypen.

    Wie du siehst, versteht hier niemand, was du willst. Entweder erklärst du es ganz anders (bisher wiederholst du immer das Gleiche) oder du machst einfach alleine, was du willst.
    Mag sein, dass ich mich wiederhole aber wie soll ich das Problem denn anders beschreiben, wenn es weiterhin das selbe Problem ist.

    Da ich keine Klasse definieren brauch, habe ich mich darüber noch nicht informiert.
    Und da ich bisher ein 2-dimensionales Array (mit Strings und Zahlen) auch auslesen konnte, erfolgreich, habe ich halt keine Gedanken darüber gemacht.

    Das erstellen dieses (siehe Link) verzweigten Arrays ist auch kein Problem, nur möchte das auch in Javascript auslesen.
    Oder wie kann ich mehrere Parameter übergeben?
    Oder wie kann ich diese Arrays noch anders definieren, dass ein erfolgreiches Auslesen auch Wirkung zeigt.

    Das sind meine Fragen.
    Und sollte es dann immer noch zu Problemen kommen, weil ich keine Klassen richtig definiert haben, werde ich auf dein Rat, liebe Sonne75, zurückgreifen.

    LG Romero

    Romero schrieb:

    Da ich keine Klasse definieren brauch

    Romero schrieb:

    weil ich keine Klassen richtig definiert haben

    Es ist keine Klasse.

    Romero schrieb:

    aber wie soll ich das Problem denn anders beschreiben, wenn es weiterhin das selbe Problem ist.

    Auch wenn es dasselbe Problem ist, kann man es unterschiedlich beschreiben. Was bringt mir immer die gleiche Beschreibung zum zigten Mal, wenn schon die erste nicht funktioniert hat? Ich gebe zu, ich habe auch nicht versucht mich da intensiv reinzudenken, weil die Erklärung an sich schon so verdreht ist (nach meinem Empfinden), dass ich nicht mal versucht habe zu überlegen, was du meinen könntest.

    Ein Tipp: beschreibe OHNE Code.
    Was hast du für Parameter (ohne Arrays!!!), was willst du übergeben, wozu? Was soll damit erreicht werden. Ich steige da bei dir nicht durch, ich habe das Gefühl, ich kriege Knoten im Hirn.
    Ok, versuche ich es mal anders:

    Ich rufe auf Javascript eine Funktion aus, welches dann in VBScript geschrieben wurde.

    function test(...)
    ...
    end function

    Ich übergebe in diese VBScript-Funktion folgende Parameter:
    Bereichs-Name(n):
    D258-70010-000 (String)
    (D258-70011-000 => bei einem 2. Namen)
    ...
    Bereichs-Nummer(n):
    000 (Zahl)
    (002 => bei einer 2. Nummer)
    ...

    Diese löse ich mittels Split auf und erhalte dann meine genauen Parameter.

    Dann wird das Programm gestartet, dieser Bereichs-Name und Nummer eingetragen und ich erhalte dann eine Liste (Übersicht) über Daten (in Spaltenform: Identnummer(Zahl) - Menge(Zahl) - Item(Zahl) - Name(String) => zeilenweise).
    Dann erfolgt das Auslesen. Enthält der Bereichsname 2 oder 3 Daten, so erfolgt das Auslesen auch darüber. Diese Daten können aber unterschiedlich lang sein. Und da ich das nicht weiß, brauche ich ein dynamisch erzeugtes riesiges Array.

    Und dieser Datenhaufen möchte ich gern so gegliedert haben, dass ich, egal ob VBScript oder Javascript, immer wieder auf die richtigen Daten zugreifen kann.

    Diese Infos in diesem Datenhaufen brauche ich, um in EXCEL diverse Tabellenblätter mit Inhalt erstellen kann.

    Hoffe du kannst mir nun folgen.