Tcl8.5 Listen: numerische Werte extrahieren und sortieren

Ziel: numerische Werte aus einer Liste extrahieren und sortiert ausgeben.

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
}
 
 Artikel als Bookmark:
Beitrag wurde bisher 320 mal geöffnet
RA Zabel/Stolze
 
Dein Beitrag
Hilfe
fett
kursiv
unterstrichen
url
url=
einrücken
code
liste
 
Zitat
Zitat=
codewort
Vorschau ausschalten
Man kann mittels der BBCodes den Text etwas gestalten. Möchtest Du z.B. ein Wort fett darstellen, so kannst Du das Wort markieren und danach einfach auf das Icon "[b][/b]" klicken. Es ist auch möglich, erst auf ein BBCode-Icon zu klicken und danach den Text einzufügen. Sollte bei Deinem Browser das Einfügen der BBCodes per Mausklick nicht funktionieren, so kannst Du die Codes auch per Hand eingeben. Gib dazu die BBCodes wie auf den Buttons dargestellt ein - achte auf korrekte Eingabe der Start- und End-Tags (falls vorhanden).

Beispiele für BBCodes:

[b][i]Hallo Welt[/i][/b] Hallo Welt
[url]http://www.example.com[/url] http://www.example.com
[url=http://www.example.com]Beispiel[/url] Beispiel
[code]<script type='text/javascript'>
[indent][b]alert[/b]("Hallo");
</script>[/code]
probiers aus
[list][*]Punkt 1[/*][*]Punkt 2[/*][/list] probiers aus
[cite=Matthias Sonnenkalb, [i]the blog[/i]]hallo ein Zitat[/cite] probiers aus

Hinweis: Mittels "Vorschau ausschalten" kann man die Live-Preview-Funktion abschalten. Dies kann sich vorteilhaft auf die Geschwindigkeit bei der Texteingabe auswirken.
1
Dein Name
  • 98 Artikel  (zeigen)
  • 70225 Klicks
  • 57 Kommentare
  • 11 Artikel (2010)  (zeigen)
  • 2865 Klicks (2010)
  • 1 Kommentare (2010)
Freunde / Linkparade (4)