/usr/share/saods9/src/cattsv.tcl is in saods9-data 7.2+dfsg-4.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 | # Copyright (C) 1999-2012
# Smithsonian Astrophysical Observatory, Cambridge, MA, USA
# For conditions of distribution and use, see copyright notice in "copyright"
package provide DS9 1.0
proc CATTSVRead {t fn} {
upvar #0 $t T
global $t
global debug
if {$debug(tcl,cat)} {
puts stderr "CATTSVRead"
}
if {$fn == {}} {
return
}
catch {
set fp [open $fn r]
# init db
set T(Nrows) 0
set T(Ncols) 0
set T(Header) {}
set T(HLines) 0
# ok, get first non comment line
while (true) {
if {[gets $fp line] == -1} {
return
}
# skip any comments
if {[string range $line 0 0] != "#"} {
break;
}
}
# reduce number of spaces
regsub -all { +} $line { } line
# strip any quotes
regsub -all {\"} $line {} line
# determine separator
if {[llength [split $line "\t"]] > 1} {
set ss "\t"
} elseif {[llength [split $line ","]] > 1} {
set ss ","
} elseif {[llength [split $line ":"]] > 1} {
set ss ":"
} else {
set ss " "
}
# determine header
set first {}
set foo [split $line $ss]
if {([string is integer [lindex $foo 0]] || [string is double [lindex $foo 0]]) && ([string is integer [lindex $foo 1]] || [string is double [lindex $foo 1]])} {
# determine num cols
set cnt [llength $foo]
# we need to build an header
set first $line
set line "X${ss}Y"
for {set ii 2} {$ii<$cnt} {incr ii} {
append line "${ss}column[expr $ii+3]"
}
}
# process header
# cols
incr ${t}(HLines)
set n $T(HLines)
set T(H_$n) $line
set T(Header) [split $T(H_$n) $ss]
# dashes
set T(Dashes) [regsub -all {[A-Za-z0-9]} $T(H_$n) {-}]
set T(Ndshs) [llength $T(Dashes)]
starbase_colmap $t
# process table
if {$first == {}} {
gets $fp line
} else {
set line $first
}
while {![eof $fp]} {
# skip any comments
if {[string range $line 0 0] == "#"} {
set line {}
}
# reduce number of spaces
regsub -all { +} $line { } line
set line [string trim $line]
# do we have something?
if {$line != {}} {
# ok, save it
incr ${t}(Nrows)
set r $T(Nrows)
set NCols [starbase_ncols $t]
set c 1
foreach val [split $line $ss] {
set T($r,$c) $val
incr c
}
for {} {$c <= $NCols} {incr c} {
set T($r,$c) {}
}
}
gets $fp line
}
close $fp
}
}
proc CATTSVWrite {t fn} {
upvar #0 $t T
global $t
global debug
if {$debug(tcl,cat)} {
puts stderr "CATTSVWrite"
}
if {$fn == {}} {
return
}
set fp [open $fn w]
set nr $T(Nrows)
set nc $T(Ncols)
# header
for {set cc 1} {$cc < $nc} {incr cc} {
puts -nonewline $fp "[lindex $T(Header) [expr $cc-1]]\t"
}
puts $fp "[lindex $T(Header) [expr $nc-1]]"
# data
for {set rr 1} {$rr <= $nr} {incr rr} {
for {set cc 1} {$cc < $nc} {incr cc} {
puts -nonewline $fp "$T($rr,$cc)\t"
}
puts $fp "$T($rr,$nc)"
}
close $fp
}
|