Autor Thema: Not Urgent: Text in Integer Array  (Gelesen 1885 mal)

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Not Urgent: Text in Integer Array
« am: 07.10.05 - 22:20:24 »
Hi,

ich habe hier zur Zeit einen sehr eifrigen Praktikanten. Er ist wirklich engagiert, und hat einige Programmier-Vorkenntnisse in VB und PHP.

Da er gut ist, darf er nun selbständig ein paar unserer produktiven Notes-Datenbanken verbessern.

Ausgangssituation:
DB mit Haupt- und Antwort - Doks. Hauptdoks haben eine ID. Zahlenfeld, Mehrfachwerte. D.h. es können dort 1-x IDs eingetragen werden.
Darunter hängen Antwort-Docs, die u.a. die ID vom Hauptdokument übernehmen. Auch Zahlenfeld, Mehrfachwerte, Computed when composed.

Nun soll per Button einem bestehenden Antwort-Dokument ein anderes Hauptdokument zugeordnet werden können . Dafür nimmt er den Code aus Best Practices (http://www.atnotes.de/index.php?topic=13984.0).

Damit die Auswahl über Picklist sauber klappt, wird das ID-Feld über
@Implode(@Text(cID); ",") umgewandelt, weil es eben mehrere Zahlen enthalten kann.

In LotusScript hat man dann letztendlich z.B. folgendes in einem String:
Code
strQuelle = "10526,10527,10530"
strQuelle = "10532"
strQuelle = "10535,10537"

Ziel:
Jetzt geht es darum, dieses String wieder in ein Feld (Zahl, Mehrfachwerte) zurückzuschreiben.

Er hing da, daher hab ich ihm schnell was geschrieben:
Code
	Dim vIDArray As Variant
	Dim intUboundID As Integer
	Dim intLoop As Integer	
	vIDArray = Split(strQuelle, ",")
	intUboundID = Ubound(vIDArray)	
	
	Dim lngResultArray() As Long
	For intLoop = 0 To intUboundID
		Redim Preserve lngResultArray(intLoop)	'// Although redim is no good in loops due to performance, we use it here since we do not expect many elements
		lngResultArray(intLoop) = Clng(vIDArray(intLoop))
	Next intLoop
Was passiert da: per "Split" Funktion in String-Array. Dann String-Array abarbeiten und die Elemente in ein Long Array schreiben.

Ehrgeizig und frech wie mein Praktikant ist, meint er nun, dass das eher ein Würgaround ist. Er hat auch Recht.
Mir fällt aber nichts gescheites dazu ein. Ihm natürlich auch nicht.

Habt Ihr bessere Vorschläge, ein solches String wieder in ein Zahlenfeld mit Mehrfachwerten zu bringen?

Kurzzusammenfassung:
Ein String, das Integer mit Mehrfachwerte enthalten kann (getrennt durch Komma) soll per LS (Backend) in ein Item geschrieben werden, das vom Typ Zahl ist mit Mehrfachwerten.
Meine Methode funktioniert, aber eigentlich wäre was eleganteres netter.
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Not Urgent: Text in Integer Array
« Antwort #1 am: 07.10.05 - 22:40:29 »
Wie wäre es mit dem guten Evaluate ? Gegeben sei ein Feld namens cID, das einen skalaren Wert (String) enthält, der als Zahlenliste interpretierbar wäre:

Code
@TextToNumber (@Explode (cID; ","))

So wird daraus sehr maschinennah wieder eine Integerliste.

Oder willst Du eine Lösung pur in LS ? Das geht dann auch noch eleganter, aber nicht so "nativ" wie via Evaluate.

Bernhard

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: Not Urgent: Text in Integer Array
« Antwort #2 am: 07.10.05 - 22:46:40 »
Danke schonmal, Bernhard.

Eigentlich will ich bzw. wollen wir eine reine LS Lösung.
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Not Urgent: Text in Integer Array
« Antwort #3 am: 07.10.05 - 23:23:50 »
Also wollt Ihr eine LS-Übung abhalten ? Keine Performancesteigerung (quasi via API) ?

Dann würde ich den Code folgendermassen kürzen:

Code
Dim vIDArray As Variant
Dim lngResultArray() As Long
Dim intLoop As Integer

vIDArray = Split(strQuelle, ",")
Redim lngResultArray (Ubound (vIDArray))

For intLoop = 0 To Ubound (vIDArray)
lngResultArray(intLoop) = Clng(vIDArray(intLoop))
Next intLoop

Ein direkterer und vor allem schnellerer Weg, ein Array of Strings in ein Array of Longs umzuwandeln als via Evaluate umzuwandeln, ist mir nicht bekannt. Im wesentlichen kann ich nur das "Preserve" aus Deinem Code streichen.

Servus,
Bernhard  :)

EDIT: Doppelte Deklaration von vIDArray gelöscht ...
« Letzte Änderung: 08.10.05 - 15:17:46 von koehlerbv »

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Not Urgent: Text in Integer Array
« Antwort #4 am: 07.10.05 - 23:53:54 »
Du kannst vielleicht höchsten versuchen dir eigene split Funktion zu schreiben, die einen Array aus Integers erzeugt (oder Long).
Besonders sinnvoll find ich das nicht.
Wenn du Performance willst nimmst du Bernhards Vorschlag mit Evaluate (find ich am besten).
Ich versteh auch deine grundsätzliche Ablehnung gegen dieses stabil funktionierende Feature nicht.
Das einzige Argument gegen evaluate, das mir einfällt, ist, dass es vom Abstraktionsniveau vielleicht nicht so gut zu dem RestSkript passt.
Aber du kannst es ja in eine Skriptlibrary packen (z.B. ArrayBuilders). Dann hast du eine wirklich kurze Funktion mit evaluate. Diese kann jederzeit isoliert getestet werden und im Skript stört es auch nicht weiter. Der Aufruf könnte so aussehen.
Code
longArray = buildLongArray(feldWert, ",")
Genau das ist Kappselung.

Wenn nicht dann nimmst du die Lösung mit dem temporären String-Array.

Btw. ist es meines Wissens auch nicht mit Java möglich schnell mal eben den Datentyp eines Arrays zu ändern.
« Letzte Änderung: 08.10.05 - 08:16:52 von kennwort »
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: Not Urgent: Text in Integer Array
« Antwort #5 am: 08.10.05 - 15:45:39 »
danke für Eure Antworten.
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz