Autor Thema: Sortierung von Werten  (Gelesen 3279 mal)

Offline DocNotes

  • Aktives Mitglied
  • ***
  • Beiträge: 151
  • Geschlecht: Männlich
Sortierung von Werten
« am: 14.01.08 - 16:29:33 »
Hallo zusammen,

ich habe eine Aufgabenstellung bei der ich gerne Eure Hilfe in Anspruch nehmen würde. Ich habe diverse Dokumente, in denen in einem Textfeld u.a. eine Nummerierung enthalten ist.
Diese Dokumente will ich als Liste (Dim myList List as NotesDocument) korrekt sortiert haben, z.B. 8.1.4.2 und danach 8.2.1.1 und NICHT 8.10.

Die Dokumente erhalte ich über eine Auswahl mittels Picklist als NotesDocumentCollection.

Ich hoffe ich habe mich verständlich ausgedrückt, wenn nicht bitte nachfragen.

Anbei eine Beispiel der Nummerierung:

Code
8.1.1
8.1.2
8.1.2
8.1.4
8.1.4.2
8.10
8.12
8.15
8.2.1.1
8.2.1.10
8.2.1.2
8.2.1.2
8.3.1.1
8.3.2.1
8.4
8.5.1
8.5.2
8.6
8.7.1
8.7.2
8.8.1.1
8.8.1.2
8.8.1.3
8.8.1.4
8.8.2.1
8.8.2.2
8.8.2.3
8.8.2.4
8.9.1
8.9.2

Vielen Dank schon mal!

Gruß,
Markus
« Letzte Änderung: 15.01.08 - 10:21:14 von DocNotes »

botschi

  • Gast
Re: Sortierung von Werten
« Antwort #1 am: 14.01.08 - 16:47:15 »
Ich hoffe ich habe mich verständlich ausgedrückt, wenn nicht bitte nachfragen.

Geht so, wo ist denn jetzt genau das Problem?
Fertig habe ich das nicht für Dich hier liegen...

Matthias

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Sortierung von Werten
« Antwort #2 am: 14.01.08 - 16:48:42 »
Listen sind unsortiert, aber das weisst Du ja bestimmt.
Dir hilft also nur (meines Erachtens der einfachste Weg), zunächst die Nummerierungswerte der in Frage kommenden Dokumente zu ermiteln und in ein Array zu schreiben. Dieses wird dann sortiert, und anschliessend baust Du Deine List as NotesDocument in der richtigen Reihenfolge auf.

Deine Nummern musst Du selbstverständlich noch normieren, sonst klappt das nicht mit der Sortierung (aus 8.2.1.1. müsste also sowas werden wie 0800002001001 - da braucht es auch etwas Grips, sowas dynamisch zu halten).

Bernhard

Offline DocNotes

  • Aktives Mitglied
  • ***
  • Beiträge: 151
  • Geschlecht: Männlich
Re: Sortierung von Werten
« Antwort #3 am: 14.01.08 - 21:08:21 »

Deine Nummern musst Du selbstverständlich noch normieren, sonst klappt das nicht mit der Sortierung (aus 8.2.1.1. müsste also sowas werden wie 0800002001001 - da braucht es auch etwas Grips, sowas dynamisch zu halten).

Bernhard

Vielen Dank für die Antworten. Genau so ein Kniff fehlt mir. Dann forsche ich mal weiter. Bin über jeden Hinweis zu einer Normierung dankbar!

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Sortierung von Werten
« Antwort #4 am: 14.01.08 - 22:56:59 »
Wenn Du jetzt noch sagst, wo Dein konkretes Problem ist ... "Doc"Notes impliziert, dass Du schon sehr weit bist und Dir jetzt noch irgendeine scheinbare Kleinigkeit fehlt  ;)

Bernhard
« Letzte Änderung: 14.01.08 - 23:04:54 von koehlerbv »

Offline DocNotes

  • Aktives Mitglied
  • ***
  • Beiträge: 151
  • Geschlecht: Männlich
Re: Sortierung von Werten
« Antwort #5 am: 15.01.08 - 07:46:28 »
Ich werde heute mal versuchen die Normierung umzusetzen und das Array dementsprechend zu sortieren. Dafür finde ich bestimmt im Forum eine Funktion.

Vielen Dank!

Offline diali

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.023
  • Geschlecht: Männlich
Re: Sortierung von Werten
« Antwort #6 am: 15.01.08 - 07:49:38 »
meinst Du eventuell die Sortierung in einer Ansicht?

Dann sind dies keine Zahlen sondern ein String. Entweder Du machst 4 versteckte Spalten, die Du nach den Nummern (ZahlenTyp) sortierst und dann eine Spalte in der Du den String anzeigst oder Du baust den String so um, dass er sich alphanumerisch sortieren lässt. Also anstelle 8.2.1.1 muss dann 08.02.01.01 stehen und wenn Du über 99 an einer Stelle kommst/kommen kannst, dann muss da 008.002.001.001 stehen. Dieser String kann wieder in eienr versteckten Spalte sortiert werden ...
Gruß
Dirk

Offline DocNotes

  • Aktives Mitglied
  • ***
  • Beiträge: 151
  • Geschlecht: Männlich
Re: Sortierung von Werten
« Antwort #7 am: 15.01.08 - 08:15:16 »
meinst Du eventuell die Sortierung in einer Ansicht?

Dann sind dies keine Zahlen sondern ein String. Entweder Du machst 4 versteckte Spalten, die Du nach den Nummern (ZahlenTyp) sortierst und dann eine Spalte in der Du den String anzeigst oder Du baust den String so um, dass er sich alphanumerisch sortieren lässt. Also anstelle 8.2.1.1 muss dann 08.02.01.01 stehen und wenn Du über 99 an einer Stelle kommst/kommen kannst, dann muss da 008.002.001.001 stehen. Dieser String kann wieder in eienr versteckten Spalte sortiert werden ...

Ich habe die eine NotesDocumentCollection. Daher werde ich wie von Dir beschrieben ein Array aufbauen mit der Normierung auf 008.002.001.001. Dann das Array sortieren und dann eine Liste von Dokumenten danach aufbauen.

Offline DocNotes

  • Aktives Mitglied
  • ***
  • Beiträge: 151
  • Geschlecht: Männlich
Re: Sortierung von Werten
« Antwort #8 am: 15.01.08 - 08:57:02 »
Hier mal meine Funktion um die Werte zu normieren, habe die Punkte zwischen den Werte weggelassen. Jetzt noch in ein Array und dieses sortieren. Dann gehts so langsam weiter!



Code
Function umwandeln_OECD( strNr As String, strNrNormiert As String, strErrMsg As String ) As Boolean 
%REM ------------------------------------------------------------
	Aufgabe: 

	Erstellt: 2008-01-15, Autor: Markus Langer 

	Parameter: 
			- strNr [in] - die OECD Nummer nicht normiert
			- strNrNormiert [out] - die OECD Nummer in normierten Form
			- strErrMsg [out] - im Fehlerfall die Fehlermeldung
	Rückgabe:  True, wenn erfolgreich / sonst False 

	Beispiel:
		8.2.1.1 	-> 008002001001
		8.10		-> 008010000000

	Historie: 
	2008-01-15 Markus Langer 
			- Funktion neu erstellt 
%END REM ----------------------------------------------------
	On Error Goto ErrorHandling 
	
	Const TRENNER$ = "."						'Trennzeichen zwischen den Zahlen
	Const MAX_EBENEN% = 5					'Maximale Anzahl Ebenen
	Const MAX_STELLEN% = 3					'Maximale Anzahl Zahlen pro Ebene
	
	Dim arrEinzelWerte() As String
	Dim strNrTmp As String
	Dim intCount As Integer
	Dim x As Integer
	
	strNrNormiert = ""
	If strNr = "" Then Goto EndJmp
	
	'Textstring in die einzelnen Werte aufteilen
	If ScriptExplode( strNr, TRENNER, arrEinzelWerte, strErrMsg ) = False Then Error 15010, strErrMsg
	
	'durch alle Werte laufen und in die normierte Form bringen
	Forall strWert In arrEinzelWerte
		strNrTmp = Right$( String$( MAX_STELLEN, "0" ) + strWert, MAX_STELLEN )
		strNrNormiert = strNrNormiert + strNrTmp
		intCount = intCount + 1	
	End Forall
	
	'Falls noch Null-Werte angehängt werden müssen
	If ( intCount < MAX_EBENEN ) Then
		For x = intCount To ( MAX_EBENEN - 1 )
			strNrNormiert = strNrNormiert + String$( MAX_STELLEN, "0" )	
		Next
	End If
	
EndJmp: 
	umwandeln_OECD = True 
ExitJmp: 
	Exit Function 
ErrorHandling: 
	strErrMsg = Error$ 
	If Err < 15000 Then strErrMsg = strErrMsg & " [sbProductDataSheed - umwandeln_OECD - Zeile " & Cstr ( Erl ) & "]" 
	umwandeln_OECD = False 
	Resume ExitJmp
End Function

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz