Listen: numerische Werte extrahieren und sortieren
21. April 2010
Ziel: numerische Werte aus einer Liste extrahieren und sortiert ausgeben.
Wir erstellen uns erst einmal eine Beispiel-Liste mit entsprechenden Werten:
Nun sortieren wir den Inhalt der Liste (absteigend) und speichern das Ergebnis in der Variablen liste (überschreiben deren alten Wert):
Das Ergebnis bzw. der neue Inhalt von liste sieht dann so aus:
Nun bestimmen wir den Index in der Liste, an dem der erste numerische Wert zu finden ist:
Jetzt können wir die numerischen Werte auslesen (vom ermittelten Index idx bis zum Ende end der Liste:
Wir erhalten als Ergebnis:
Dies sortieren wir nun noch (z.B. aufsteigend):
Wichtig ist hierbei die Angabe des Parameters -integer. Wir erhalten dann:
Wenn man das Ganze zusammenfasst, so erhält man z.B.:
Wir erstellen uns erst einmal eine Beispiel-Liste mit entsprechenden Werten:
set liste {a b c 10 3 45 d e 4 6 hallo 5}
Nun sortieren wir den Inhalt der Liste (absteigend) und speichern das Ergebnis in der Variablen liste (überschreiben deren alten Wert):
set liste [lsort -decreasing $liste]
Das Ergebnis bzw. der neue Inhalt von liste sieht dann so aus:
hallo e d c b a 6 5 45 4 3 10
Nun bestimmen wir den Index in der Liste, an dem der erste numerische Wert zu finden ist:
set idx [lsearch -regexp $liste {[0-9]+}]
Jetzt können wir die numerischen Werte auslesen (vom ermittelten Index idx bis zum Ende end der Liste:
set num_liste [lrange $liste $idx end]
Wir erhalten als Ergebnis:
6 5 45 4 3 10
Dies sortieren wir nun noch (z.B. aufsteigend):
lsort -integer -increasing $num_liste
Wichtig ist hierbei die Angabe des Parameters -integer. Wir erhalten dann:
3 4 5 6 10 45
Wenn man das Ganze zusammenfasst, so erhält man z.B.:
set liste [lsort -decreasing $liste]
#
# Weiß man, dass die Liste immer mindestens einen numerischen Wert enthält,
# so kann man ohne catch auskommen
#
lsort -integer -increasing [lrange $liste [lsearch -regexp $liste {[0-9]+}] end]
#
# Falls man aber davon ausgehen muss, dass es keinen einzigen numerischen Wert in
# der Liste geben könnte, so kann man dies mittels catch abfangen
#
if { [catch {lsort -integer -increasing [lrange $liste [lsearch -regexp $liste
{[0-9]+}] end]} result] } {
puts "Kein numerischer Wert enhalten :: $result"
} else {
puts "Ergebnis: $result
}
Es wurde noch kein Kommentar abgegeben. Bist Du der Erste?
HILFE
Code-Beispiele werden mit den BBCodes [code][/code] dargestellt.
Jedes Tag muss eine Zeile für sich allein haben, d.h der Beispiel-Code
muss wirklich ZWISCHEN den Tags stehen. Beispiel:
Alles was zwischen den beiden Tags [register] und [/register] eingetragen wird, ist nur für registrierte (und eingeloggte) User sichtbar.
[code] ACHTUNG! HIER UMBRUCH WICHTIG. TAG [code] MUSS ALLEIN STEHEN
#include <stdio.h>
int main( void ){
return 0;
} ACHTUNG! HIER UMBRUCH WICHTIG. NACHFOLGENDES TAG [/code] MUSS ALLEIN STEHEN
[/code]Alles was zwischen den beiden Tags [register] und [/register] eingetragen wird, ist nur für registrierte (und eingeloggte) User sichtbar.
Dein Name *
Deine Email
Deine Website
Vorschau