まず、スクリプト、コマンドワードシンボル
TCLスクリプトは、1つ以上のコマンドを含めることができます。これは、コマンド間の改行またはセミコロンで区切る必要があります。
1.キーワード/タグ
ベースプログラムの変数は
、変数名、変数の値:変数の
変数名の要件:任意の文字列は、変数名として使用することができ、大文字と小文字が区別
変数値要件:任意の文字列は、変数の値として使用することができます
⦁変数の割り当て基本的な構文:
SETのVARNAME値;
EG:
SET X-10;
SET文の"Hello、World"の
2、交換
コマンドの解析におけるTCLインタープリタ、全てのコマンドパラメータは、例えば、文字列とみなされます、
セット×10;#は、変数xを定義し、xが値10が割り当てられています
設定されたY、X + 100;#は、変数yを定義するには、yの値は、我々が期待するのではなく、X + 100、110であります
一の実施形態では、第2のコマンドでは、xをx + 100の文字列の一部とみなされ、我々はX「10」の値を使用する場合、インタプリタTCLを伝えることが必要である:ここでは、変数xの値と期待します代わりに、文字「X」の。TCL言語で提供さ置換機能を使用するか、それを伝えるためにどのようにTCLインタープリタ。
TCLは、交換の三つの形式提供しています変数置換、コマンド置換、およびバックスラッシュ置換を:。各変位は、それ自体が他の値に置き換えることが1つの以上の単一の原因となります。置換は、コマンド名を含め、すべての単語に発生する可能性があり、交換が入れ子にすることができます
X-10 SET
⦁可変容量
$記号でマークされた可変容量
セットのY $ X + 100; #Yは、xが値10で置換されている10 + 100、です。
⦁コマンド置換
これは、コマンド[]囲まれたTCLコマンドとそのパラメータによって置き換えられます
集合Y [式exprの$ X + 100]; 110の#Y値。
yの値は、TCLインタープリタは文字「[」というのコマンド名がC / C ++プロセスに対応する式exprを活性化するように、それは、exprとなり、「exprは」と可変に遭遇110、です'10後に得られた100は、「コマンド処理プロセスに渡されます。
注:[]の有効なTCLスクリプトの長さの制限でなければなりません。[]スクリプト例えば最後のコマンドの戻り値の値:
集合Y [式exprの$ X + 100;セットB 300];戻り値が300 300bは設定されているため、#yは、300であります
⦁バックスラッシュの交換
セットのyの\ $ X + 100; $ X + 100の#Y値。
⦁変数を解放:
X-解除。
3.二重引用符と中括弧
TCLは、インタプリタと区切り文字の置換、通常の文字と特殊文字ように、2つの他の方法を提供し、特別な処理をせず、二重引用符と中括弧を({})を使用することが必要です。
TCLインタープリタ二重引用符の様々な区切り文字は、処理が、改行のための$と[]の記号は、いつものように異なる置換処理されますされていません。例えば
セット×100
Y SET "の$ XのDDD";# Y 100 DDDの値
中括弧で、すべての特殊文字を通常の文字になりますが、その特別な意味を失い、TCLインタープリタは、それらの特殊な治療がありません。
[10 +100 expr]は#Y値/ N $ X; {[10 +100式] / N $ X} Yを設定します
4.ノートと出力
TCLは、コメント文字「#」、「#」で、どこコメントとして行の最後までのすべての文字は、任意の処理をせずTCL、TCLインタープリタ注釈意志です。
しかし、ことに注意してください場所TCLインタープリタで、「#」は、最初の文字が表示される必要があり、コマンドが表示されたいコメントとして扱われました。例えば:
100#ないのCommNetを設定
上記のコマンドはコメントはありませんが、それはエラーになり
100を設定します。#これはコメントです
上記の有効なコメントがあります
それがエラーになり、コマンドライン、TCLインタープリタとコマンドパラメータ処理として、それを次の文字の中央に表示される「#」の文字の最初のコマンドは、コメントとして扱われていません。前のコマンドは、セミコロンの終わりのために使用されているので、「#」の2番目のコマンドは、コメントとして扱われ、TCLインタープリタが期待する次のコマンドは、次に表示され、この位置「#」は今そこにある、その文字でした注釈を付けて。
ます:このような複数の単語として出力テキストは、空白で区切られた又はTABの使用を必要とする「」}または{封入され、行のライトコマンドの複数の、間隔。
正しくこんにちは#を置きます
#正しくない複数の区切られた単語またはTAB間の空間によって、;こんにちは、世界を置きます
Hello Worldのを置く;#runコマンドラインエラー、スペースで区切っ
「こんにちは、世界 - 引用符で」置きます。#注释
プット{こんにちは、世界 - ブレースで}
「これは1行目で」置く;「これは2行目で」置く;#正しく、セミコロンで区切られた2つのコマンドを
「こんにちは、世界; - 引用符の内側にセミコロン」;置き、二重引用符で正しく#、セミコロン、文字列の一部として
第二に、データの種類
TCL、実際に一つだけのデータタイプ:文字列
TCL変数の型変換ではないか、問題の型と一致し、すべての「データ」は、その後どのようにTCL数値計算では、文字列の形をしていますか?小数を生成する方法は?
数値計算:
数値TCLは、様々な数学関数をサポートしていますが、コマンドのみexprの中で使用することができます
例えば:
角度30を設定します。
[* 3.1415926 / 180.0たexpr $角度]ラジアンを設定します。
設定値[exprの罪($ラジアン)];
値は0.499999992265です。
出力データ型
ファイルまたは画面にフォーマット出力データは、フォーマットコマンドは、要求される出力することを確実にするためにディスプレイを制御するために使用することができます。
例えば:
vlaue1 [フォーマット%の.1fの$値]を設定します。
0.5の値1の値;
第三に、データ構造 - リスト
リストデータ構造は、多くの場合、非常に強力で柔軟なアプリケーションに親切に最もTCL言語の機能の一つである、リストには、各要素は任意の文字列にすることができ、任意の数の要素を持つことができ、最も簡単なのは、任意の数のリストを含めることですスペース、タブ、任意の数の要素が離間改行文字列。
例えば:
ジョン・アン・マリージム。
リストを作成
集合X [リスト1 2 3 4]。
リストに指定された区切り文字列
設定した文字列「1,2,3,4」。
Xを設定し、[スプリット$文字列「」];
リストから取られた一つの要素
セット値1 [LINDEXの$ xに0];
設定値2 [LINDEXの$×1];
設定値3 [LINDEXの$×2]。
セットvalue4 [LINDEXの$×3]。
第四に、データ構造-array
Tclで、単純な変数に加えて、それはまた、各要素は、それ自身の名前と値を有し、アレイは幾何学的要素であり、アレイを提供します。配列は2つの部分、すなわち、から構成過程で二重引用符のような区別スペース、でなければならないので、配列名と要素名、配列の名前、および配列要素名は、任意の文字列を指定できます。
配列を作成します
セット学生(名)「サン」。
学生(年齢)15を設定します。
学生(男女)、「男」を設定します。
クエリー配列
配列サイズの学生、クエリ内の配列の要素の学生数
配列名の学生、学生からの問い合わせ配列要素名
多次元配列
セットグレード(ジム、中国語、英語)[リスト98 99];
セットグレード(ピーター、中国語、英語)リスト96 100]。
第五に、制御構造
条件分岐、ループ、例外処理などの基礎となる加工条件などの制御構造の多くの種類があります。
共通の制御文 |
説明 |
もし{式} {body1}他{body2}。 もし{式1} {body1} ELSEIF {式2} {} body2 |
条件付き実行、他にどこか他に必ずしも存在しない場合 |
foreachの値VALUELIST {本体} |
本体を横断しながら、値リストは、リンクリストデータ、値リストのそれぞれを介して指令値であり、各々が一回 |
スイッチ$するvar {{body1}、B {body2}; C {body3}} |
多くのパターンとの比較値、パターンマッチングは、身体への対応を行うことができます |
用{INIT} {試験} {REINIT} {本体} |
その後、本体が実行された場合の式が真であるように、試験の初期量として、INIT、初期量としてREINIT繰り返し、手順を繰り返します。 |
一方{試験} {本体} |
式処理としてテスト、それが真である場合、実行された本体と、このプロセスが繰り返される試験手順 |
リターン |
関数値の戻り値の終わり |
ブレーク |
最も内側のループ終了のため |
持続する |
最も内側のループの現在の反復ステップ、コマンドの次の反復を終了 |
キャッチ{本体} |
コマンド例外は、それ以外の場合はゼロ以外の値を返し、異常がない場合、戻り値が0である処理します |
第六に、プログラム構造
ソース:TCLは、外部ファイルの実行がここに展開することができ
グローバル:指定特定の変数は、グローバルに利用できます。TCLでは、変数は、グローバルステートメントを使用する必要があり、世界的に利用できない主なプログラムは、プログラムの過程でまたは年間の過程で呼び出すことができます。
PROC:サブ記載された方法、手順名、パラメータリスト、実行が続きます。パラメータやプロセスパラメータのリストが同じで呼び出す必要があることに留意されたいです。例外は、プロセスの書き込み専用パラメータ場合は、パラメータのリストの形で複数の入口を受けることができる、ということです。
PROCについて説明します。
1。フォーマット:PROC名引数ボディ
2。呼び出しメソッドのパラメータは、中括弧であってもよく、または二重引用符を含めることはできません
3。交換を必要としているプットコマンドで、ブラケットを使用する必要
例:012_proc.tcl
proc sum {arg1 arg2} {
set x [expr $arg1+$arg2];
return $x ;#过程返回值
}
puts " The sum of 2 + 3 is: [sum 2 3]\n\n" ;#调用过程
#puts " The sum of 2 + 3 is: [sum {2 3}]\n\n" ;#出错,提示找不到第二个参数,置换过程中第一个参数是{2 3},所以找不到第二个参数
puts " The sum of 2 + 3 is: sum(2 3)\n\n" ;#输出sum(2 3),因为没有方括号,根本没有进行置换
puts " The sum of 2 + 3 is: sum{2 3}\n\n" ;#输出sum{2 3},因为没有方括号,根本没有进行置换
sum 2 3 ;#正确
sum {2} {3} ;#正确
sum "2" "3" ;#正确
过程PROC的参数定义
讲解:
1. 过程的参数赋缺省值:proc name {arg1 {arg2 value}}
2. 过程的不确定个数的参数定义:proc name {arg1 args}
proc example {first {second ""} args} { ;#参数定义:赋缺省值和不确定个数参数定义
if {$second == ""} {
puts "There is only one argument and it is: $first";
return 1;
} else {
if {$args == ""} {
puts "There are two arguments - $first and $second";
return 2;
} else {
puts "There are many arguments - $first and $second and $args";
return "many";
}
}
}
set count1 [example ONE]
set count2 [example ONE TWO]
set count3 [example ONE TWO THREE ]
set count4 [example ONE TWO THREE FOUR]
puts "The example was called with $count1, $count2, $count3, and $count4 Arguments"