1. 程式人生 > >初識Tcl(七):Tcl 字串

初識Tcl(七):Tcl 字串

Tcl 的原始資料型別是字串,我們常常可以在Tcl找到引用字串的唯一語言。這些字串可以包含字母數字字元,數字,布林值,甚至是二進位制資料。 TCL採用16位Unicode字元和字母數字字元,可以包含字母包括非拉丁字元,數字或標點符號。

布林值,可以表示為1,yes 或 true 為真值和0,no 或 false 為假值。

字串表示

不同於其他語言,在TCL,只有一個字時,不需要包含雙引號。示例如下,

#!/usr/bin/tclsh

set myVariable hello
puts $myVariable

當上述程式碼被執行時,它會產生以下結果。

hello

當要表示多個字串,我們可以使用雙引號或大括號。它如下所示。

#!/usr/bin/tclsh

set myVariable "hello world"
puts $myVariable
set myVariable {hello world}
puts $myVariable

當上述程式碼被執行時,它會產生以下結果。

hello world
hello world

字串轉義序列

字元文字可以是一個普通的字元(例如,'x'),轉義序列(如“\t'),或通用字元(例如,'\u02C0')。

Tcl有一些字元,當他們前面加一個反斜槓他們將有特殊的含義,它們被用來表示類似的換行符(\n)或製表符(\t)。在這裡,有一些轉義序列程式碼的列表:

轉義序列 意思
\\ \ 字元
\' ' 字元
\" " 字元
\? ? 字元
\a 警報或鈴
\b 退格
\f 換頁
\n 新一行
\r 回車
\t 水平製表
\v 垂直製表

以下為例子來說明一些轉義字元序列:

#!/usr/bin/tclsh

puts("Hello\tWorld\n\n");

讓我們編譯和執行上面的程式,這將產生以下結果:

Hello   World

字串命令

子命令字串命令列表列如下表。

SN 方法及描述
1

compare string1 string2

比較字string1和string2字典順序。如果相等返回0,如果string1在string2出現之前返回-1,否則返回1。

2

first string1 string2

返回string1中第一次出現string1索引的位置。如果沒有找到,返回-1。

3

index string index

返回索引的字元。

4

last string1 string2

返回索引string1在string2中出現的最後一次。如果沒有找到,返回-1。

5

length string

返回字串的長度。

6

match pattern string

返回1,如果該字串匹配模式。

7

range string index1 index2

返回指定索引範圍內的字串,index1到index2。

8

tolower string

返回小寫字串。

9

toupper string

返回大寫字串。

10

trim string ?trimcharacters?

刪除字串兩端的trimcharacters。預設trimcharacters是空白。

11

trimleft string ?trimcharacters?

刪除字串左側開始的trimcharacters。預設trimcharacters是空白。

12

trimright string ?trimcharacters?

刪除字串右端的trimcharacters。預設trimcharacters是空白。

13

wordend findstring index

返回索引字元findstring包含字元索引單詞。

14

wordstart findstring index

返回findstring中第一個字元的含有索引中的字元索引的單詞。

一些常用的Tcl字串子命令的例子在下面給出。

字串比較

#!/usr/bin/tclsh

set s1 "Hello"
set s2 "World"
set s3 "World"
puts [string compare s1 s2]
if {[string compare s1 s2] == 0} {
puts "String \'s1\' and \'s2\' are same."; 
} 

if {[string compare s1 s2] == -1} {
puts "String \'s1\' comes before \'s2\'.";
}

if {[string compare s2 s1] == 1} {
puts "String \'s2\' comes before \'s1\'.";
}

讓我們編譯和執行上面的程式,這將產生以下結果:

-1
String 's1' comes before 's2'.
String 's2' comes before 's1'.

字串索引

#!/usr/bin/tclsh

set s1 "Hello World"
set s2 "o"
puts "First occurrence of $s2 in s1"
puts [string first $s2 $s1]                    # s1在s2中第一次出現的位置索引
puts "Character at index 0 in s1"
puts [string index $s1 0]                      # s1在索引值為0處的字元
puts "Last occurrence of $s2 in s1"
puts [string last $s2 $s1]                     # s1在s2中最後一次出現的位置索引

puts "Word end index in s1"
puts [string wordend $s1 20]                     # ???
puts "Word start index in s1"
puts [string wordstart $s1 20]                   # ???

讓我們編譯和執行上面的程式,這將產生以下結果:

First occurrence of o in s1
4
Character at index 0 in s1
H
Last occurrence of o in s1
7
Word end index in s1
11
Word start index in s1
6

字串長度

#!/usr/bin/tclsh

set s1 "Hello World"
puts "Length of string s1"
puts [string length $s1]

讓我們編譯和執行上面的程式,這將產生以下結果:

Length of string s1
11

處理大小寫

#!/usr/bin/tclsh

set s1 "Hello World"
puts "Uppercase string of s1"
puts [string toupper $s1]
puts "Lowercase string of s1"
puts [string tolower $s1]

讓我們編譯和執行上面的程式,這將產生以下結果:

Uppercase string of s1
HELLO WORLD
Lowercase string of s1
hello world

修整字元

#!/usr/bin/tclsh

set s1 "Hello World"
set s2 "World"
puts "Trim right $s2 in $s1"
puts [string trimright $s1 $s2]

set s2 "Hello"
puts "Trim left $s2 in $s1"
puts [string trimleft $s1 $s2]

set s1 " Hello World "
set s2 " "
puts "Trim characters s1 on both sides of s2"
puts [string trim $s1 $s2]

讓我們編譯和執行上面的程式,這將產生以下結果:

Trim right World in Hello World
Hello 
Trim left Hello in Hello World
 World
Trim characters s1 on both sides of s2
Hello World

匹配字串

#!/usr/bin/tclsh

set s1 "[email protected]" 
set s2 "*@*.com"
puts "Matching pattern s2 in s1"
puts [string match "*@*.com" $s1 ]
puts "Matching pattern tcl in s1"
puts [string match {tcl} $s1]

讓我們編譯和執行上面的程式,這將產生以下結果:

Matching pattern s2 in s1
1
Matching pattern tcl in s1
0

Append 命令

#!/usr/bin/tclsh

set s1 "Hello" 
append s1 " World"
puts $s1

讓我們編譯和執行上面的程式,這將產生以下結果:

Hello World

Format 命令

Tcl顯示格式format說明如下列表。

指示符 使用
%s 字串表示
%d 整數表示
%f 浮點表示
%e 指數形式浮點表示
%x 十六進位制表示

一些簡單下面的例子給出。

#!/usr/bin/tclsh

puts [format "%f" 43.5]
puts [format "%e" 43.5]
puts [format "%d %s" 4 tuts]
puts [format "%s" "Tcl Language"]
puts [format "%x" 40]

讓我們編譯和執行上面的程式,這將產生以下結果:

43.500000
4.350000e+01
4 tuts
Tcl Language
28

Scan命令

scan命令用於分析基於對格式說明的字串。一些例子如下所示。

#!/usr/bin/tclsh

puts [scan "90" {%[0-9]} m]
puts [scan "abc" {%[a-z]} m]
puts [scan "abc" {%[A-Z]} m]
puts [scan "ABC" {%[A-Z]} m]

當上述程式碼被編譯和執行時,它產生了以下結果:

1
1
0
1