Autor Thema: Frage zu Implode  (Gelesen 4991 mal)

Offline wittmann_franz

  • Aktives Mitglied
  • ***
  • Beiträge: 241
  • Geschlecht: Männlich
Frage zu Implode
« am: 15.03.13 - 12:36:58 »
Hallo zusammen,

ich bekomme bei folgendem Script ein TypMismatch bei der Variablen vHotlineFelderErg, und komme nicht darauf warum dem so ist ....

dim vHotlineFelder(2) as Variant
dim vHotlineFelderErg as Variant
vHotlineFelder(0) = dcdoc.GetItemValue("Wert1")
vHotlineFelder(1) = dcdoc.GetItemValue("Wert2")
vHotlineFelder(2) = dcdoc.GetItemValue("Wert3")
vHotlineFelderErg = Implode(vHotlineFelder)

Hat jemand eine Idee und kann mir helfen.

Vielen Dank schon mal

Domino 8.5.3 FP2
Notes 8.5.3
Gruß
Volker

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Frage zu Implode
« Antwort #1 am: 15.03.13 - 12:41:59 »
Hallo,

Wo bekommst Du den Fehler? Welche Zeile.

Und vor allem.

dcdoc.GetItemValue("Feldname") liefert Dir bereits einen Array zurueck.
Damit haettest Du in vHotlineFelder(0) einen Array ==> mehrdimensionaler Array.


Andreas

Offline wittmann_franz

  • Aktives Mitglied
  • ***
  • Beiträge: 241
  • Geschlecht: Männlich
Re: Frage zu Implode
« Antwort #2 am: 15.03.13 - 12:46:04 »
ok, also Du hast Recht, es fehlt noch ein wenig mehr Input was ich eigentlich vorhabe:

Ich muss aus mehreren Felder Werte auslesen, die dann in einen Wert zusammengeführt werden sollen und mit besonderen Trennzeichen versehen sein sollen.
Ich dachte dafür bietet sich Implode(vHotlineFelder, Trennzeichen) an.
Die Anzahl meiner zusammenzuführenden Felder beläuft sich so auf ca. 25.

Gibt es vielleicht einen ganz anderen Ansatz für meine Aufgabe?

Gruß
Volker

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Frage zu Implode
« Antwort #3 am: 15.03.13 - 12:47:45 »
Sind es Felder mit Mehrfachwerten?


Andreas

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Frage zu Implode
« Antwort #4 am: 15.03.13 - 12:48:39 »
Da gibt es einige Wege. Entweder, Du machst schon ein Implode (GetItemValue), um ein sauberes Array of Strings zu bekommen. Oder Du hängst die Itemvalues zu einem grossen Array zusammen und machst dann ein Implode über alles. Oder oder oder ...

Bernhard

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Frage zu Implode
« Antwort #5 am: 15.03.13 - 12:50:05 »
Sind es Felder mit Mehrfachwerten?

Das ist doch eigentlich wurscht: Ein Feld kann ja später immer noch zu einem Multivalue-Dingens mutieren, und wer denkt dann noch an das Auslesen des Inhalts an der versteckten Stelle?

Bernhard

Offline wittmann_franz

  • Aktives Mitglied
  • ***
  • Beiträge: 241
  • Geschlecht: Männlich
Re: Frage zu Implode
« Antwort #6 am: 15.03.13 - 12:53:43 »
nein, es handelt sich nicht um Mehrfachwerte.

@Bernhard: ja, ich dachte ich füge die Itemvalues zu einen Array zusammen und mache dann ein Impolde.
aber es kommt wie gesagt an der Stelle zum Fehler.
Wir würde denn  Dein erster Ansatz aussehen um ein sauberes Array of Strings zu bekommen?

Gruß
Volker

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Frage zu Implode
« Antwort #7 am: 15.03.13 - 14:10:07 »
Code
vHotlineFelder (0) = Implode (dcdoc.GetItemValue("Wert1"), "~")
usw.

Oder:
Code
dim strHotlineFelderErg as Variant
strHotlineFelderErg = Implode (dcdoc.GetItemValue("Wert1"), "~") & "~" & Implode (dcdoc.GetItemValue("Wert1"), "~")
usw.

Oder:
Du arbeitest mit ArrayAppend, um damit Deine GetItemValue-Arrays zusammen zu knüppern.

Bernhard

Offline wittmann_franz

  • Aktives Mitglied
  • ***
  • Beiträge: 241
  • Geschlecht: Männlich
Re: Frage zu Implode
« Antwort #8 am: 19.03.13 - 09:54:35 »
ja, das hat super funktioniert, habe das 2. Beispiel benutzt.

Vielen Dank noch einmal und bis zum nächsten mal
(wird bestimmt nicht ausbleiben *g*)

Gruß
Volker

Offline wittmann_franz

  • Aktives Mitglied
  • ***
  • Beiträge: 241
  • Geschlecht: Männlich
Re: Frage zu Implode
« Antwort #9 am: 20.03.13 - 09:54:49 »
Schade, doch zu früh gefreut.

jetzt gibt es Werte die nicht als Text daher kommen, sondern als Zahl.
Das mag implode dann nicht so gern, was ja so auch in der Hilfe steht.

Warum aber geht dann nicht Implode(chstr(dcdoc.GetItemValue("WertalsZahl"))?
Hier kommt es immer zum TypMismatch.
Selbst wenn ich in der Maske ein zusätzliches Feld verwende welches mittels @Text(Zahl) den Wert dann als Text umdreht kommt es zum Fehler.
1. finde ich es nicht gut für diesen Zweck weiter Felder zu bauen.
2. Verstehe ich wohl wieder nicht die Arbeitsweise eines Arrays
3. Komme ich unter den genannten Umständen nicht weiter.

Wie also kann ich das Implode dazu bewegen auch mit Zahlenwerten zu arbeiten, bzw. diese vorher so umzubauen, das sie durch Implode verarbeitet werden können.

Vielen Dank für Eure Mithilfe.
Gruß
Volker

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Frage zu Implode
« Antwort #10 am: 20.03.13 - 10:01:46 »
Hallo,

Weil GetItemValue Dir eben einen Array zurueckliefert.
Und CStr kann keinen Array verarbeiten.


Andreas

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Frage zu Implode
« Antwort #11 am: 20.03.13 - 10:07:10 »
Selbst wenn ich in der Maske ein zusätzliches Feld verwende welches mittels @Text(Zahl) den Wert dann als Text umdreht kommt es zum Fehler.
Nein, damit kommt es zu keinem Fehler. Den musst Du andersartig verursachen. Aber mangels Glaskugel ...

Vielleicht tust Du Dich auch leichter, wenn Du mit Evaluate auf @functions zurückgreifst, weil Du Dir hierdurch Schleifen in LS sparst. Sowas hier tut:
Code
_list := 1 : 2 : 3;
_result := @Implode (@Text (_list); @NewLine);
@Prompt ([OK]; "Result"; _result)

Wichtig ist natürlich nur die 2. Zeile.

HTH,
Bernhard

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Frage zu Implode
« Antwort #12 am: 20.03.13 - 10:59:07 »
Oder Du baust Dir eine kleine Function, die den Wert eines beliebigen Arrays als Textliste zurückgibt

Function TextArray (array As Variant) As Variant
   Dim tarray As Variant
   tarray = array
   Forall ta in tarray
      ta = Cstr (ta)
   End Forall
   TextArray = tarray
End Function

Diese Function verwendest Du statt Cstr

Implode(TextArray(dcdoc.GetItemValue("WertalsZahl")))

Ungetestet, geht bestimmt noch eleganter und hat auch kein Errorhandling, sollte aber prinzipiell tun ...


Offline wittmann_franz

  • Aktives Mitglied
  • ***
  • Beiträge: 241
  • Geschlecht: Männlich
Re: Frage zu Implode
« Antwort #13 am: 21.03.13 - 11:42:59 »
Hallo nochmal zusammen,

ich scheitere schon wieder am nächsten Schritt.
Komme einfach nicht mit Variant, Array und String und das ganze in Verbindung klar.  >:(

Hoffe also weiterhin auf Tipps von Euch.
Habe Peters Ansatz mal umgesetzt, leider ohne Erfolg, weiterhin ein Typ Mismatch.

Bernhard, Deinen Vorschlag habe ich nun in der Maske mit einem neuen berechneten Feld umgesetzt.
Klappt wunderbar, es werden die vielen Felder sauber so wie ich das gern möchte zusammengesetzt, und mit @Text bei den entsprechenden Felder mit Zahlenwerten klappt es dann mit @Implode auch. Habe jetzt also ein Feld mit den von mir gewünschten Feldern zusammengesetzt.

Nun greife ich mir dieses in meinem Script wieder mit

vHotlineFelderErg = dcdoc.GetItemValue("AbgleichGIS_AlleFelder")

So weit so gut .... im Debugger sehe ich sehr schön, das die Werte als String unterhalb des Variant angezeigt werden.

Das ganze wird nun zu einer SQL Abfrage verarbeitet:

qry.SQL = "INSERT INTO " & sdatatable & " (" & sOracleFelder & ") VALUES ('" & vHotlineFelderErg & "')"

Warum kommt es an der Stelle ('" & vHotlineFelderErg & "')" wieder zum Typ Mismatch.
Habe auch bereits & cstr(vHotlineFelderErg) & probiert, leider auch ohne Erfolg.

Ich weiß nicht mehr weiter.
Gruß
Volker

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Frage zu Implode
« Antwort #14 am: 21.03.13 - 11:46:39 »
vHotlineFelderErg = dcdoc.GetItemValue("AbgleichGIS_AlleFelder") (0)

Ein Item ist IMMER ein Array, auch wenn es nur einen Wert hat. Willst Du einen String aus einem Item mit einem einfachen Wert, brauchst Du die Null.


EDIT: Das steht auch schon in Andreas Antwort #10
« Letzte Änderung: 21.03.13 - 11:53:18 von Peter Klett »

Offline wittmann_franz

  • Aktives Mitglied
  • ***
  • Beiträge: 241
  • Geschlecht: Männlich
Re: Frage zu Implode
« Antwort #15 am: 21.03.13 - 12:00:17 »
Danke Peter,

das war`s.

@All: Schönen Nachmittag noch
Gruß
Volker

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz