Oder gleich die Lösung :
_dLim1 := "|";
_dlim2 := "~";
_dlim5 := "|#|";
REM {Sortieren und neu numerieren};
_unsortedList := <FieldName>
_sortedList := @Sort(@TextToTime(@Left(@Right(_unsortedList;_dLim1 + "StartDate" + _dLim2);_dLim1) + " " + @Left(@Right(_unsortedList;_dLim1 + "StartTime" + _dLim2);_dLim1)));
@Transform(_sortedList ; "_key" ;
@Transform(_unsortedList ; "_position";
@Do( _posKey := @TextToTime(@Left(@Right(_position;_dLim1 + "StartDate" + _dLim2);_dLim1) + " " + @Left(@Right(_position;_dLim1 + "StartTime" + _dLim2);_dLim1));
@If( _posKey = _key ;
@Do(
_newSortedList := _newSortedList : (@Text(@Elements(_newSortedList) + 1) + _dLim5 + @Right(_position ; _dLim5))
)
;""
)
)
)
);
FIELD <FieldName> := @Trim(_newSortedList)
Schönen Abend noch.....
Bin auch für kompaktere Lösungen zu haben
Also .....
Wenn ich deine Liste nehme (ich hab die Startdatum Werte etwas verändert) ...
|#||Route~Paderborn - Lippstadt Paderborn|StartDate~25.02.2006|StartTime~08:00:00|EndTime~15:00:00|
|#||Route~Paderborn - Hannover- Paderborn|StartDate~10.02.2006|StartTime~06:15:00|EndTime~00:00:00|
|#||Route~Paderborn - Hannover- Paderborn|StartDate~21.02.2006|StartTime~00:00:00|EndTime~21:00:00|
|#||Route~Paderborn - Hannover- Paderborn|StartDate~13.02.2006|StartTime~06:00:00|EndTime~00:00:00|
|#||Route~Paderborn - Hannover- Paderborn|StartDate~24.02.2006|StartTime~00:00:00|EndTime~21:00:00|
Und die durch deinen Code laufen lasse .....
_dLim1 := "|";
_dlim2 := "~";
_dlim5 := "|#|";
REM {Sortieren und neu numerieren};
_unsortedList := SourceField;
_sortedList := @Sort(@TextToTime(@Left(@Right(_unsortedList;_dLim1 + "StartDate" + _dLim2);_dLim1) + " " + @Left(@Right(_unsortedList;_dLim1 + "StartTime" + _dLim2);_dLim1)));
@Transform(_sortedList ; "_key" ;
@Transform(_unsortedList ; "_position";
@Do( _posKey := @TextToTime(@Left(@Right(_position;_dLim1 + "StartDate" + _dLim2);_dLim1) + " " + @Left(@Right(_position;_dLim1 + "StartTime" + _dLim2);_dLim1));
@If( _posKey = _key ;
@Do(
_newSortedList := _newSortedList : (@Text(@Elements(_newSortedList) + 1) + _dLim5 + @Right(_position ; _dLim5))
)
;""
)
)
)
);
FIELD SolutionBikerboy := @Trim(_newSortedList);
Dann kommt bei mir als Ergebnis diese Liste raus ....
1|#||Route~Paderborn - Hannover- Paderborn|StartDate~10.02.2006|StartTime~06:15:00|EndTime~00:00:00|
3|#||Route~Paderborn - Hannover- Paderborn|StartDate~13.02.2006|StartTime~06:00:00|EndTime~00:00:00|
4|#||Route~Paderborn - Hannover- Paderborn|StartDate~21.02.2006|StartTime~00:00:00|EndTime~21:00:00|
5|#||Route~Paderborn - Hannover- Paderborn|StartDate~24.02.2006|StartTime~00:00:00|EndTime~21:00:00|
6|#||Route~Paderborn - Lippstadt Paderborn|StartDate~25.02.2006|StartTime~08:00:00|EndTime~15:00:00|
Und ich denke mal das ist nicht das Ergebis das du da haben willst.
Das Problem das du da hast liegt hier ....
@Do(
@StatusBar(@Text(@Elements(_newSortedList) + 1));
_newSortedList := _newSortedList : (@Text(@Elements(_newSortedList) + 1) + _dLim5 + @Right(_position ; _dLim5))
)
Weil du beim ersten Durchlauf nämlich ZWEI Elemente von _newsortedlist erzeugst.
Außerdem hast du, zumindest mit der Liste die du uns da zur Verfügung gestellt hast noch ein anderes Problem ....
Schreib doch mal nach deinem Sort ein
@StatusBar("SortedList");
@StatusBar(_sortedList);
Das gibt dir den Wert von _sortedList in die Statuszeile aus. Es würde mich sehr wundern, wenn du da etwas angezeigt bekommst.
Also mit meiner Frage nach dem Fehler war in diesem Fall unberechtigt, da wir das Zeit Kriterium drin haben und es nicht möglich ist 2 Positionen mit dem selben Datum + Zeitwert zu versehen.
In anderen Listen habe ich die Idee von jBubbleBoy aufgenommen und für meine Ansprüche umgebaut. Bin gespannt was ihr davon haltet.
dlim1 := "|" ;
_dlim2 := "~";
_dlim5 := "|#|" ;
_input := wert1 ;
_tmpList := @Right(@Sort(@Left(@Right(_input ; _dlim1 + "SlipDate" + _dlim2); _dlim1) + _dlim5 + _input);_dlim5);
@For(_n := 1 ; _n <= @Elements(_tmpList); _n := _n + 1;
@Do(
_entry := @Subset(@Subset(_tmpList ; _n) ; -1);
_value := @Left(@Right(_entry ; _dlim1 + "SlipNo" + _dlim2) ; _dlim1);
_from := "SlipNo" + _dLim2 + _value ;
_to := "SlipNo" + _dlim2 + @Text(_n);
_entry := @ReplaceSubString(_entry; _from; _to);
_newList := _newList : _entry
)
);
Das die Zählung nicht stimmt habe ich auch festgestellt und auch lange gesucht, aber hier nun die verbesserte Funktion :
@If(posDataString = "" ; @Return("") ; "");
_dLim1 := "|";
_dLim2 := "~";
_dLim3 := "#";
_dLim4 := "|~|" ;
_dLim5 := "|#|" ;
REM {Sortieren und neu numerieren};
_unsortedList := posDataString;
_sortedList :=@Sort(@TextToTime(@Left(@Right(_unsortedList;_dLim1 + "StartDate" + _dLim2);_dLim1) + " " + @Left(@Right(_unsortedList;_dLim1 + "StartTime" + _dLim2);_dLim1)));
@StatusBar("SortedList");
@StatusBar(_sortedList);
@Transform(_sortedList ; "_key" ;
@Transform(_unsortedList ; "_position";
@Do( _posKey := @TextToTime(@Left(@Right(_position;_dLim1 + "StartDate" + _dLim2);_dLim1) + " " + @Left(@Right(_position;_dLim1 + "StartTime" + _dLim2);_dLim1));
@If( _posKey = _key ;
@Do(
_newSortedList := _newSortedList : (@Text(@Elements(@Trim(_newSortedList)) + 1) + _dLim5 + @Right(_position ; _dLim5))
)
;""
)
)
)
);
FIELD posDataString := @Trim(_newSortedList);
@True
OK mein @Sorted hatte ursprünglich das Problem, das er aus dem TextToTime nicht wirklich schlau wurde. Deswegen habe ich den zunächst noch zusätzlich in seine Datumsbestandteile zerlegt.
Mit der Lösung von Michael geht das dann mit einem schönen kleinen @sort und sorry das ich das sagen muss Michael ;D einem @transform.
Quellliste ....
|#||Route~Paderborn - Lippstadt Paderborn|StartDate~25.02.2006|StartTime~08:00:00|EndTime~15:00:00|
|#||Route~Kulmbach - Hannover- Kulmbach|StartDate~10.02.2006|StartTime~06:15:00|EndTime~12:00:00|
|#||Route~Paderborn - Hannover- Paderborn|StartDate~10.02.2006|StartTime~06:15:00|EndTime~00:00:00|
|#||Route~Aachen - Hannover- Aachen|StartDate~10.02.2006|StartTime~06:15:00|EndTime~14:00:00|
|#||Route~Paderborn - Hannover- Paderborn|StartDate~21.02.2006|StartTime~00:00:00|EndTime~21:00:00|
|#||Route~Paderborn - Hannover- Paderborn|StartDate~13.02.2006|StartTime~06:00:00|EndTime~00:00:00|
|#||Route~Paderborn - Hannover- Paderborn|StartDate~24.02.2006|StartTime~00:00:00|EndTime~21:00:00|
|#||Route~Paderborn - Hannover- Paderborn|StartDate~24.02.2006|StartTime~00:00:00|EndTime~21:00:00|
Code hinter Button ...
REM {Delimiter und interne Variablen setzen};
_dLim1 := "|";
_dlim2 := "~";
i :=0;
REM {Sortieren};
_sortedList := @Sort(SourceField; [CustomSort];@If(
@TextToTime(@Middle($A;"StartDate" + dLim2; dLim1) + " " + @Middle($A;"StartTime" + dLim2; dLim1)) <
@TextToTime(@Middle($B;"StartDate" + dLim2; dLim1) + " " + @Middle($B;"StartTime" + dLim2; dLim1));-1;
@TextToTime(@Middle($A;"StartDate" + dLim2; dLim1) + " " + @Middle($A;"StartTime" + dLim2; dLim1)) >
@TextToTime(@Middle($B;"StartDate" + dLim2; dLim1) + " " + @Middle($B;"StartTime" + dLim2; dLim1));1;
0));
REM {neu nummerieren};
FIELD TargetField := @Transform(_sortedList;"var";@Text(i:=i+1) + var);
@True
Ergebnisliste ...
1|#||Route~Paderborn - Hannover- Paderborn|StartDate~21.02.2006|StartTime~00:00:00|EndTime~21:00:00|
2|#||Route~Paderborn - Lippstadt Paderborn|StartDate~25.02.2006|StartTime~08:00:00|EndTime~15:00:00|
3|#||Route~Paderborn - Hannover- Paderborn|StartDate~13.02.2006|StartTime~06:00:00|EndTime~00:00:00|
4|#||Route~Paderborn - Hannover- Paderborn|StartDate~10.02.2006|StartTime~06:15:00|EndTime~00:00:00|
5|#||Route~Paderborn - Hannover- Paderborn|StartDate~24.02.2006|StartTime~00:00:00|EndTime~21:00:00|
6|#||Route~Kulmbach - Hannover- Kulmbach|StartDate~10.02.2006|StartTime~06:15:00|EndTime~12:00:00|
7|#||Route~Paderborn - Hannover- Paderborn|StartDate~24.02.2006|StartTime~00:00:00|EndTime~21:00:00|
8|#||Route~Aachen - Hannover- Aachen|StartDate~10.02.2006|StartTime~06:15:00|EndTime~14:00:00|