Airwolf89: TCL: unterschiedlich lange Inhalte tabellarisch anordnen

Hallo Leute,

gehört zwar zum selben Script wozu ich euch schonmal befragt hatte, allerdings ist das ja hier was ganz anderes und hat so mit der Frage nix zu tun. Sorry wegen dem Doppelpost unter anderem Namen. Das mit dem namen war Ausversehen da ich in manchen Foren unterschiedliche namen verwende, nur verwechselt.

So, zurück zum Thema.
Ich habe verschiedenste Ausgaben. Die sollen möglichst platzsparend aber trotzdem übersichtlich angeordnet werden. Das dumme ist dass die unterschiedlich lang sind.
Es geht um IP Addressen, Anzahl von Fehlern, und die Anzahl von gesendeten, empfangenen, verschlüsselten und entschlüsselten Pakete. Diese Werte variieren teils sehr stark, IP Addressen sind unterschiedlich lang, die anzahl der pakete schwankt zwischen 0 und 25 Mio.

Wie kann ich es jetzt bewerkstelligen dass ich immer die gleichen Daten direkt untereinander habe. Allerdings soll es platzsparend sein, da die daten für viele verschiedene Peer aufgelistet werden. Von daher sollte ein Datensatz möglichst in ein oder zwei zeilen angezeigt werden. Aussehen soll es dann ungefähr so:

TabellenKopf:
peer            |from               |to                     |error
encaps          |decaps             |encrypt                |decrypt
--------------------------------------------------------------------
addresse        |addresse           |addresse               |anzahl
anzahl          |anzahl             |anzahl                 |anzahl
addresse        |addresse           |addresse               |anzahl
anzahl          |anzahl             |anzahl                 |anzahl
addresse        |addresse           |addresse               |anzahl
anzahl          |anzahl             |anzahl                 |anzahl

Also zwei zeilen immer ein Datensatz, wird inner while schleife hingeschrieben.

Aber wie gesagt, die addressen sind halt unterschiedlich lang, die anzahl ist immer verschieden und von der länge her sehr unterschiedlich. Wie könnte ich das nun bewerkstelligen dass immer an einer bestimmten position angefangen wird zu schreiben?

Danke im voraus

  1. Hallo Airwolf89

    gehört zwar zum selben Script wozu ich euch schonmal befragt hatte,

    Wo? Link?
    Oder besser dort weiter fragen!

    So, zurück zum Thema.
    Ich habe verschiedenste Ausgaben. Die sollen möglichst platzsparend aber trotzdem übersichtlich angeordnet werden. Das dumme ist dass die unterschiedlich lang sind.

    Wo sollen die ausgegeben werden?
    Auf der Konsole?
    Einem Drucker?
    In einem HTML-Dokument?

    Wie kann ich es jetzt bewerkstelligen dass ich immer die gleichen Daten direkt untereinander habe.

    Das hängt vom Ausgabemedium ab.

    Auf Wiederlesen
    Detlef

    --
    - Wissen ist gut
    - Können ist besser
    - aber das Beste und Interessanteste ist der Weg dahin!
    1. Hallo,

      link würde ich dir gerne geben, aber anscheindend wurde das Teil gelöscht, vllt. wegen meines Doppelposts gestern. Hat aber erstens nix mit dieser konkreten Aufgabenstellung zu tun und zweitens hat auch keiner geantwortet. In dem Post habe ich auch ne ganz andere Frage gestellt wie ich an eine Aufgabe herangehen kann.

      So, also die Ausgabe soll auf der Konsole erfolgen.

      Ich habe das jetzt so versucht dass ich den Kopf der Tabelle in seine Einzelnen Bestandteile zerlöegt habe, also die einzelnen Überschriften und dann die Differenz zwischen der Länge dieser Überschriften und der Länge der Tabelleneinträge gebildet. Entsprechend der Differenz habe ich dann jeweils eine For-Schleife laufen lassen um an die Daten Leerzeichen zu hängen um somit alle daten dann entsprechend den Überschriften auszurichten. Meiner Ansicht nach müsste das auch so funktionieren, auch der Code (siehe unten, ist allerdings auskommentiert) müsste so passen, aber der hängt mir wie wild da Leerzeichen an, entweder mal zu wenig oder mal zu viel, ich kanns einfach nicht nachvollziehen.

      Wäre schön wenn ihr mal drüberguckt und mir vllt. sagen könntet was ich falsch gemacht hab oder ihr mir ne andere Lösung anbieten könntet.

      Code:

      set check "0"

      #set head(peer) "peer              " #set head(local) "|from                                     " #set head(remote) "|to                                         " #set head(error) "|errors" #set head(encaps) "encaps            " #set head(decaps) "|decaps                                   " #set head(encrypt) "|encrypt                                    " #set head(decrypt) "|decrypt" #set head(line) "--------------------------------------------------------------------------------------------------------------"

      #puts "$head(peer)$head(local)$head(remote)$head(error)" #puts "$head(encaps)$head(decaps)$head(encrypt)$head(decrypt)" #puts "$head(line)"

      #set l_h(peer) [string length $head(peer)] #set l_h(local) [string length $head(local)] #set l_h(remote) [string length $head(remote)] #set l_h(encaps) [string length $head(encaps)] #set l_h(decaps) [string length $head(decaps)] #set l_h(encrypt) [string length $head(encrypt)]

      while {$check == 0} {

      set first [string first vrf $output]   set last [string first path $output]

      set last [expr $last + 20]

      if {$first > 0 } {     set part [string range $output $first $last]     set output [string range $output $last end]

      set peera [string first peer $part]     set peerb [string first { port 500} $part]     set peer [string range $part [expr $peera + 5] [ expr $peerb - 1]]

      set locala [string first {local  ident (addr/mask/prot/port): } $part]     set localb [string first {   remote} $part]     set local [string range $part [expr $locala+36] [expr $localb-2]]     set remotea [string first {   remote ident (addr/mask/prot/port):} $part]     set remoteb [string first {   current} $part]     set remote [string range $part [expr $remotea+39] [expr $remoteb-2]]

      set encapsa [string first {encaps} $part]     set encapsb [string first {, #pkts encrypt} $part]     set encaps [string range $part [expr $encapsa + 8] [expr $encapsb-1]]

      set decapsa [string first {decaps}  $part]     set decapsb [string first {, #pkts decrypt} $part]     set decaps [string range $part [expr $decapsa + 7] [expr $decapsb-1]]

      set encrypta [string first {encrypt} $part]     set encryptb [string first {, #pkts digest} $part]     set encrypt [string range $part [expr $encrypta + 8] [expr $encryptb-1]]

      set decrypta [string first {decrypt} $part]     set decryptb [string first {, #pkts verify} $part]     set decrypt [string range $part [expr $decrypta + 8] [expr $decryptb-1]]

      set errora [string first {errors} $part]     set errorb [string first {#recv} $part]     set error [string range $part $errora [expr $errorb-3]]

      #set l_peer [string length $peer]     #set l_local [string length $local]     #set l_remote [string length $remote]     #set l_enc [string length $encaps]     #set l_dec [string length $decaps]     #set l_cry [string length $encrypt]

      #set diff(peer) [expr $l_h(peer)- $l_peer]     #set diff(local) [expr $l_h(local)-$l_local]     #set diff(remote) [expr $l_h(remote)-$l_remote]     #set diff(enc) [expr $l_h(encaps)-$l_enc]     #set diff(dec) [expr $l_h(decaps)-$l_dec]     #set diff(cry) [expr $l_h(encrypt)-$l_cry]     #set space_peer ""     #set space_local ""     #set space_remote ""     #set space_enc ""     #set space_dec ""     #set space_cry ""

      #set dur(a) 0     #set dur(b) 0     #set dur(c) 0     #set dur(d) 0     #set dur(e) 0     #set dur(f) 0

      #for {set i 0} {$i < $diff(peer)} {incr i} {     #  set space_peer [append $space_peer "|"]     #  incr dur(a)     #}

      #for {set i 0} {$i < $diff(local)} {incr i} {     #  set space_local [append $space_local "|"]     #  incr dur(b)     #}

      #for {set i 0} {$i < $diff(remote)} {incr i} {     #  set space_remote [append $space_remote "|"]     #  incr dur(c)     #}

      #for {set i 0} {$i < $diff(enc)} {incr i} {     #  set space_enc [append $space_enc "|"]     #  incr dur(d)     #}

      #for {set i 0} {$i < $diff(dec)} {incr i} {     #  set space_dec [append $space_dec "|"]     #  incr dur(e)     #}

      #for {set i 0} {$i < $diff(cry)} {incr i} {     #  set space_cry [append $space_cry "|"]     #  incr dur(f)     #}

      #puts "$peer$space_peer$local$space_local$remote$space_remote$error"     #puts "$encaps$space_enc$decaps$space_dec$encrypt$space_cry$decrypt"

      puts "$peer $local $remote $error"     puts "$encaps $decaps $encrypt $decrypt"     puts "======================================================================================================="

      #===================== #Test #=====================

      #puts "Laenge der Kopfdaten"   #puts "$l_h(peer)"   #puts "$l_h(local)"   #puts "$l_h(remote)"   #puts "$l_h(encaps)"   #puts "$l_h(decaps)"   #puts "$l_h(encrypt)"   #puts "$head(line)"   #puts "Laenge der Daten"   #puts "$l_peer"   #puts "$l_local"   #puts "$l_remote"   #puts "$l_enc"   #puts "$l_dec"   #puts "$l_cry"   #puts "Laenge der differenzen"   #puts "$diff(peer), $diff(local), $diff(remote), $diff(enc), $diff(dec), $diff(cry)"   #puts "$dur(a), $dur(b), $dur(c), $dur(d), $dur(e), $dur(f)"   #puts "abstaende"   #puts "$space_peer,bla"   #puts "$space_local,bla"   #puts "$space_remote,bla"   #puts "$space_enc,bla"   #puts "$space_dec,bla"   #puts "$space_cry,bla"

      } else {     set check "1"   } }

      Habe eigentlich so ziemlich alles überprüft was ich überprüfen konnte:

      peer              |from                                     |to                                         |errors encaps            |decaps                                   |encrypt                                    |decrypt

      Laenge der Kopfdaten 18 42 44 18 42 44

      Laenge der Daten 12 31 31 7 8 8 Laenge der differenzen 6, 11, 13, 11, 34, 36 Durchlaeufe in der For-Schliefe 6, 11, 13, 11, 34, 36 abstaende |,bla |||||,bla |||||||,bla ||||||||,bla |,bla ||||||||||||||||||,bla Laenge der Kopfdaten 18 42 44 18 42 44

      Laenge der Daten 15 38 38 1 2 2 Laenge der differenzen 3, 4, 6, 17, 40, 42 Durchlaeufe in der For-Schliefe 3, 4, 6, 17, 40, 42 abstaende |||||||,bla ||||,bla ||||||,bla |||||||||,bla ||||||||||,bla |||||,bla Laenge der Kopfdaten 18 42 44 18 42 44

      Laenge der Daten 13 38 36 1 2 2 Laenge der differenzen 5, 4, 8, 17, 40, 42 Durchlaeufe in der For-Schliefe 5, 4, 8, 17, 40, 42 abstaende |||||||||||||||,bla ||||||,bla |||||||||,bla ||||||||||||||||,bla |,bla ||,bla Laenge der Kopfdaten 18 42 44 18 42 44

      Laenge der Daten 14 38 37 1 2 2 Laenge der differenzen 4, 4, 7, 17, 40, 42 Durchlaeufe in der For-Schliefe 4, 4, 7, 17, 40, 42 abstaende |||||,bla |,bla |||||||||||||||||||,bla |||||||||||||||||||,bla |||||||||,bla |||||||||||||,bla Laenge der Kopfdaten 18 42 44 18 42 44

      Laenge der Daten 14 38 37 1 2 2 Laenge der differenzen 4, 4, 7, 17, 40, 42 Durchlaeufe in der For-Schliefe 4, 4, 7, 17, 40, 42 abstaende |||,bla ||||,bla |||||||||||||||||||||,bla |||||||||||||||||||,bla |||||||,bla ||||||||||||||,bla Laenge der Kopfdaten 18 42 44 18 42 44

      Laenge der Daten 13 38 36 1 2 2 Laenge der differenzen 5, 4, 8, 17, 40, 42 Durchlaeufe in der For-Schliefe 5, 4, 8, 17, 40, 42 abstaende ||||||||||||||||||||||||||||,bla ||,bla |||,bla |||||||||||||||||||||||||,bla ||||||||||||||||||||,bla ||||||||||||||||||||,bla Laenge der Kopfdaten 18 42 44 18 42 44

      Laenge der Daten 13 38 36 8 9 9 Laenge der differenzen 5, 4, 8, 10, 33, 35 Durchlaeufe in der For-Schliefe 5, 4, 8, 10, 33, 35 abstaende |||||||||||||||||||||||||||||||||,bla ||,bla ||||,bla ||||,bla |||||||||||||||||||||||||,bla ||||||||||||||||||||||||||,bla Laenge der Kopfdaten 18 42 44 18 42 44

      Laenge der Daten 12 31 31 4 5 5 Laenge der differenzen 6, 11, 13, 14, 37, 39 Durchlaeufe in der For-Schliefe 6, 11, 13, 14, 37, 39 abstaende |||,bla ||||||||||||||||||||||||||||||||||,bla ||||||||||||||||||||||||||||||,bla |||||||,bla |||||||||||||||||||||||||,bla |||||||||||||||||||||||||||||||,bla Laenge der Kopfdaten 18 42 44 18 42 44

      Laenge der Daten 12 28 31 6 6 7 Laenge der differenzen 6, 14, 13, 12, 36, 37 Durchlaeufe in der For-Schliefe 6, 14, 13, 12, 36, 37 abstaende |||,bla |||||||,bla |||||||||||||||||||||||||||||||||||||,bla ||||||,bla |||||||||||||||||,bla ||||||||||||||||||||||||||||||||,bla

      Da ist noch nichtmal nen System erkennbar warum das so sein könnte. Ich bin jetzt echt mit meinem Latein am Ende. Ich hoffe ihr wisst was da sein könnte.

      Danke im voraus.

      1. Hi,

        link würde ich dir gerne geben, aber anscheindend wurde das Teil gelöscht, vllt. wegen meines Doppelposts gestern.

        Wenn du mit den Nicknames etwas sorgfältiger umgehst, dann fällt dir vielleicht auch die Suche nach deinen Threads mittels [strg]+[f] auf der Forums-Hauptseite etwas leichter ...

        (PROGRAMMIERTECHNIK) In TCL String parsen und nur Teile des Strings ausgeben von Airwolf89, 18.08.2009, 17:18

        MfG ChrisB

        --
        Light travels faster than sound - that's why most people appear bright until you hear them speak.