Domino 9 und frühere Versionen > Entwicklung
Einem String-Array ein Array zuordnen
TMC:
Hi,
ich habe folgende Sub:
--- Code: ---Sub Exp (strFieldNameArray() As String, strFieldTitleArray() As String)
'Ist strFieldNameArray ein Array?
If Not Isarray(strFieldNameArray) Then
Error 1002, "strFieldNameArray ist kein Array !"
End If
'Ist LBound = 0
If Lbound(strFieldNameArray) <> 0 Then
Error 1003, "LBound vom Array 'strFieldNameArray' ist nicht 0 !"
End If
'Check strFieldTitleArray
If (Not Isarray(strFieldTitleArray)) Or (Lbound(strFieldTitleArray) <> 0) Then
'XXXXX
End If
'usw.
--- Ende Code ---
Bei dem Teil "XXXXX" möchte ich in die String-Array-Variable "strFieldTitleArray" die Variable "strFieldNameArray" setzen.
Nur da geht das Gezeter los:
Z.B. ein
strFieldTitleArray = strFieldNameArray
Oder ein
Redim strFieldTitleArray(0)
strFieldTitleArray = Arrayappend(strFieldTitleArray, strFieldNameArray)
lässt sich nicht kompilieren, da "Illegal reference to array or list "strFieldTitleArray".
Würde ich in der Sub das strFieldTitleArray als Variant deklarieren, dann würde es imo gehen. Ich will aber hier, dass das ein String-Array ist.
Was will ich machen:
Wenn eine bestimmte Bedingung zutrifft, dann soll String-Array "strFieldTitleArray" = "strFieldNameArray"
Ich hoffe es gibt da eine einfache Lösung (ohne das Array komplett neu aufzubauen oder auf Variant switchen zu müssen).
koehlerbv:
Wo siehst Du einen Unterschied zwischen einem Variant vom Typ String und einem Array of Strings ? Warum nimmst Du nicht Variant ?
Was machst Du eigentlich mit dieser Abfrage:
--- Code: --- If Lbound(strFieldNameArray) <> 0 Then
Error 1003, "LBound vom Array 'strFieldNameArray' ist nicht 0 !"
End If
--- Ende Code ---
By the way: Das von Dir angesprochene ArrayAppend arbeitet mit VARIANTS ...
Sag' mal genaueres ;)
Bernhard
TMC:
Zu 1) (warum ich nicht Variant nehme)
Ich will es eingrenzen soweit es geht.
Dim myArray() as String erscheint mir sauberer, weil eingegrenzter, als Dim myArray() as Variant.
Außerdem: Wenn ein "User" meiner Routine das "... as String" liest, ist sofort klar, dass da nix anderes reindarf. Steht da "...as Variant", ist das u.U. unklar (auch wenn die Routine sauber dokumentiert ist).
Zu 2) (was ich mit der Abfrage mache)
Ich prüfe, ob das lower bound des übergebenen Arrays = 0 ist. Wenn nicht, greift ein Errorhandling. Ist ein Scriptentwurf, später kommt diese Abfrage direkt in die Weiterverarbeitung des Arrays.
Ich bin aber für Tipps immer aufgeschlossen :-) So wie ich es deute, kann ich das mit meinem StringArray nicht so einfach händeln, und muss wohl doch leider auf Variant switchen ::)
koehlerbv:
Warum willst Du es denn eingrenzen ? Allgemeine Routinen versuche ich immer so zu schreiben, dass ich damit möglichst beliebige Datentypen verarbeiten kann. Arrays verketten ? Da würde ich doch später nicht darüber nachdenken wollen, ob das Strings, Date/Times oder Zahlen sind.
Das mit dem Ubound verstehe ich noch immer nicht. Jedes Array hat als UBound den Wert 0 (es sei denn, Option Base ist gemeinerweise verstellt). Schwieirg ist zu entscheiden, ob das Array "leer" ist und was mit leer überhaupt gemeint ist. Das ist jetzt aber eine ganz neue Frage ;D
Bernhard
PS: Was soll das mit dem "User" ? Dem späteren Nutzer kannst Du doch Vorschriften machen (aussagekräftiger Header) UND den Datentyp abprüfen. Du musst doch bei sowas sowieso sehr viel prüfen: IsEmpty, IsArray, IsScalar usw.
Marinero Atlántico:
Ich würd das nicht so eng sehen.
Du kannst ja bei der Weiterverarbeitung des Arrays überprüfen, ob alle Elemente des Arrays vom Datentyp String sind.
Viele Programmiersprachen kennen überhaupt keine strenge Typisierung (in JavaScript ist es sehr optional, Python). Es gibt nicht wenige Leute, die strenge Typisierung (Java ist normal auch streng typisiert) als unproduktiv kritisieren.
Um mal beim Vergleich zu bleiben: In den dynamisch erweiterbaren "ArrayTypen"* von Java wie HashSet und ArrayList sind auch alle Elemente Objekt und können nicht weiter spezifiziert werden. In Java1.5 wird es da aber eine Erweiterung geben.
Gruß Axel
----
*populistisch gesprochen. Eigentlich sind das Collection-Klassen.
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln