我們經(jīng)常會看到Klength,Ksubstr,以及Kscan等一系列的函數(shù),由此會產(chǎn)生疑惑,加K和不加K兩者之間有什么區(qū)別和聯(lián)系。當(dāng)我們在做項目的時候發(fā)現(xiàn)有時候不加K也能實現(xiàn)我們想要得到的結(jié)果,但是有時候則會出現(xiàn)亂碼的情況,嘗試加上K后就可以完美規(guī)避掉亂碼這個問題,為什么會出現(xiàn)這樣的問題呢?本文告訴你答案。
原來加K是以字符為基礎(chǔ)進(jìn)行處理,也就是你數(shù)字符串中有幾個字符就是幾個字符,而不加K是以字節(jié)為基礎(chǔ)進(jìn)行處理。我們知道在SAS中文簡體中一個漢字(標(biāo)點(diǎn))占兩個字節(jié),一個數(shù)字占一個字節(jié);在SAS UTF-8中一個漢字(標(biāo)點(diǎn))占三個字節(jié),數(shù)字占一個字節(jié),但是SAS 英文版字符和數(shù)字都占一個字節(jié),所以在此環(huán)境下Klength和Length、Substr和Ksubstr的功能是一樣的,下面我舉三個例子,以UTF-8為例:
一、klength和length
例1:計算test數(shù)據(jù)集中topic這個字符變量的長度
data test;
input topic $20.;
cards;
話題Topic 1
話題Topic 2
話題Topic 3
話題Topic 4
話題Topic 5
;
run;
data all1;
set test;
topic1=klength(topic);
topic2=length(topic);
run;
結(jié)果如下:
可以看到,由于中文字符在utf-8編碼時為3個字節(jié), 而length函數(shù)計算的是字節(jié)長度,會把一個漢字當(dāng)成3個長度,數(shù)字當(dāng)做1個長度,所以計算結(jié)果為2*3+7=13。而klength函數(shù)會忽略全角半角,統(tǒng)一把漢字和數(shù)字都當(dāng)做1個長度,所以計算結(jié)果為9。
二、ksubstr和substr
例2:提取test數(shù)據(jù)集中topic中前六位的值
data all2;
set test;
topic1=substr(topic,1,6);
topic2=ksubstr(topic,1,6);
run;
結(jié)果如下:
可以看到,substr提取出的字符串為“話題”, 而ksubstr提取出了前六個字符”話題Topi”,所以還是和上面的例子是一個道理,以K開頭的是以字符為基礎(chǔ)提取字符串,而不以K開頭的以字節(jié)為基礎(chǔ)提取,但是有時我們會遇到用substr提取出的字符串出現(xiàn)亂碼的情況,出現(xiàn)這種情況后要怎樣解決呢,看下面一個例子。
三、substr和ksubstrb
例3:提取test數(shù)據(jù)集中topic中前5位的字符串
data all3;
set test;
topic1=substr(topic,1,5);
topic2=ksubstr(topic,1,5);
topic3=ksubstrb(topic,1,5);
run;
結(jié)果如下:
可以看到,用substr提取出的字符串出現(xiàn)了亂碼,這是因為substr函數(shù)提取字符時是按字節(jié)來提取的,中文字符在utf-8編碼時為3個字節(jié),所以提取指定長度的字符串時如果截斷了漢字,那么返回的結(jié)果顯示出來便會出現(xiàn)亂碼。此時用ksubstrb函數(shù)就可以避免出現(xiàn)亂碼的情況,它會舍棄最后一個不完整字符,從而保證不會出現(xiàn)顯示上的亂碼。
-
字符串
+關(guān)注
關(guān)注
1文章
590瀏覽量
22234 -
SAS
+關(guān)注
關(guān)注
2文章
524瀏覽量
33415 -
UTF-8
+關(guān)注
關(guān)注
0文章
13瀏覽量
7968
發(fā)布評論請先 登錄

#硬聲創(chuàng)作季 云計算基礎(chǔ)入門:12-scsi及sas接口-sas和sata區(qū)別
SAS走進(jìn)企業(yè)級存儲應(yīng)用
串行連接SCSI(SAS)技術(shù)開辟寬數(shù)據(jù)路徑
SAS分區(qū)規(guī)范為所有SAS物理結(jié)構(gòu)提供靈活高效的接入控制,其特性包括
AD中signal length和routed length中有什么區(qū)別
SAS固態(tài)硬盤存儲技術(shù)
SAS硬盤有什么特點(diǎn)?
Altium中Signal length和Routed length區(qū)別
PCIExpress SATA和SAS設(shè)計驗證的簡化
SAS接口的設(shè)計
SAS35X24R SAS EXPANDER 使用24端口擴(kuò)展器提供靈活且經(jīng)濟(jì)高效的SAS和SATA存儲解決方案

SAS3X24R SAS EXPANDER 使用24端口擴(kuò)展器實現(xiàn)經(jīng)濟(jì)高效的SAS和SATA存儲解決方案

Power-Optimized Avago 12Gb/s SAS/SATA SAS35x48 SAS35x40 SAS35x36擴(kuò)展器

評論