文字與寫作 指南

文字排序為什麼會出現 1、10、3?

因為『字母排序』比較的是字串,不是數值。先決定資料到底是文字還是數字,再選排序方式。

更新日期:

輸入:

3 1 10

如果用字串遞增:

1 10 3

很多人第一眼覺得:

工具壞了。

其實不是。

它是在做:

lexicographic / text comparison。

字串排序

概念上比較:

第一個字元。

所以:

  • 1
  • 10

都以 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 現行公開驗證指出:

去重在排序之前完成。

而且如果忽略大小寫:

  • Apple
  • apple

被判定重複時:

保留輸入中第一次出現的原始拼法。

這是非常值得知道的細節。

空白行

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。

建議流程

名單

  1. 保存原始版
  2. 移除空白
  3. 決定大小寫
  4. 去重
  5. A→Z

數字

  1. 確認全部可解析
  2. 決定前導零是否重要
  3. numeric sort
  4. 抽查 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,例如 21002、大小寫混合、前後空白、空白行和含重音符號的文字。執行排序後逐筆核對,確認選用的是字母、自然數字、文字長度或其他明確模式;若結果要交給別的系統,再用該系統的匯入或排序功能回讀一次,因為不同語言環境的 locale 規則可能不同。

批次處理前先保存原始順序與去重規則。排序本身通常不應改變每行內容,但 trim、大小寫折疊或 Unicode normalization 可能讓兩行變成相同鍵;這時要決定是保留原文、穩定排序,還是先向使用者報告衝突。驗收紀錄至少包含模式、方向、空白處理和筆數,之後才能判斷結果變動是資料變了,還是規則被換了。