文字與正規表示式
移除清單中的重複行、空白行與多餘空格
使用工具
郵件複製的名字、日誌擷取的名稱、手動收集的 ID,常混有空白與重複項。行整理能為下一步處理準備清單,但變短、整齊並不意味著所需資訊都保留了。
用虛構商品 ID 清單分別試驗去首尾空白、刪空行、去重和排序。無需真實個人資訊或權限清單也能理解行為。如果原順序或出現次數有意義,應先選擇保留它們的設定。
先不排序,觀察原清單
item-10
item-2
item-2
item-10
item-1最初關閉去首尾空白、刪空行、去重、排序和行號,建立對照基準。一口氣清理全部,很難解釋哪項設定刪了哪些行。使用六行範例逐項啟用。
去掉空白後,才成為重複項
只去首尾空白,會讓第 2、4 行都變成 item-2,item-10 也一樣,但各仍出現兩次。再開啟刪空行與去重,保持不排序,結果是 item-10、item-2、item-1,保留首次出現的順序。
item-10
item-2
item-1工具先去首尾空白再去重。如果空白用於區分紀錄,就應關閉該操作。固定寬度資料和縮排文字裡的空白也是資訊。只剩清理結果時,無法從中復原刪掉的空白或原出現位置。
為什麼 item-10 排在 item-2 前面
普通文字升冪得到 item-1、item-10、item-2;數字排序得到 item-1、item-2、item-10。它更接近人閱讀編號檔名的順序,但並未把 ID 轉為數字,只改變比較規則。
排序使用執行環境的 Intl.Collator,大小寫、重音和語言順序未必等於位元組順序。跨系統必須嚴格一致的機器規則,不應只以本頁面排序為規格。若原順序代表優先順序,應關閉排序。
排序的大小寫設定不等於去重規則
Alpha
alpha
Alpha去重仍會把 Alpha 和 alpha 保留為不同字串。改變排序的大小寫設定,不會讓去重忽略大小寫。混淆兩者會誤以為清理失敗。用小例子確認設定作用於哪一步。
若業務規則忽略大小寫,應先確認適用於這些紀錄。相似檔名或識別碼可能指向不同對象。集合比較提供忽略大小寫的成員比對,但在那裡符合,不保證原系統中是同一對象。
行號最後加入,不代表原行位置
行號按清理後的輸出從 1、2、3 編起,不保留原六行中的位置。啟用排序時,按排序後順序編號。它便於審查清單,但不是來源檔案行號。
編號前綴成為輸出文字的一部分。下個工具收到的是 1. item-10,而非 item-10。機器處理 ID 時可能應使用無編號結果。要區分給人看的裝飾和下一步需要的值。
去重後,就無法再統計原次數
同一錯誤出現一百次,去重後只剩一行。列出錯誤類型很方便,但頻率資訊消失了。訂單、投票、存取紀錄也可能用相同字串表示不同事件。先決定需要種類還是次數,不要把重複直接當多餘。
CSV 引號欄位內的換行可能不是紀錄邊界,不能直接按文字行當一項。應先用 CSV 編輯器解析結構並選擇需要的欄。行整理處理換行分隔字串,不是 CSV 紀錄。
交付前,確認能說明刪掉了什麼
按下一步用途檢查:是否要保留順序、大小寫變體是否應區分、能否刪空白、行號是否混入值。只看整齊結果不易發現遺失資訊,應保留原文對照。
附註「去首尾空白、空行與完全重複項,保留首次出現順序」,接收方就能理解結果。所需原本和條件應自行管理,不要假設工具儲存輸入歷史。整理目的不是縮短,而是把正確意義傳給下一步。
同樣的整理操作,順序不同結果也不同
三行分別是 alpha、前後有空格的 alpha、alpha。不去空格直接去重會留下兩種,先去空格再去重只留一種。哪種正確取決於用途:ID 輸入雜訊可清理,測試字面字串則可能必須保留。先判斷空格是資料還是雜訊。
排序也一樣:名單按名稱排方便,步驟或優先級列表卻會改變意義。後來添加的行號表示整理後位置,不保證原檔案行號。需要追溯時應先保留原文並比較差異;工具不保存原資料稽核歷史,不能只剩整理後的版本。
不要一開始全開選項,可依次檢查空行、前後空格、重複和排序。行數異常時就容易定位最後一步。寫清去空格後按完全一致合併再排序,別人才可以重現。比外觀整齊更重要的是把什麼視為相同、丟掉了什麼。