owh - an example

An example for owh - a fileless tclsh
5/17/2021 - JM - I have this very specific format of an (CSV) input file named grades.csv:

 +---------+-------+---------------+---------------+---------------+---------------+
 | Name    | Group | Math          | Science       | Biology       | Chemistry     |
 +---------+-------+---------------+---------------+---------------+---------------+
 | James   | A     | 55.56%(10/18) | 74.23%(72/97) | 89.47%(34/38) | 96.08%(49/51) |
 +---------+-------+---------------+---------------+---------------+---------------+
 | Robert  | A     | 89.47%(34/38) | 64.0%(16/25)  | 89.47%(34/38) | 89.47%(34/38) |
 +---------+-------+---------------+---------------+---------------+---------------+
 | John    | A     | 85.45%(47/55) | 64.86%(24/37) | 85.45%(47/55) | 89.47%(34/38) |
 +---------+-------+---------------+---------------+---------------+---------------+
 | Michael | A     | 56.52%(13/23) | 67.74%(21/31) | 56.52%(13/23) | 85.45%(47/55) |
 +---------+-------+---------------+---------------+---------------+---------------+
 | William | A     | 92.86%(13/14) | 71.43%(15/21) | 92.86%(13/14) | 56.52%(13/23) |
 +---------+-------+---------------+---------------+---------------+---------------+
 | David   | A     | 55.56%(10/18) | 69.23%(9/13)  | 55.56%(10/18) | 92.86%(13/14) |
 +---------+-------+---------------+---------------+---------------+---------------+
 | Richard | A     | 85.45%(47/55) | 64.86%(24/37) | 96.08%(49/51) | 55.56%(10/18) |
 +---------+-------+---------------+---------------+---------------+---------------+
 | Joseph  | A     | 56.52%(13/23) | 67.74%(21/31) | 89.47%(34/38) | 85.45%(47/55) |
 +---------+-------+---------------+---------------+---------------+---------------+
 | Thomas  | A     | 92.86%(13/14) | 71.43%(15/21) | 89.47%(34/38) | 56.52%(13/23) |
 +---------+-------+---------------+---------------+---------------+---------------+

But I need this other format instead:

 +---------+---+-----------+--------+----+----+
 | James   | A | Math      | 55.56% | 10 | 18 |
 +---------+---+-----------+--------+----+----+
 | James   | A | Science   | 74.23% | 72 | 97 |
 +---------+---+-----------+--------+----+----+
 | James   | A | Biology   | 89.47% | 34 | 38 |
 +---------+---+-----------+--------+----+----+
 | James   | A | Chemistry | 96.08% | 49 | 51 |
 +---------+---+-----------+--------+----+----+
 | Robert  | A | Math      | 89.47% | 34 | 38 |
 +---------+---+-----------+--------+----+----+
 | Robert  | A | Science   | 64.00% | 16 | 25 |
 +---------+---+-----------+--------+----+----+
 | Robert  | A | Biology   | 89.47% | 34 | 38 |
 +---------+---+-----------+--------+----+----+
 | Robert  | A | Chemistry | 89.47% | 34 | 38 |
 +---------+---+-----------+--------+----+----+
 | John    | A | Math      | 85.45% | 47 | 55 |
 +---------+---+-----------+--------+----+----+
 | John    | A | Science   | 64.86% | 24 | 37 |
 +---------+---+-----------+--------+----+----+
 | John    | A | Biology   | 85.45% | 47 | 55 |
 +---------+---+-----------+--------+----+----+
 | John    | A | Chemistry | 89.47% | 34 | 38 |
 +---------+---+-----------+--------+----+----+
 | Michael | A | Math      | 56.52% | 13 | 23 |
 +---------+---+-----------+--------+----+----+
 | Michael | A | Science   | 67.74% | 21 | 31 |
 +---------+---+-----------+--------+----+----+
 | Michael | A | Biology   | 56.52% | 13 | 23 |
 +---------+---+-----------+--------+----+----+
 | Michael | A | Chemistry | 85.45% | 47 | 55 |
 +---------+---+-----------+--------+----+----+
 | Willian | A | Math      | 92.86% | 13 | 14 |
 +---------+---+-----------+--------+----+----+
 | Willian | A | Science   | 71.43% | 15 | 21 |
 +---------+---+-----------+--------+----+----+
 | Willian | A | Biology   | 92.86% | 13 | 14 |
 +---------+---+-----------+--------+----+----+
 | Willian | A | Chemistry | 56.52% | 13 | 23 |
 +---------+---+-----------+--------+----+----+
 | David   | A | Math      | 55.56% | 10 | 18 |
 +---------+---+-----------+--------+----+----+
 | David   | A | Science   | 69.23% | 9  | 13 |
 +---------+---+-----------+--------+----+----+
 | David   | A | Biology   | 55.56% | 10 | 18 |
 +---------+---+-----------+--------+----+----+
 | David   | A | Chemistry | 92.86% | 13 | 14 |
 +---------+---+-----------+--------+----+----+
 | Richard | A | Math      | 85.45% | 47 | 55 |
 +---------+---+-----------+--------+----+----+
 | Richard | A | Science   | 64.86% | 24 | 37 |
 +---------+---+-----------+--------+----+----+
 | Richard | A | Biology   | 96.08% | 49 | 51 |
 +---------+---+-----------+--------+----+----+
 | Richard | A | Chemistry | 55.56% | 10 | 18 |
 +---------+---+-----------+--------+----+----+
 | Joseph  | A | Math      | 56.52% | 13 | 23 |
 +---------+---+-----------+--------+----+----+
 | Joseph  | A | Science   | 67.74% | 21 | 31 |
 +---------+---+-----------+--------+----+----+
 | Joseph  | A | Biology   | 89.47% | 34 | 38 |
 +---------+---+-----------+--------+----+----+
 | Joseph  | A | Chemistry | 85.45% | 47 | 55 |
 +---------+---+-----------+--------+----+----+
 | Thomas  | A | Math      | 92.86% | 13 | 14 |
 +---------+---+-----------+--------+----+----+
 | Thomas  | A | Science   | 71.43% | 15 | 21 |
 +---------+---+-----------+--------+----+----+
 | Thomas  | A | Biology   | 89.47% | 34 | 38 |
 +---------+---+-----------+--------+----+----+
 | Thomas  | A | Chemistry | 56.52% | 13 | 23 |
 +---------+---+-----------+--------+----+----+

Then I can use the following owh code (filename cmds.tcl):

 if {$NR == 1} {
        for {set f 1} {$f <= $NF} {incr f} {
         set a($f) [set $f] }
 }
 if {$NR>1} {
        for {set f 3} {$f <= $NF} {incr f 1} {
                if {[string match *%* [set $f]]} {
                        set valor [string map {( ,} [set $f]]
                        set valor [string map {) ,} $valor]
                        set valor [string map {/ ,} $valor]
                        set valor1 $valor
                        puts $1,$2,$a($f),$valor1
                }
        }
 }

launched as follows:

 tclsh owh.tcl "set FS ," "source cmds.tcl" "" <grades.csv