string class

Tom Krehbiel:

string is ... provides a list of class types but doesn't indicate how a particular character is classified.

The following code produces a classification table for the characters in the range 0-127. Example output is also provided.

Implementation

set classes {
    alnum alpha ascii boolean control digit double false graph integer lower
    print punct space true upper wordchar xdigit
}


proc classHeader {} {
    global classes
    puts {} 
    set i 1
    foreach class $classes {
        puts [format {  %2s - %s} $i $class]
        incr i
    }
    puts {}
    puts -nonewline {     }
    set i 1
    foreach class $classes {
        puts -nonewline [format { %2s} $i]
        incr i
    }
    puts {}
}


proc reportClass c {
    global classes
    set result {}
    foreach class $classes {
        if {[string is $class $c] eq 1} { 
            append result {  Y}
        } else {
            append result {  N}
        }
    }
    return $result
}


proc main {} {
    classHeader
    for {set n 0} {$n < 128} {incr n} {
        set c [format %c $n]
        if {[string is print $c]} {
            puts [format {%02X %1s %s} $n $c [reportClass $c]]
        } else {
            puts [format {%02X   %s} $n [reportClass $c]]
        }
    }
}
main

Sample Output

   1 - alnum
   2 - alpha
   3 - ascii
   4 - boolean
   5 - control
   6 - digit
   7 - double
   8 - false
   9 - graph
  10 - integer
  11 - lower
  12 - print
  13 - punct
  14 - space
  15 - true
  16 - upper
  17 - wordchar
  18 - xdigit

       1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18
00     N  N  N  N  Y  N  N  N  N  N  N  N  N  N  N  N  N  N
01     N  N  Y  N  Y  N  N  N  N  N  N  N  N  N  N  N  N  N
02     N  N  Y  N  Y  N  N  N  N  N  N  N  N  N  N  N  N  N
03     N  N  Y  N  Y  N  N  N  N  N  N  N  N  N  N  N  N  N
04     N  N  Y  N  Y  N  N  N  N  N  N  N  N  N  N  N  N  N
05     N  N  Y  N  Y  N  N  N  N  N  N  N  N  N  N  N  N  N
06     N  N  Y  N  Y  N  N  N  N  N  N  N  N  N  N  N  N  N
07     N  N  Y  N  Y  N  N  N  N  N  N  N  N  N  N  N  N  N
08     N  N  Y  N  Y  N  N  N  N  N  N  N  N  N  N  N  N  N
09     N  N  Y  N  Y  N  N  N  N  N  N  N  N  Y  N  N  N  N
0A     N  N  Y  N  Y  N  N  N  N  N  N  N  N  Y  N  N  N  N
0B     N  N  Y  N  Y  N  N  N  N  N  N  N  N  Y  N  N  N  N
0C     N  N  Y  N  Y  N  N  N  N  N  N  N  N  Y  N  N  N  N
0D     N  N  Y  N  Y  N  N  N  N  N  N  N  N  Y  N  N  N  N
0E     N  N  Y  N  Y  N  N  N  N  N  N  N  N  N  N  N  N  N
0F     N  N  Y  N  Y  N  N  N  N  N  N  N  N  N  N  N  N  N
10     N  N  Y  N  Y  N  N  N  N  N  N  N  N  N  N  N  N  N
11     N  N  Y  N  Y  N  N  N  N  N  N  N  N  N  N  N  N  N
12     N  N  Y  N  Y  N  N  N  N  N  N  N  N  N  N  N  N  N
13     N  N  Y  N  Y  N  N  N  N  N  N  N  N  N  N  N  N  N
14     N  N  Y  N  Y  N  N  N  N  N  N  N  N  N  N  N  N  N
15     N  N  Y  N  Y  N  N  N  N  N  N  N  N  N  N  N  N  N
16     N  N  Y  N  Y  N  N  N  N  N  N  N  N  N  N  N  N  N
17     N  N  Y  N  Y  N  N  N  N  N  N  N  N  N  N  N  N  N
18     N  N  Y  N  Y  N  N  N  N  N  N  N  N  N  N  N  N  N
19     N  N  Y  N  Y  N  N  N  N  N  N  N  N  N  N  N  N  N
1A     N  N  Y  N  Y  N  N  N  N  N  N  N  N  N  N  N  N  N
1B     N  N  Y  N  Y  N  N  N  N  N  N  N  N  N  N  N  N  N
1C     N  N  Y  N  Y  N  N  N  N  N  N  N  N  N  N  N  N  N
1D     N  N  Y  N  Y  N  N  N  N  N  N  N  N  N  N  N  N  N
1E     N  N  Y  N  Y  N  N  N  N  N  N  N  N  N  N  N  N  N
1F     N  N  Y  N  Y  N  N  N  N  N  N  N  N  N  N  N  N  N
20     N  N  Y  N  N  N  N  N  N  N  N  Y  N  Y  N  N  N  N
21 !   N  N  Y  N  N  N  N  N  Y  N  N  Y  Y  N  N  N  N  N
22 "   N  N  Y  N  N  N  N  N  Y  N  N  Y  Y  N  N  N  N  N
23 #   N  N  Y  N  N  N  N  N  Y  N  N  Y  Y  N  N  N  N  N
24 $   N  N  Y  N  N  N  N  N  Y  N  N  Y  N  N  N  N  N  N
25 %   N  N  Y  N  N  N  N  N  Y  N  N  Y  Y  N  N  N  N  N
26 &   N  N  Y  N  N  N  N  N  Y  N  N  Y  Y  N  N  N  N  N
27 '   N  N  Y  N  N  N  N  N  Y  N  N  Y  Y  N  N  N  N  N
28 (   N  N  Y  N  N  N  N  N  Y  N  N  Y  Y  N  N  N  N  N
29 )   N  N  Y  N  N  N  N  N  Y  N  N  Y  Y  N  N  N  N  N
2A *   N  N  Y  N  N  N  N  N  Y  N  N  Y  Y  N  N  N  N  N
2B +   N  N  Y  N  N  N  N  N  Y  N  N  Y  N  N  N  N  N  N
2C ,   N  N  Y  N  N  N  N  N  Y  N  N  Y  Y  N  N  N  N  N
2D -   N  N  Y  N  N  N  N  N  Y  N  N  Y  Y  N  N  N  N  N
2E .   N  N  Y  N  N  N  N  N  Y  N  N  Y  Y  N  N  N  N  N
2F /   N  N  Y  N  N  N  N  N  Y  N  N  Y  Y  N  N  N  N  N
30 0   Y  N  Y  Y  N  Y  Y  Y  Y  Y  N  Y  N  N  N  N  Y  Y
31 1   Y  N  Y  Y  N  Y  Y  N  Y  Y  N  Y  N  N  Y  N  Y  Y
32 2   Y  N  Y  N  N  Y  Y  N  Y  Y  N  Y  N  N  N  N  Y  Y
33 3   Y  N  Y  N  N  Y  Y  N  Y  Y  N  Y  N  N  N  N  Y  Y
34 4   Y  N  Y  N  N  Y  Y  N  Y  Y  N  Y  N  N  N  N  Y  Y
35 5   Y  N  Y  N  N  Y  Y  N  Y  Y  N  Y  N  N  N  N  Y  Y
36 6   Y  N  Y  N  N  Y  Y  N  Y  Y  N  Y  N  N  N  N  Y  Y
37 7   Y  N  Y  N  N  Y  Y  N  Y  Y  N  Y  N  N  N  N  Y  Y
38 8   Y  N  Y  N  N  Y  Y  N  Y  Y  N  Y  N  N  N  N  Y  Y
39 9   Y  N  Y  N  N  Y  Y  N  Y  Y  N  Y  N  N  N  N  Y  Y
3A :   N  N  Y  N  N  N  N  N  Y  N  N  Y  Y  N  N  N  N  N
3B ;   N  N  Y  N  N  N  N  N  Y  N  N  Y  Y  N  N  N  N  N
3C <   N  N  Y  N  N  N  N  N  Y  N  N  Y  N  N  N  N  N  N
3D =   N  N  Y  N  N  N  N  N  Y  N  N  Y  N  N  N  N  N  N
3E >   N  N  Y  N  N  N  N  N  Y  N  N  Y  N  N  N  N  N  N
3F ?   N  N  Y  N  N  N  N  N  Y  N  N  Y  Y  N  N  N  N  N
40 @   N  N  Y  N  N  N  N  N  Y  N  N  Y  Y  N  N  N  N  N
41 A   Y  Y  Y  N  N  N  N  N  Y  N  N  Y  N  N  N  Y  Y  Y
42 B   Y  Y  Y  N  N  N  N  N  Y  N  N  Y  N  N  N  Y  Y  Y
43 C   Y  Y  Y  N  N  N  N  N  Y  N  N  Y  N  N  N  Y  Y  Y
44 D   Y  Y  Y  N  N  N  N  N  Y  N  N  Y  N  N  N  Y  Y  Y
45 E   Y  Y  Y  N  N  N  N  N  Y  N  N  Y  N  N  N  Y  Y  Y
46 F   Y  Y  Y  Y  N  N  N  Y  Y  N  N  Y  N  N  N  Y  Y  Y
47 G   Y  Y  Y  N  N  N  N  N  Y  N  N  Y  N  N  N  Y  Y  N
48 H   Y  Y  Y  N  N  N  N  N  Y  N  N  Y  N  N  N  Y  Y  N
49 I   Y  Y  Y  N  N  N  N  N  Y  N  N  Y  N  N  N  Y  Y  N
4A J   Y  Y  Y  N  N  N  N  N  Y  N  N  Y  N  N  N  Y  Y  N
4B K   Y  Y  Y  N  N  N  N  N  Y  N  N  Y  N  N  N  Y  Y  N
4C L   Y  Y  Y  N  N  N  N  N  Y  N  N  Y  N  N  N  Y  Y  N
4D M   Y  Y  Y  N  N  N  N  N  Y  N  N  Y  N  N  N  Y  Y  N
4E N   Y  Y  Y  Y  N  N  N  Y  Y  N  N  Y  N  N  N  Y  Y  N
4F O   Y  Y  Y  N  N  N  N  N  Y  N  N  Y  N  N  N  Y  Y  N
50 P   Y  Y  Y  N  N  N  N  N  Y  N  N  Y  N  N  N  Y  Y  N
51 Q   Y  Y  Y  N  N  N  N  N  Y  N  N  Y  N  N  N  Y  Y  N
52 R   Y  Y  Y  N  N  N  N  N  Y  N  N  Y  N  N  N  Y  Y  N
53 S   Y  Y  Y  N  N  N  N  N  Y  N  N  Y  N  N  N  Y  Y  N
54 T   Y  Y  Y  Y  N  N  N  N  Y  N  N  Y  N  N  Y  Y  Y  N
55 U   Y  Y  Y  N  N  N  N  N  Y  N  N  Y  N  N  N  Y  Y  N
56 V   Y  Y  Y  N  N  N  N  N  Y  N  N  Y  N  N  N  Y  Y  N
57 W   Y  Y  Y  N  N  N  N  N  Y  N  N  Y  N  N  N  Y  Y  N
58 X   Y  Y  Y  N  N  N  N  N  Y  N  N  Y  N  N  N  Y  Y  N
59 Y   Y  Y  Y  Y  N  N  N  N  Y  N  N  Y  N  N  Y  Y  Y  N
5A Z   Y  Y  Y  N  N  N  N  N  Y  N  N  Y  N  N  N  Y  Y  N
5B [   N  N  Y  N  N  N  N  N  Y  N  N  Y  Y  N  N  N  N  N
5C \   N  N  Y  N  N  N  N  N  Y  N  N  Y  Y  N  N  N  N  N
5D ]   N  N  Y  N  N  N  N  N  Y  N  N  Y  Y  N  N  N  N  N
5E ^   N  N  Y  N  N  N  N  N  Y  N  N  Y  N  N  N  N  N  N
5F _   N  N  Y  N  N  N  N  N  Y  N  N  Y  Y  N  N  N  Y  N
60 `   N  N  Y  N  N  N  N  N  Y  N  N  Y  N  N  N  N  N  N
61 a   Y  Y  Y  N  N  N  N  N  Y  N  Y  Y  N  N  N  N  Y  Y
62 b   Y  Y  Y  N  N  N  N  N  Y  N  Y  Y  N  N  N  N  Y  Y
63 c   Y  Y  Y  N  N  N  N  N  Y  N  Y  Y  N  N  N  N  Y  Y
64 d   Y  Y  Y  N  N  N  N  N  Y  N  Y  Y  N  N  N  N  Y  Y
65 e   Y  Y  Y  N  N  N  N  N  Y  N  Y  Y  N  N  N  N  Y  Y
66 f   Y  Y  Y  Y  N  N  N  Y  Y  N  Y  Y  N  N  N  N  Y  Y
67 g   Y  Y  Y  N  N  N  N  N  Y  N  Y  Y  N  N  N  N  Y  N
68 h   Y  Y  Y  N  N  N  N  N  Y  N  Y  Y  N  N  N  N  Y  N
69 i   Y  Y  Y  N  N  N  N  N  Y  N  Y  Y  N  N  N  N  Y  N
6A j   Y  Y  Y  N  N  N  N  N  Y  N  Y  Y  N  N  N  N  Y  N
6B k   Y  Y  Y  N  N  N  N  N  Y  N  Y  Y  N  N  N  N  Y  N
6C l   Y  Y  Y  N  N  N  N  N  Y  N  Y  Y  N  N  N  N  Y  N
6D m   Y  Y  Y  N  N  N  N  N  Y  N  Y  Y  N  N  N  N  Y  N
6E n   Y  Y  Y  Y  N  N  N  Y  Y  N  Y  Y  N  N  N  N  Y  N
6F o   Y  Y  Y  N  N  N  N  N  Y  N  Y  Y  N  N  N  N  Y  N
70 p   Y  Y  Y  N  N  N  N  N  Y  N  Y  Y  N  N  N  N  Y  N
71 q   Y  Y  Y  N  N  N  N  N  Y  N  Y  Y  N  N  N  N  Y  N
72 r   Y  Y  Y  N  N  N  N  N  Y  N  Y  Y  N  N  N  N  Y  N
73 s   Y  Y  Y  N  N  N  N  N  Y  N  Y  Y  N  N  N  N  Y  N
74 t   Y  Y  Y  Y  N  N  N  N  Y  N  Y  Y  N  N  Y  N  Y  N
75 u   Y  Y  Y  N  N  N  N  N  Y  N  Y  Y  N  N  N  N  Y  N
76 v   Y  Y  Y  N  N  N  N  N  Y  N  Y  Y  N  N  N  N  Y  N
77 w   Y  Y  Y  N  N  N  N  N  Y  N  Y  Y  N  N  N  N  Y  N
78 x   Y  Y  Y  N  N  N  N  N  Y  N  Y  Y  N  N  N  N  Y  N
79 y   Y  Y  Y  Y  N  N  N  N  Y  N  Y  Y  N  N  Y  N  Y  N
7A z   Y  Y  Y  N  N  N  N  N  Y  N  Y  Y  N  N  N  N  Y  N
7B {   N  N  Y  N  N  N  N  N  Y  N  N  Y  Y  N  N  N  N  N
7C |   N  N  Y  N  N  N  N  N  Y  N  N  Y  N  N  N  N  N  N
7D }   N  N  Y  N  N  N  N  N  Y  N  N  Y  Y  N  N  N  N  N
7E ~   N  N  Y  N  N  N  N  N  Y  N  N  Y  N  N  N  N  N  N
7F     N  N  Y  N  Y  N  N  N  N  N  N  N  N  N  N  N  N  N