Autor Thema: String-Array in Zahl wandeln und den höchsten Wert auslesen  (Gelesen 1715 mal)

Offline Sabine

  • Aktives Mitglied
  • ***
  • Beiträge: 112
  • Geschlecht: Weiblich
Hallo,

ich habe einen Array (array_t) vom Typ String mit vielen Werten. Da es sich hierbei um Zahlen handelt würde ich diesen gerne als Zahl umwandeln.

Code
Set collection = db.Search(searchFormula$, dateTime,0)
	Dim coldoc As NotesDocument
	Dim abversioncol As Variant
	Dim zähler As Integer
	Dim zähler1 As Integer
	Dim arraycol As Variant'String
	
	zähler = collection.count
	Set coldoc = collection.GetFirstDocument
	
	While zähler  <> 0 
		abversioncol = coldoc.GetItemValue( "ABVersion" )	
		arraycol = abversioncol(0) & ";"& arraycol
		zähler= zähler-1
		Set coldoc = collection.GetNextDocument(coldoc)
	Wend
	array_t = Evaluate( |@Explode("| + arraycol + |";";")| )

Und kann mir vielleicht jemand noch verraten wie ich an den höchsten Wert des Arrays heran komme?

Habe es ansatzweise so vesucht, aber ohne Erfolg :-(

Code
array_t = Evaluate( |@Explode("| + arraycol + |";";")| )
	num_t = Val(array_t(o))	
	
	Forall u In array_t
		'Dim eval As String
		'Dim pruefung
		'eval = |@max(array_t(u))|
		'pruefung = Evaluate(evasl, coldoc)	
		num_t = Cint(array_t(u))	
	End Forall

Dankeschön.

Gruß Sabine
« Letzte Änderung: 08.02.06 - 07:49:36 von Sabine »

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: String-Array in Zahl wandeln und den höchsten Wert auslesen
« Antwort #1 am: 07.02.06 - 17:58:01 »
Hallo Sabine,

warum machst Du nicht beide Dinge in einem Rutsch - wenn Du sowieso schon dabei bist? Hier ein Vorschlag:

Code
	Dim ws As New NotesUIWorkspace
	Dim doc As NotesDocument
	Dim aDouble () As Double
	Dim vStrings As Variant
	Dim iLoop As Integer
	Dim dblMax As Double
	
	Set doc = ws.CurrentDocument.Document
	
	VStrings = doc.AbVersion
	
	Redim aDouble (Ubound (vStrings))
	
	For iLoop = 0 To Ubound (vStrings)
		aDouble (iLoop)= Cdbl (vStrings (iLoop))
		If iLoop = 0 Then
			dblMax = aDouble (iLoop)
		Else
			If aDouble (iLoop) > dblMax Then
				dblMax = aDouble (iLoop)
			End If
		End If
		
	Next
	
	Msgbox Cstr (dblMax)

ACHTUNG: Hier fehlt jegliches ErrorHandling. Und genau das ist die Stärke von "pure LS" in dieser Situation - Du kannst reagieren, wenn in Deiner Stringliste ein Wert enthalten ist, der nicht in eine Zahl konvertierbar ist.

HTH,
Bernhard

Offline Sabine

  • Aktives Mitglied
  • ***
  • Beiträge: 112
  • Geschlecht: Weiblich
Re: String-Array in Zahl wandeln und den höchsten Wert auslesen
« Antwort #2 am: 08.02.06 - 07:49:08 »
Herzlichen Dank  :D,

das hat mir sehr viel weiter geholfen *freu ganz doll*. Darauf wäre ich nie gekommen, außerdem fehlt mir wohl noch das richtige Verständnis für solche LS Funktionen.

Habe es nun so gelöst:

Code
'Versionsnummernüberprüfung auf die Versionsnummer, die neue Versionsnummer_
	'darf max. 1 höher sein, als sie bereits in anderen Beanstandungen existiert
	Set collection = db.Search(searchFormula$, dateTime,0)
	Dim coldoc As NotesDocument
	Dim abversioncol As Variant
	Dim zähler As Integer
	Dim arraycol As Variant
	Dim aDouble () As Double
	Dim iLoop As Integer
	Dim dblMax As Double
	
	zähler = collection.count
	Set coldoc = collection.GetFirstDocument	
	
	While zähler  <> 0 
		abversioncol = coldoc.GetItemValue( "ABVersion" )	
		arraycol = abversioncol(0) & ";"& arraycol
		zähler= zähler-1
		Set coldoc = collection.GetNextDocument(coldoc)
	Wend
	array_t = Evaluate( |@Explode("| + arraycol + |";";")| )
	
	Redim aDouble (Ubound (array_t))
	
	For iLoop = 0 To Ubound (array_t)
		aDouble (iLoop)= Cdbl (array_t (iLoop))
		If iLoop = 0 Then
			dblMax = aDouble (iLoop)
		Else
			If aDouble (iLoop) > dblMax Then
				dblMax = aDouble (iLoop)
			End If
		End If
		
	Next
	
	Msgbox Cstr (dblMax)

Eine Fehlerprüfung, ob in dem Feld wirklich eine Zahl steht habe ich schon drinnen, denn dann bricht mein Script vorher schon ab. Aber danke Dir für den Hinweis. Hier ist nochmal mein Script:

Code
	'Das Feld ABVersion darf nur Zahlen enthalten!
	If Isnumeric (abversion) Then  
	Else
		Messagebox "Die Änderungsbriefversion darf nur Zahlen enthalten!"
		Call source.GotoField( "ABVersion" )
		Call source.FieldSetText ("SaveOptions","0")
		Continue = False
		Exit Sub
	End If	

zur Fehlerüberprüfung, ob es sich wirklich um Zahlen in dem Feld handelt.

Dankeschön, nochmal und noch einen schönen Tag :-)

Gruß Sabine

Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Re: String-Array in Zahl wandeln und den höchsten Wert auslesen
« Antwort #3 am: 08.02.06 - 08:42:44 »
Hi
kleiner verbesserungsvorschlag noch
Code
'Das Feld ABVersion darf nur Zahlen enthalten!
	If NOT Isnumeric (abversion) Then  
		Messagebox "Die Änderungsbriefversion darf nur Zahlen enthalten!"
		Call source.GotoField( "ABVersion" )
		Call source.FieldSetText ("SaveOptions","0")
		Continue = False
		Exit Sub
	End If

und

Code

array_t = Evaluate( |@Explode("| + arraycol + |";";")| )
=>
array_t = split(arraycol,";")
Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

Offline Sabine

  • Aktives Mitglied
  • ***
  • Beiträge: 112
  • Geschlecht: Weiblich
Re: String-Array in Zahl wandeln und den höchsten Wert auslesen
« Antwort #4 am: 08.02.06 - 09:30:55 »
Hallo Umi,

das ist wirklich nett von Dir  :),

der erste Hinweis mit dem Not war kein Problem...

Code
'Das Feld ABVersion darf nur Zahlen enthalten!
	If NOT Isnumeric (abversion) Then  
		Messagebox "Die Änderungsbriefversion darf nur Zahlen enthalten!"
		Call source.GotoField( "ABVersion" )
		Call source.FieldSetText ("SaveOptions","0")
		Continue = False
		Exit Sub
	End If


aber der zweite mit dem Split macht Probleme, denn dann hat er irgendwie einen leeren Wert zuviel in dem Feld array_t.
Code
While zähler  <> 0 
		abversioncol = coldoc.GetItemValue( "ABVersion" )	
		arraycol = abversioncol(0) & ";"& arraycol
		zähler= zähler-1
		Set coldoc = collection.GetNextDocument(coldoc)
	Wend
	array_t = Evaluate( |@Explode("| + arraycol + |";";")| )
	'array_t = Split(arraycol,";")

Und bringt mir somit die Fehlermeldung Type mismatch!

LG Biene  :)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz