標籤:資料庫 returns 嚴格 line lan 判斷 c# 根據 trre
在做一個屬性入庫的功能,將Excel屬性資料匯入到圖層要素當中,這裡Excel和SDE資料庫資料存在一個關聯欄位,通過關聯欄位值進行匹配屬性入庫。
在實際業務中,由於普查資料往往某些欄位值比較複雜,在寫入到圖層中時使用者可能做一些簡化,例如一個要素編號為0532BH001,可能錄入到圖層中只錄入BH001,這樣就導致了圖層要素和Excel檔案關聯欄位的值並不一定是完全相等的,可能存在一定的匹配關係。
這裡不考慮複雜的情況,只是考慮Excel中關聯欄位值是要素關聯欄位值加首碼、尾碼或者前尾碼都存在的情況。
因為是以Excel作為基準來迴圈的,構造好欄位值後再圖層中進行Query操作尋找到相應的要素,所以不能通過在圖層要素關聯欄位中取出欄位值然後通過串連前尾碼的方式來判斷處理,只能通過對Excel中關聯欄位值進行截取的方式來處理。
根據這裡的實際情況,格式比較固定,移除首碼、尾碼函數如下所示:
///<summary> /// 移除前置詞字元串 ///</summary>///<param name="val">原字串</param>///<param name="str">前置詞字元串</param> ///<returns></returns>private string GetRemovePrefixString(string val, string str){ string strRegex = @"^(" + str + ")"; return Regex.Replace(val, strRegex, ""); } ///<summary> /// 移除尾碼字串 ///</summary> ///<param name="val">原字串</param> ///<param name="str">尾碼字串</param> ///<returns></returns> private string GetRemoveSuffixString(string val, string str) { string strRegex = @"(" + str + ")" + "$"; return Regex.Replace(val, strRegex, ""); }
延伸,如果對於字串要求不如此嚴格,只是單純的截取前後字串,那麼可以通過此種方式進行:
///<summary>/// 截前後字串///</summary> ///<param name="val">原字串</param>///<param name="str">要截掉的字串</param>///<param name="bAllStr">是否對整個字串進行截取///如果為true則對整個字串中匹配的進行截取///如果為false則只截取首碼或者尾碼</param>///<returns></returns>private string GetString(string val, string str, bool bAllStr){ return Regex.Replace(val, @"(^(" + str + ")" + (bAllStr ? "*" : "") + "|(" + str + ")" + (bAllStr ? "*" : "") + "$)", "");}
如果是截取單個字元而不是字串,可以通過TrimStart或者TrimEnd函數來處理:
/// <summary>/// 截前後字元/// </summary>/// <param name="val">原字串</param>/// <param name="c">要截取的字元</param>/// <returns></returns>private string GetString(string val, char c){ return val.TrimStart(c).TrimEnd(c); }
以上動圖由“圖鬥羅”提供
C# 去除字串首尾字元或字串