文字與寫作 指南
文字排序為什麼會出現 1、10、3?
因為『字母排序』比較的是字串,不是數值。先決定資料到底是文字還是數字,再選排序方式。
更新日期:
輸入:
3
1
10
如果用字串遞增:
1
10
3
很多人第一眼覺得:
工具壞了。
其實不是。
它是在做:
lexicographic / text comparison。
字串排序
概念上比較:
第一個字元。
所以:
110
都以 1 開頭。
而:
3
第一個字元就是3。
因此 10 可以排在3前面。
數值排序
如果把每行解析成 number:
- 1
- 3
- 10
才會得到數學順序。
FunnyTools Sort Lines 目前公開頁面就特別用:
3、1、10
做驗證案例,說明預設字母排序和數值排序不同。
A→Z
適合:
- names
- keywords
- labels
- IDs(若你真的要文字順序)
Z→A
就是反向字串順序。
數值
適合:
- scores
- money
- measurements
- pure numeric IDs(若數值意義才重要)
但要小心:
001
01
1
如果轉成 number:
數值可能相同。
但原字串並不相同。
依文字長度
用途:
- 找最長標題
- 找過長 label
- 找異常資料
例如:
cat
elephant
dog
依長度:
- cat
- dog
- elephant
但同長度內容的次序要看工具實作。
大小寫
Apple
apple
是否視為:
- 不同
- 相同
要看:
case-sensitive option。
FunnyTools 目前支援:
忽略大小寫。
這也會影響:
去重判斷。
去重和排序誰先?
FunnyTools 現行公開驗證指出:
去重在排序之前完成。
而且如果忽略大小寫:
Appleapple
被判定重複時:
保留輸入中第一次出現的原始拼法。
這是非常值得知道的細節。
空白行
Sort Lines 目前會:
排序前先移除空白行。
和 Remove Empty Lines 不同:
Sort Lines 沒有「保留一個空白行」模式。
所以不要把 Sort Lines 當作純粹「不改資料,只換順序」的工具。
Trim
目前排序流程會 trim line。
如果資料前後空白有語意:
先保留 raw backup。
例如:
- code
- indentation
- fixed-width text
不適合直接排序。
CSV
非常重要:
一行不一定等於一筆 CSV record。
quoted cell 可以含 newline。
所以 Sort Lines:
不應用來當 CSV parser。
建議流程
名單
- 保存原始版
- 移除空白
- 決定大小寫
- 去重
- A→Z
數字
- 確認全部可解析
- 決定前導零是否重要
- numeric sort
- 抽查 min/max
文字 ID
如果:
A2
A10
你要的是:
- text sort
- natural sort
要先定義。
FunnyTools目前公開排序模式沒有宣稱完整 natural sorting,因此不要期待所有混合字串都按人類直覺。
工具
排序結果的驗收方法
驗收不只看畫面上前幾行。先確認輸入與輸出行數一致,再檢查重複值、空行、前後空白、大小寫和非 ASCII 字元是否依規格處理。準備已知順序的 fixture,讓字典序、數字序與自然序產生明顯不同,並測試同值項目的穩定性。若輸出要匯入其他系統,還要驗證編碼、換行與欄位分隔符。保留排序前後的檔案和規則版本,日後才能解釋為什麼同一份名單的順序改變。
排序前要先定義資料規則
排序不是單一行為。字典序會依字元比較,數字排序會把 2 放在 10 前面,自然排序則會把文字中的數字片段拆開比較;大小寫、重音符號、前後空白和重複值也會改變結果。先決定是否 trim、是否區分大小寫、是否保留重複、空行放在前面還是後面,以及排序後是否需要穩定保留原始順序。
對名單或關鍵字,可先用少量已知結果做 fixture,例如 A2、A10、a2、含前後空白的 A2,以及重複的 A10。對 CSV、表格或含引號的多欄資料,先使用能理解欄位的程式或試算表;逐行排序可能把欄位內的換行誤認成新資料列。排序後要比較總行數、重複數、第一筆與最後一筆,並保留排序前版本,確保結果可以回復與重現。
延伸: PDF/網頁複製文字清理
排序結果的驗收方法
先用五到十筆刻意容易混淆的資料建立 fixture,例如 2、10、02、大小寫混合、前後空白、空白行和含重音符號的文字。執行排序後逐筆核對,確認選用的是字母、自然數字、文字長度或其他明確模式;若結果要交給別的系統,再用該系統的匯入或排序功能回讀一次,因為不同語言環境的 locale 規則可能不同。
批次處理前先保存原始順序與去重規則。排序本身通常不應改變每行內容,但 trim、大小寫折疊或 Unicode normalization 可能讓兩行變成相同鍵;這時要決定是保留原文、穩定排序,還是先向使用者報告衝突。驗收紀錄至少包含模式、方向、空白處理和筆數,之後才能判斷結果變動是資料變了,還是規則被換了。