如何利用『資料處理過濾增益集』在Excel中以資料格的資料長度進行篩選
昨天學校同事拿一份要上傳報名考試的學生資料,請我協助處理。上傳的資料必須是ANSI純文字檔,資料的欄位是以資料長度來決定欄位的位置,格式大致如下:
報名序號長度 8個字元
身份證字號長度 10個字元
姓名長度 20個字元
其中前兩欄大致上沒有甚麼問題,因為從學校的資料庫轉出的學生這部分資料,再轉存為ANSI文字檔時,長度是符合的上傳格式的要求,但是姓名的部分就比較麻煩,因為有人的名字是不同的長度,而上傳格式中要求姓名欄位必須以空格補足20個字元,這種要求據同事說以前使用的漢書這種文書軟體很容易完成。但是現在她的電腦已經沒有漢書這套軟體,所以她請我協助是否可以利用Excel產生這樣的文字檔,因為Excel可以將資料庫轉出的檔案轉存成文字檔,再利用WINDOW內建筆記本這種軟體,將檔案轉存為ANSI純文字檔格式。
我們要解決這個問題,比較麻煩的是必須將姓名資料中特殊長度的特別挑出,並且加入空格補足。除了這個問題,我們必須考慮中文編碼的特性,中文姓名常見的資料長度是三個中文字,在ANSI編碼每個中文字是2碼組成,所以三個中文字轉成ANSI時長度是6個字元,如果使用VB6來處理補足長度20的問題,只要加入7個空白鍵即可,因為中文是DBCS(雙位元組字元),VB6處理中文字串時,雖然中文是雙位元組合,但是VB6的字串處理函數例如Len是把一個中文字當成一個字元來處理,所以只要在中文姓名之後加入7個空白字元即可,整個字串變成是10個DBCS字元,轉成ANSI時空白字元長度變成14字元,再加上原來6個字元即可符合20個字元的要求要求。
知道處理的原理接著的重點,如何在幾百筆的學生資料中找出那些姓名長度不是三個字的,如果利用『資料處理過濾增益集』在Excel中處理應該如何做?
若部分資料如下
李諭琪 |
廖靚緯 |
林博晟 |
林旻安 |
林樺蝶 |
林欣慧 |
林容 |
林彥國 |
駱馨 |
郭儀千 |
胡閔惠 |
黃銘亭 |
黃佳宣 |
黃哲佳 |
黃文家 |
洪芸敏 |
邱秀儒 |
邱士瑛 |
謝茹守 |
張俊郁 |
張茹瑰 |
卓文 |
陳萍玫 |
陳暉閔 |
陳如曄 |
陳毓儀 |
蔡治宗 |
曾珍宜 |
蘇芳婷 |
蘇心 |
蘇怡新 |
游宏音 |
吳凡瑋 |
吳潔欣 |
魏容傑 |
王俊昭 |
舉例我們要挑出姓名是兩個字的學生資料,再加入8個空白字元,可以依以下步驟:
步驟一、點選『正規比對資料過濾』/『工作表資料內容處理』表單
步驟二、點選表單中『資料處理範圍』/『選取』按鈕,將要處理的資料位置選取,在『用來篩選資料處理對象的規則』輸入此正規表示規則 ^\S{2}$ (此篩選的規則是從頭到尾必須是兩個非空白字元)
然後在『加在資料後的字串』輸入8個空白字元,按確定即可達成。為了方便讀者看出處理的結果,我改用輸入7個#來代替。
步驟三:處理結果如下
如果是使用Excel2003,請將改好的Excel檔案另存為CSV檔,再利用筆記本等文字編輯軟體打開,利用全選與取代功能,把 ”與 逗號取代掉,再另存為ANSI的文字檔格式,因為Excel2003再轉存為CSV檔案或TAB鍵分隔的文字檔,會出現自動把字串格式資料加上引號的現象!
ps:另外在『正規比對資料過濾』/『工作表資料篩選』也提供另一種不用正規比對的篩選的方法,取消『用正規表示法比對』設定,在『數值比對以x代表資料格的值』輸入 len(x)=2 (x代表資料格值,len為字串長度函數,此篩選式為篩選資料格長度是2的資料格)
歡迎引用,請注明來源出處!