Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: Jürgen Schomann am 05.09.15 - 13:35:09

Titel: LotusScript: List
Beitrag von: Jürgen Schomann am 05.09.15 - 13:35:09
Wie lang kann der Bezeichner ListTag für ein List-Element maximal sein?
Titel: Re: LotusScript: List
Beitrag von: pram am 06.09.15 - 12:26:36
Mir ist keine Begrenzung bekannt. Ausprobieren...
Strings dürfen (theoretisch) bis 2GB lang sein.
Titel: Re: LotusScript: List
Beitrag von: Thomas Schulte am 07.09.15 - 07:59:38
Strings dürfen (theoretisch) bis 2GB lang sein.
Wo hast du das her? In Lotus Script? Da ist soweit ich weis immer noch bei 64 KB Schluß.
Titel: Re: LotusScript: List
Beitrag von: pram am 07.09.15 - 09:36:59
Thomas, die genaue Stelle find ich leider nicht mehr (war glaub ich in irgendeiner Slide)

habe aber mal in der Hilfe nachgesehen und dabei folgende Diskrepanzen gefunden:

Zitat
About data types (LotusScript Language)
(String length ranges from 0 to 32K characters) Initial value: "" (empty string)
und
Zitat
text$  =  notesStream .ReadText( [ oneLine& ] , [ eol& ] )
....
Defaults to the entire stream to a maximum of 2GB.

Ich kann auch aus eigener Erfahrung sagen, dass es in LS keine 32K/64K Begrenzung für Strings gibt, da wir ständig damit arbeiten. (RichtextItem.getUnformattedText liefert definitiv mehr als 64K)

Gruß
Roland
Titel: Re: LotusScript: List
Beitrag von: thkn777 am 07.09.15 - 13:49:00
Aus der Hilfe: (einfach mal nach "Limits" suchen)

Zitat
A List tag is essentially a key of type STRING.  You use this this "key" to uniquely retrieve its associated data once it gets stored.

Zitat
Length of a string literal:
16,267 characters (32,000 bytes).

Achtung - persönliche Paranoia: Ich würde alles, was über 240 Zeichen hinausgeht, aber mal in Ruhe testen. Ebenso Spezial- und Sonderzeichen.
Titel: Re: LotusScript: List
Beitrag von: pram am 07.09.15 - 14:18:44
Ein "String literal" ist aber keine String-Variable, sondern eine Zeichenfolge die mit " " (oder {}, | | ) eingeschlossen im Programmcode steht. Und diese haben eine begrenzte Länge. Man bekommt auch nur eine begrenzte Gesamtanzahl an Strings in eine Script-Bibliothek. Beim Speichern erscheint dann "not enough string space"

Wie oben schon geschrieben, sind Strings relativ "unbeschränkt". Folgender Code
Code
Sub Initialize
	Dim s As String
	Dim c As long
	For c = 1 To 100000
		s = s + " "
	Next
	Print Len(s)
End Sub
gibt nach ein paar Sekunden 100000 aus (womit die 32/64k Grenze widerlegt wäre)

Achtung - persönliche Paranoia: Ich würde alles, was über 240 Zeichen hinausgeht, aber mal in Ruhe testen. Ebenso Spezial- und Sonderzeichen.
Hier kann ich nur zustimmen, insbesondere Umlaute werden oft anderes behandelt als vermutet (vor allem mit türkischer Locale  ;D )

Gruß
Roland
Titel: Re: LotusScript: List
Beitrag von: thkn777 am 07.09.15 - 15:00:36
Nach Durchlauf 27 kommt "Out Of String Space" ;)

Um die ursprüngliche Frage zu beantworten: SEHR lang.

Code
Option Public
Option Declare

Dim l As Long
Dim i As Long
Dim s As String
Dim myList List As String

Sub Initialize
	i = 0
	l = 0
	s = "A"
	While i<30 
		
		Stop
		
		l = Len(s)
		myList(s) = CStr(l)
		
		ForAll ele In myList
			Print CStr(i) & " --> " & CStr(Len(ListTag(ele))) & " / " & myList(ListTag(ele))
		End ForAll
		
		i = i + 1
		s = s + s
	Wend
End Sub
Titel: Re: LotusScript: List
Beitrag von: rambrand am 07.09.15 - 15:21:55
Mein Mathe-Abi war mieserabel, aber irgendwo zwischen 67.108.864 und 134.217.728 Zeichen?

Bye,
Markus
Titel: Re: LotusScript: List
Beitrag von: pram am 07.09.15 - 15:48:52
Bei genug Ram schafft es mein Client bis Durchgang 28 (nlnotes braucht dann 1.8GB) und der Server (64bit) bis 30 mit "String too large" beim Versuch in der Zeile "s = s + s" einen String mit 2GB zu erzeugen.
Der namgr Prozess braucht dann aber auch 6,5GB

Zitat
[0E70:000A-2288] 07.09.2015 15:35:27   Agent Manager: Agent printing: 30 --> 536870912 / 536870912
[0E70:000A-2288] 07.09.2015 15:35:32   Agent Manager: Agent printing: 30 --> 1073741824 / 1073741824
[0E70:000A-2288] 07.09.2015 15:35:32   Agent Manager: Agent printing: String too large

Die Notes-Hilfe behauptet aber immer noch etwas anderes:
Zitat
Run-time Error Messages: String too large
A string is generated at run-time that exceeds the size limit of 32,000 characters.

(wobei sich IBM ja dann gerne auf sowas raus redet, wenn es bei Zeichen > 32000 zu Problemen kommt)

Gruß
Roland
Titel: Re: LotusScript: List
Beitrag von: thkn777 am 09.09.15 - 14:48:38
Nunja... effektiv wird der ListTag aller Wahrscheinlichkeit nach kleiner 32k sein. FALLS er in einem Notes-Dokument und einem Text-Item abgespeichert ist, wovon ich aktuell ausgehe...