第111章 Caché 函式大全 $ZNAME 函式
第111章 Caché 函式大全 $ZNAME 函式
驗證指定的名稱字串是否為合法識別符號。
大綱
$ZNAME(string,type,lang)
引數
- string 要計算的名稱,指定為帶引號的字串。
- 可選-指定要執行的名稱驗證型別的整數程式碼。有效值為0到6。預設值為0。
- 可選-指定驗證字串時使用的語言模式的整數程式碼。有效值為0到12。預設情況下使用當前語言模式。
描述
如果字串引數是合法的識別符號,則$ZNAME
返回1(TRUE)。否則,$ZNAME
返回0(False)。可選的type引數確定要對字串執行哪種型別的名稱驗證。如果省略此引數,則驗證預設為區域性變數命名約定。可選的lang引數指定要應用於驗證的語言模式約定。
區域設定可能不允許使用$ZNAME
驗證為合法識別符號的識別符號。區域設定的有效識別符號字元在國家語言支援(NLS)識別符號區域設定中定義;它們不能由使用者修改。
$ZNAME
僅執行字元驗證;它不執行識別符號的字串長度驗證。
引數
string
要驗證為合法識別符號名的帶引號的字串。有效字串可以包含的字元取決於要驗證的識別符號的型別(由type指定)、語言模式(Lang)和區域設定的定義。該字串僅指定識別符號名;它不應包括字首字元,例如插入符號(^
)字首和全域性名稱空間名稱字首(可選分隔),或字尾字元(例如陣列下標或引數圓括號)。預設情況下,以下是Caché中的有效識別符號字元:
- 大寫字母:A到Z(
$CHAR(65)
到$CHAR(90)
) - 小寫字母:a到z(
$Char(97)
到$Char(122)
) - 帶重音符號的字母:(
$CHAR(192)
到$CHAR(255)
,不包括$CHAR(215)
和$CHAR(247)
) - Unicode安裝:非拉丁字符集的Unicode字母,如希臘或西裡爾字母。例如,
$CHAR(256)
到$CHAR(687)
和$CHAR(913)
到$CHAR(1153)
,不包括$CHAR(930)
和$CHAR(1014)
。 - 數字:0到9(
$CHAR(48)
到$CHAR(57)
),受某些識別符號的位置限制 - 百分號:
%($CHAR(37))
受某些識別符號的位置限制
$ZNAME
還接受$CHAR(170)
、$CHAR(181)
和$CHAR(186)
作為有效字元。
注意:日語區域設定不支援識別符號中的重音拉丁字母字元。日文識別符號除包含日文字元外,還可以包含拉丁字母字元A-Z和a-z(65-90和97-122)以及希臘大寫字母字元(913-929和931-937)。
type
指定要執行的名稱驗證型別的整數程式碼:
程式碼 | 含義 | 限制字元 |
---|---|---|
0 | 驗證區域性變數名。 | 僅第一個字元:% ,後續字元:數字0–9 |
1 | 驗證例程routine名稱。 | 僅第一個字元:% ,僅後續字元:數字0–9和句點(。 )字元。句點不能是例程名稱中的第一個或最後一個字元。 |
2 | 驗證標籤label(標記tag)名稱。 | 僅第一個字元:% |
3 | 應用於全域性或程式專用全域性名稱。 | 僅第一個字元:% ,僅後續字元:數字0–9和句點(。 )字元。句點不能是全域性名稱中的第一個或最後一個字元。 |
4 | 驗證完全限定的類名。 | 僅第一個字元:% ,僅後續字元:數字0–9和句點(。 )字元。句點不能是例程名稱中的第一個或最後一個字元。 |
5 | 驗證方法名稱。 | 僅第一個字元:% ,後續字元:數字0–9 |
6 | 驗證屬性名稱 | 僅第一個字元:% ,後續字元:數字0–9 |
如果type = 0
(或未指定),則可以將通過驗證的識別符號用作區域性變數名稱或任何其他型別的ObjectScript名稱。這是驗證的最嚴格形式。有效識別符號的第一個字元必須是百分號(%
)或有效字母字元。有效識別符號的第二個和後續字元必須是有效字母字元或數字。
如果type = 2
,則可以將通過驗證的識別符號用作行標籤。這是唯一一種允許數字(0–9)作為第一個字元的識別符號。僅指定標籤名稱;不要在標籤名稱後指定冒號字首(用於觸發器)或引數括號。
如果type = 3
,則可以將通過驗證的識別符號用於全域性名和程式專用全域性名。但是,全域性名稱和程式專用的全域性名稱不能包含寬字元。 $ZNAME
認為寬字元字母是所有名稱驗證型別的有效識別符號字元。因此,如果type = 3,則包含寬字元字母的識別符號將通過$ZNAME
驗證,但在用作全域性名稱或程式專用全域性名稱時會生成<WIDE CHAR>
錯誤。
如果type = 4
,則可以將通過驗證的識別符號用作類名。類名可以包含句點,但有以下限制:句點後不能緊跟數字字元或其他句點。這些使用期限的限制不適用於type = 1
和type = 3
驗證。任何型別的有效識別符號都不能以句點作為字串的第一個或最後一個字元。
lang
一個整數程式碼,指定用於驗證的語言模式。 Caché將指定語言模式的約定應用於驗證,而無需更改當前語言模式。 (有關可用的當前語言模式的列表,請參見%SYSTEM.Process
類的LanguageMode()
方法。)預設情況下,$ZNAME
使用當前語言模式的語言模式約定。因為所有Caché語言模式都使用相同的命名約定,所以可以省略lang並採用預設值,除非指定lang = 11。
示例
以下示例顯示了$ZNAME
函式,該函式將表示式驗證為true(1)。請注意,最後兩個示例包含句點,例程名稱(型別= 1)和全域性名稱(型別= 3)允許使用句點:
/// d ##class(PHA.TEST.Function).ZNAME()
ClassMethod ZNAME()
{
WRITE !,$ZNAME("A")
WRITE !,$ZNAME("A1")
WRITE !,$ZNAME("%A1",0)
WRITE !,$ZNAME("%A1",1)
WRITE !,$ZNAME("A.1",1)
WRITE !,$ZNAME("A.1",3)
}
在下面的示例中,第一個$ZNAME
驗證失敗(返回0),因為(預設情況下)它會驗證本地變數名,並且本地變數名的第一個字元不能為數字。第二個$ZNAME
通過驗證(返回1),因為type = 2
指定標籤驗證,並且標籤名稱的第一個字元可以是數字。
/// d ##class(PHA.TEST.Function).ZNAME1()
ClassMethod ZNAME1()
{
WRITE "local var: ",$ZNAME("1A"),!
WRITE "label: ",$ZNAME("1A",2)
}
DHC-APP>d ##class(PHA.TEST.Function).ZNAME1()
local var: 0
label: 1
以下示例使所有型別值的驗證失敗。所有型別的Caché名稱都不能包含百分號,除非它是名稱的第一個字元:
/// d ##class(PHA.TEST.Function).ZNAME2()
ClassMethod ZNAME2()
{
FOR i=0:1:6 {
WRITE "type ",i," is ",$ZNAME("A%1",i),!
}
}
DHC-APP>d ##class(PHA.TEST.Function).ZNAME2()
type 0 is 0
type 1 is 0
type 2 is 0
type 3 is 0
type 4 is 0
type 5 is 0
type 6 is 0
以下示例顯示了本地變數名稱的完整有效8位識別符號字符集。這些有效的識別符號字元包括字母字元ASCII 192至ASCII 255,但ASCII 215和ASCII 247除外,它們是算術符號:
/// d ##class(PHA.TEST.Function).ZNAME3()
ClassMethod ZNAME3()
{
FOR n=1:1:255 {
IF $ZNAME("A"_$CHAR(n),0) & $ZNAME($CHAR(n),0){
WRITE !,$ZNAME($CHAR(n))," ASCII code=",n," Char.=",$CHAR(n)
} ELSEIF $ZNAME($CHAR(n),0){
WRITE !,$ZNAME($CHAR(n))," ASCII code=",n," 1st Char.=",$CHAR(n)
} ELSEIF $ZNAME("A"_$CHAR(n),0){
WRITE !,$ZNAME("A"_$CHAR(n))," ASCII code=",n," Subseq. Char.=",$CHAR(n)
} ELSE {
}
}
WRITE !,"All done"
}
DHC-APP>d ##class(PHA.TEST.Function).ZNAME3()
1 ASCII code=37 1st Char.=%
1 ASCII code=48 Subseq. Char.=0
1 ASCII code=49 Subseq. Char.=1
1 ASCII code=50 Subseq. Char.=2
1 ASCII code=51 Subseq. Char.=3
1 ASCII code=52 Subseq. Char.=4
1 ASCII code=53 Subseq. Char.=5
1 ASCII code=54 Subseq. Char.=6
1 ASCII code=55 Subseq. Char.=7
1 ASCII code=56 Subseq. Char.=8
1 ASCII code=57 Subseq. Char.=9
1 ASCII code=65 Char.=A
1 ASCII code=66 Char.=B
1 ASCII code=67 Char.=C
1 ASCII code=68 Char.=D
1 ASCII code=69 Char.=E
1 ASCII code=70 Char.=F
1 ASCII code=71 Char.=G
1 ASCII code=72 Char.=H
1 ASCII code=73 Char.=I
1 ASCII code=74 Char.=J
1 ASCII code=75 Char.=K
1 ASCII code=76 Char.=L
1 ASCII code=77 Char.=M
1 ASCII code=78 Char.=N
1 ASCII code=79 Char.=O
1 ASCII code=80 Char.=P
1 ASCII code=81 Char.=Q
...
以下示例通過了Caché的Unicode安裝的驗證。指定的希臘字母是有效的Unicode字母,因此可以通過$ZNAME
驗證。但是,此名稱不能用於全域性或程式專用的全域性(型別= 3),並且可能無法在某些語言環境(例如日語語言環境)中使用:
/// d ##class(PHA.TEST.Function).ZNAME4()
ClassMethod ZNAME4()
{
IF $SYSTEM.Version.IsUnicode() {
WRITE $C(913)_$C(961)_$C(947)_$C(959),!
FOR i=0:1:6 {
WRITE "type ",i," is ",$ZNAME($C(913)_$C(961)_$C(947)_$C(959),i),!
}
}
ELSE {
WRITE "此示例需要安裝Unicode的Caché"
}
}
DHC-APP>d ##class(PHA.TEST.Function).ZNAME4()
Αργο
type 0 is 0
type 1 is 0
type 2 is 0
type 3 is 0
type 4 is 0
type 5 is 0
type 6 is 0
SQL識別符號
SQL識別符號可包括標點符號(下劃線(_
)、at符號(@
)、井號(#
)和美元符號($
)),這些字元在ObjectScript識別符號中不是有效字元。SQL例程名稱不能在除第一個字元以外的任何位置包含百分號(%
)。
相關文章
- 第104章 Caché 函式大全 $ZF 函式函式
- 第四十章 Caché 函式大全 $METHOD 函式函式
- 第六十三章 Caché 函式大全 $SORTEND 函式函式
- MySQL函式大全(字串函式,數學函式,日期函式,系統級函式,聚合函式)MySql函式字串
- 第7章 IF函式 COUNTIF函式 SUMIF函式函式
- Hive函式大全Hive函式
- mysql函式大全MySql函式
- PHP函式大全PHP函式
- 第 8 節:函式-匿名函式、遞迴函式函式遞迴
- javascript常用函式大全JavaScript函式
- PHP常用函式大全PHP函式
- oracle 10g函式大全–日期型函式Oracle 10g函式
- Python 內建函式大全Python函式
- Js字串操作函式大全JS字串函式
- JavaScript 工具函式大全(新)JavaScript函式
- 第4章函式函式
- Excel函式公式大全,辦公文員必備Excel函式公式Excel函式公式
- 遞迴函式例項大全遞迴函式
- 第 8 節:函式-函式定義和引數函式
- 第 8 節:函式-函式型別與作用域函式型別
- 測開之函式進階· 第2篇《純函式》函式
- 測開之函式進階· 第4篇《匿名函式》函式
- 測開之函式進階· 第5篇《偏函式》函式
- Python3中的函式 大全Python函式
- PHP經常用到的函式大全PHP函式
- excel中最常用的30個函式 excel表格常用函式技巧大全Excel函式
- python中id()函式、zip()函式、map()函式、lamda函式Python函式
- Python 擴充之特殊函式(lambda 函式,map 函式,filter 函式,reduce 函式)Python函式Filter
- 第 8 節:函式-函式巢狀呼叫與返回值函式巢狀
- 測開之函式進階· 第1篇《遞迴函式》函式遞迴
- MySQL(四)日期函式 NULL函式 字串函式MySql函式Null字串
- 《MySQL 入門教程》第 16 篇 MySQL 常用函式之日期函式MySql函式
- (譯) 函式式 JS #2: 函式!函式JS
- Python內建函式大全,快來看看!!Python函式
- Python 字串 String 內建函式大全(1)Python字串函式
- Python 字串 String 內建函式大全(2)Python字串函式
- 核函式 多項式核函式 高斯核函式(常用)函式
- lambda匿名函式sorted排序函式filter過濾函式map對映函式函式排序Filter