將文字檔對半切分的意思是將它分成兩個部分,每個部分包含大致相同的行數,而最可靠的做法是先計算行數,設定一個等於總數一半的分塊大小,然後執行本地的逐行分割器。以 1,000 行的檔案來說,你可以把它切成每個部分 500 行;以 1,001 行的檔案來說,你將分塊大小設為 501,這會產生 501 行的第一個部分和 500 行的第二個部分,因為分割器不會重新平衡餘數。切分發生在行的邊界上,每個 CRLF、CR 或 LF 都會終止一個輯行,因此每行的縮排、Unicode 字元和尾端空白都能完整保留。在任何純文字工具中都沒有自動「精準分成兩個等半」的按鈕,因為等半需要你在決定分塊大小之前先知道總共有多少行。這就是為什麼快速的行數計算加上單一分塊大小輸入,就足以在不需上傳任何檔案的情況下完成工作。

how to split text file in half
how to split text file in half

「對半切分」對純文字檔的真正意涵

文字檔是行的序列,而「一半」只是將這些行分割成兩組。最具可預測性的定義是依行數:400 行的一半是每個部分 200 行。雖然也有其他替代方案,但它們會給出不同的結果。

  • 行數:每行算一個單位,不管它有多長。可預測且符合大多數編輯器和剖析器的看法。
  • 位元組大小:每個部分以 KB 或 MB 為上限。當儲存空間是限制條件時很有用,但行長不一會造成行數不均。
  • 百分比:像「50%」這樣的要求只是「一半的行」或「一半的位元組」的簡寫——你仍然必須在點選任何東西之前把它轉成具體的數字。

對於一般的筆記、記錄檔、簡單匯出和文字語料庫而言,行數是最安全的定義。它也符合像 Text File Splitter 這類工具實際運作的方式:輸入一個分塊大小,輸出 N 個部分,其中 N 等於總行數除以分塊大小後的無條件進位。

在設定分塊大小之前先計算行數

在知道總行數之前,你無法決定一半是多少。用本地的行數計算工具開啟檔案以取得精確的總數,然後除以 2,如果總數是奇數則無條件進位。

Line Counter 可以在一次處理中同時回傳總行數、非空白行數和空白行數,完全不需要上傳:貼上、計算、完成。掌握總數後,公式很直接:

分塊大小 = ceil(總行數 除以 2)

若總數為 200 行,ceil(200 除以 2) 等於 100。若為 349 行,ceil(349 除以 2) 等於 175。若為 10,007 行,ceil(10,007 除以 2) 等於 5,004。在任何情況下,第二個部分會吸收所有剩餘的行,而分割器絕不會悄悄丟棄行數,因此各部分的行數總和永遠等於總行數。

使用 Text File Splitter 將文字檔對半切分

  1. 在瀏覽器中開啟 Text File Splitter。該頁面在本機讀取並處理檔案,因此不會將任何內容傳送到伺服器。
  2. 選擇一個副檔名為 TXT、CSV、MD 或 LOG、且大小在 10 MiB 以下(含)的本機檔案。超出該大小限制的檔案會在分割開始前被拒絕。
  3. 在「每部分行數」欄位中輸入你的半數大小,輸入範圍是 1 到 100,000 的整數。對於 349 行的檔案,輸入 175 以得到兩個部分。
  4. 執行分割並讀取顯示的總計資訊:工具會確認它所讀取的總行數以及它所產生的部分數量。
  5. 單獨下載每個編號的分塊。檔名遵循 yourname-part-001.txtyourname-part-002.txt 等模式,一律使用 .txt 副檔名和三位數零填補的序號。
  6. 保留原始檔案在磁碟上,直到每個分塊都已下載、並在目標應用程式中開啟並驗證過。

對於上面 349 行的範例,計算方式為 349 除以 175 等於 1.994,無條件進位為 2 個部分,而產生的分割結果是 part 001 有 175 行,加上 part 002 有 174 行。算術上 175 加上 174 等於 349,證實沒有任何行被丟棄或重複。

分割器內部:行規則與輸出行為

Text File Splitter 是一個嚴格以行為導向的工具,當目標是精準達成對半時,有幾項細節值得注意:

  • 行邊界:CRLF、單獨的 CR 以及 LF 都會被識別。CRLF 算作一個邊界,而不是兩個。
  • 尾端空行:以換行符結尾的檔案會包含一個最終的空邏輯行。雙字元輸入「a\n」算作兩行,因此分塊大小為 1 時,part 001 會是「a」,part 002 會是空行。
  • 輸出換行符:每個分塊都會以 LF 連接,不管來源使用何種混合結尾,因此各部分使用一致的換行符。
  • 不重新平衡:最後一個部分承載餘數。當總數為奇數時,沒有演算法能讓兩個半部完全相等。
  • 無 ZIP 封存:各部分一次下載一個,因此工具不會增加額外相依項目。當請求許多部分時,瀏覽器可能會提示要求權限。
  • 確定性的檔名:相同的輸入和分塊大小永遠會產生相同的總數、部分數量和零填補的檔名。
限制文件記載值邊界上的行為
來源檔案最大大小10 MiB較大的檔案在任何解碼開始之前就會被拒絕。
每部分行數1 到 100,000 的整數零、小數、負數以及超過上限的值都會被拒絕;不會產生部分結果。
可接受的副檔名TXT、CSV、MD、LOG其他副檔名會被拒絕;工具不會檢查格式語法。
來源編碼UTF-8 (由 File.text 解碼)非 UTF-8 或使用誤導性副檔名的二進位檔案,可能會出現替換字元。

在底層,工具會驗證檔名和大小、將位元組以 UTF-8 解碼、驗證分塊大小、在單獨的 CR 或 LF 之前先切分 CRLF、保留尾端的空邏輯行、依序切片而不重新平衡、以 LF 連接每個部分、產生零填補的檔名,並且只有在點擊下載按鈕時才會建立暫時性的物件 URL。該物件 URL 會在下載觸發後立即被撤銷,因此記憶體中不會留下任何東西。實作遵循 MDN 文件所記載的 File.text 解碼模式。

對半分切結構化檔案時的注意事項

以行為基礎的切分雖然精確,但它不考慮結構。一個看起來像普通文字的檔案,其內容行可能只有在與相鄰行保持在一起時才有意義。

  • 含有引號換行的 CSV:加上引號的 CSV 欄位合法地可以包含真正的換行字元。如果切分邊界落在該引號內部,產生的兩半將無法以有效的 CSV 進行剖析。
  • Markdown 表格和圍欄程式碼區塊:在第 200 行開啟、在第 320 行關閉的圍欄,如果你的切分點落在它內部,會被撕成兩半。
  • 字幕檔:SRT 和類似格式使用以空行分隔的編號提示區塊;在行層級上切割可能會把單一提示切到兩個部分中。
  • 含有堆疊追蹤的記錄檔:附加在某個記錄項目上的多行堆追蹤,可能會被從其父行切離。

如果結構的正確性很重要,請在對半切分之前使用能識別格式的剖析器,或選擇一個你已手動確認能與檔案中自然邊界對齊的分塊大小。對於一般的散文、純粹的記錄行和簡單的匯出,以行為基礎的方法正好符合需求。

保留原始檔案並驗證兩個半部

原始檔案永遠不會被修改——工具只會讀取它。把它當作事實的來源:在你下載完兩個半部並確認之前,請將它保留在磁碟上。快速的驗證流程如下:

  1. 在任何純文字編輯器中開啟 part 001。確認它的第一行與原始檔案的第一行相符。
  2. 開啟 part 002 並確認它的最後一行與原始檔案的最後一行相符。
  3. 將兩個部分的行數相加,並與原始總數進行比對。數字必須完全一致。
  4. 在會使用該格式的應用程式中(CSV 匯入工具、Markdown 渲染器、記錄檔檢視器)至少開啟一個部分,並確認它能正確剖析而沒有錯誤。

一旦所有項目都通過檢查,這兩個半部在任何以循序方式讀取它們的工具中,都可以與原始檔案互換使用。如果你需要重新組合它們,Text File Merger 會以明確的分隔符規則依所選順序重新合併檔案。不過,對於大多數「對半切分」的工作,兩個部分會保持分開:一份用於分享、一份用於封存,一份用於上傳、一份用於本機參考,或一份用於前半段處理、一份用於後半段處理。

如果你在權衡各種選項,如何從 AutoCAD 文字中移除重複的行對此有詳細說明。

如果你在權衡各種選項,為每一行加入前綴的逐步說明對此有詳細說明。