Sponsored Content
Full Discussion: Recursive Lists in Tcl
Top Forums Shell Programming and Scripting Recursive Lists in Tcl Post 302530009 by sarbjit on Monday 13th of June 2011 12:17:51 AM
Old 06-13-2011
Some thing like this will work as long as nested lists have more than one members.

Code:
set a {a b {c {d e}}}
proc list_eval {list_name {prefix {}}} {
set end_point [expr [llength $list_name] -1]
    for {set start_point 0} {$start_point <= $end_point} {incr start_point} {
        if {[llength [lindex $list_name $start_point]] == 1} {
            puts "Index for [lindex $list_name $start_point] is $prefix$start_point"
        } else {
            append prefix $start_point
            list_eval [lindex $list_name $start_point] $prefix
        }        
}    
}    
list_eval $a

Output will be :
Index for a is 0
Index for b is 1
Index for c is 20
Index for d is 210
Index for e is 211

---------- Post updated 06-13-11 at 09:47 AM ---------- Previous update was 06-12-11 at 04:11 PM ----------

My pvs posted code was not correct, it will not work if last members of a main list is not a part of nested list. You can use modified code.

Code:
set a {a b {c {d e} h} i}
set glob_var {}
proc list_eval {list_name {prefix {}}} {
    global glob_var
set end_point [expr [llength $list_name] -1]
    for {set start_point 0} {$start_point <= $end_point} {incr start_point} {
        if {[llength [lindex $list_name $start_point]] == 1} {
            puts "Index for [lindex $list_name $start_point] is $prefix$start_point"
           if {$start_point == $end_point} {
           set glob_var [string range $glob_var 0 end-1]
            }
        } else {
            append glob_var $start_point
            list_eval [lindex $list_name $start_point] $glob_var
       }        
}    
}    
list_eval $a

Output:
Index for a is 0
Index for b is 1
Index for c is 20
Index for d is 210
Index for e is 211
Index for h is 22
Index for i is 3
This User Gave Thanks to sarbjit For This Post:
 

10 More Discussions You Might Find Interesting

1. Programming

C++ programming using lists

To test this program it must create 2 integer lists - list1, list2 - and then read and process a series of list commands from a file named "data.txt". Each command and any associated values, list number, value appears on a separate line. All I can do is get it to input the integers and then... (3 Replies)
Discussion started by: tiger13e
3 Replies

2. Shell Programming and Scripting

How to get the files lists

Hi All, Need the help in getting the file list which are generated for the time period. example if i want to get the list of file generated between 11 to 12 clock. i used the find command search the files with -cmin flag with -60. find /home/test/* -cmin -60 -type f -exec ls {} \; ... (2 Replies)
Discussion started by: nmadhuhb
2 Replies

3. Shell Programming and Scripting

Shell Script to Create non-duplicate lists from two lists

File_A contains Strings: a b c d File_B contains Strings: a c z Need to have script written in either sh or ksh. Derive resultant files (File_New_A and File_New_B) from lists File_A and File_B where string elements in File_New_A and File_New_B are listed below. Resultant... (7 Replies)
Discussion started by: mlv_99
7 Replies

4. Shell Programming and Scripting

Using foreach with two lists

Hi everybody, I'm trying to use a foreach command with two lists. The file.txt looks like this: var1: 100 200 300 var2: 3 6 9 I'm trying to use a foreach command to associate the two variables together. My script looks like this: #! /bin/tcsh set a=(`cat file.txt | grep 'var1' | cut -d... (8 Replies)
Discussion started by: SimonWhite
8 Replies

5. Shell Programming and Scripting

combining two lists

Hi, So I I received two lists for my merchandise and both are similar but differences do occur. I want to combine two lists that have similar names but I dont want the similar name to come up twice because I will end up purchasing two of those items. Heres an example below (file is massive). ... (1 Reply)
Discussion started by: kylle345
1 Replies

6. Shell Programming and Scripting

get the lists

I expert, I may cross post something similar but I dirtyed my quesion somehow to be clear in the thread #cat file1 88dee gcc: Grok for callconvention-hard to enable hard float a2ad2 eglibc: package mtrace separately 61487 python: bump PR of packages after update of distutils.bbclass... (1 Reply)
Discussion started by: yanglei_fage
1 Replies

7. Shell Programming and Scripting

Listing cross cases within lists in TCL

Hello everyone, I am new here forgive me if I omit something, I have a problem which I can't seem to solve using TCL so I am posting it here. Here it is : I retrieve a UNKNOWN number of lists from an XML file. Let's skip the part where I retrieve these lists and say for example that you have... (4 Replies)
Discussion started by: Noobard
4 Replies

8. UNIX for Dummies Questions & Answers

Lists in awk

Hi togehter! I would like to write an awk script which prints the first column divided by the sum of the second column: So if this is my list 1 2 2 1 3 1 4 1 it should print a list like this: 1/5 2/5 3/5 4/5 My idea was to use END like this: (3 Replies)
Discussion started by: bjoern456
3 Replies

9. Shell Programming and Scripting

Issue with Lists

Hey guys, so I wrote this simple script. The first time I typed it all out, I had the issue where whatever choice I entered, it would simply tell me it was a "bad selection" aka the else output. I redid everything, and now no matter the choice, it does the backup option.. My brain hurts, and... (12 Replies)
Discussion started by: jakelawson44
12 Replies

10. Shell Programming and Scripting

Combining lists

Hello everybody. My operating system is Fedora30, shell - bash I faced combining lists. I will be glad for help regarding strings, arrays and so on. The bottom line is as follows. It is necessary to combine each element from the first list with elements from the second. if the second is longer... (4 Replies)
Discussion started by: nezabudka
4 Replies
lindex(n)						       Tcl Built-In Commands							 lindex(n)

__________________________________________________________________________________________________________________________________________________

NAME
lindex - Retrieve an element from a list SYNOPSIS
lindex list ?index...? _________________________________________________________________ DESCRIPTION
The lindex command accepts a parameter, list, which it treats as a Tcl list. It also accepts zero or more indices into the list. The indices may be presented either consecutively on the command line, or grouped in a Tcl list and presented as a single argument. If no indices are presented, the command takes the form: lindex list or lindex list {} In this case, the return value of lindex is simply the value of the list parameter. When presented with a single index, the lindex command treats list as a Tcl list and returns the index'th element from it (0 refers to the first element of the list). In extracting the element, lindex observes the same rules concerning braces and quotes and backslashes as the Tcl command interpreter; however, variable substitution and command substitution do not occur. If index is negative or greater than or equal to the number of elements in value, then an empty string is returned. The interpretation of each simple index value is the same as | for the command string index, supporting simple index arithmetic and indices relative to the end of the list. If additional index arguments are supplied, then each argument is used in turn to select an element from the previous indexing operation, allowing the script to select elements from sublists. The command, lindex $a 1 2 3 or lindex $a {1 2 3} is synonymous with lindex [lindex [lindex $a 1] 2] 3 EXAMPLES
lindex {a b c} -> a b c lindex {a b c} {} -> a b c lindex {a b c} 0 -> a lindex {a b c} 2 -> c lindex {a b c} end -> c lindex {a b c} end-1 -> b lindex {{a b c} {d e f} {g h i}} 2 1 -> h lindex {{a b c} {d e f} {g h i}} {2 1} -> h lindex {{{a b} {c d}} {{e f} {g h}}} 1 1 0 -> g lindex {{{a b} {c d}} {{e f} {g h}}} {1 1 0} -> g SEE ALSO
list(n), lappend(n), linsert(n), llength(n), lsearch(n), lset(n), lsort(n), lrange(n), lreplace(n), string(n) | KEYWORDS
element, index, list Tcl 8.4 lindex(n)
All times are GMT -4. The time now is 09:35 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy