解析ArcGis的字段計算器(三)——文本型字段計算,編號那些事兒


實際操作中我們一般會將編號字段定義為文本型,因為編號不是序號,序號是一個遞增數值,而編號往往是一個數字串代碼。

本篇無說明的均使用VBScript語句
1、怎么編號?
最簡單的編號—>直接在編號字段使用字段計算器將FID字段值+1計算過來便是。

BH=[FID]+1


這應該只能叫做序號值,還不夠,還有一個問題需要我們去解決,因為編號往往是一個數字代碼,它一般是由區域代碼或者類型標識碼等(前綴)+固定位數序號組成的
BH的固定位數如果是4位,那么全碼應該是“前綴+0001”,“前綴+0002”……“前綴+0010”……“前綴+0100”……“前綴+9999”。
可以看出序號前面補的“0”位數是變化的,可以通過下面的方式輕松實現。

BH="前綴" & left("0000",4-len( [FID]+1)) & ([FID] +1)

left("字符串",n)是從左側開始截取字符串的指定前n位;len("字符串")是計算字符串長度。這個例子中序號部分長度為4,序號部分“0”的長度應該是4-序號值的長度,暫記為n,從“0000”左邊開始截取n個0 拼接上序號值就是我們要的結果了。

對於補0的操作還可以用string函數:

BH="前綴" &string(4-len( [FID]+1),"0") & ([FID] +1)

 

string函數的用法是string(重復次數,"重復字符"),注意第二參應使用數字或英文

 

有沒有比較zhuangbility的操作?當然有的,比如下面可以smallzhuangbility一下的Python函數

rec=0
def autoIncrement():
 global rec
 pStart = 1 #初始值
 pInterval = 1 #間隔值
 if (rec == 0): 
  rec = pStart 
 else: 
  rec = rec + pInterval 
 return rec

怎么調用翻看俺前邊的帖子

autoIncrement()直接調用
(str(autoIncrement())).zfill(5) 固定位數為5,前邊補0
autoIncrement()+1000 加起碼1000

分類編號

把不同行政區、不同種類的圖斑編號,每類都是從1開始起編,簡單的方法是借助Excel處理回掛實現,具體參考下面鏈接博文中的Excel操作自行領悟:

解析ArcGis的字段計算器(二)——有玄機的要素Geometry屬性,在屬性表標記重復點線面

2、編號的修改

假定一個編號“37148210120101005”,很明顯能看出這是一個按行政區域編碼的代碼串,至於是哪個行政區的俺也不知道,因為這是俺隨手造的。
現在有這樣一個需求——需要把該編號拆成縣、鄉、村、組、編號5個字段,如何操作呢?
最前邊的縣編號與最后邊的編號兩個字段分別可以用left、right函數截取出來,中間的呢?這時需要引入一個新函數了,它就是mid,mid( [BH],7,3)就可以截取鄉鎮編號了,它的用法是mid( "字符串",起點位置,截取長度)。
上邊的還沒整明白,這里又來一個需求,縣級編號改了,成“371488”了,如何操作?
用replace函數,它的用法很典型的體現了作者開篇一再提示的Excel函數≠VB函數。
replace( [BH],"371482","371488")就可以了,用法是replace(“字符串”,"字符串中待替換的字符子串","替換為的字符串"),當然該例中replace函數有缺省參數沒有使用,如有興趣可以自己百度一下VB的replace函數用法。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM