:::

如何合併多個純文字檔案並加上換行:使用Notepad++ / How to merge plain files in a single file with broken lines: Using Notepad++

12-Notepad_How_to_merge_plain_files.png

ALOHA~~我是就算為了一個小小的合併檔案工作也不想寫程式的布丁。

我們很多時候需要將大量的純文字檔案合併成一個檔案,並且希望在各個檔案之間加上換行。單純將純文字檔案合併成一個檔案的做法很多,但是要能夠正確識別中文編碼,還要在合併的檔案之間加上斷行,那就不太容易了。

令人意外的是,Windows上好用的純文字編輯器Notepad++,它的Combine外掛居然有合併多個純文字檔案的功能。讓我們來看看怎麽操作吧。


問題敘述 / Problem statement

2019-1003-153048.png

現在我們有兩個純文字檔案組成的名冊,裡面是一行一位名字。附帶一提,這裡面的名字是由夢幻筆名產生器而來的,這個工具在做範例檔案的時候非常好用。

值得注意的是,這兩個檔案的結尾都沒有換行。這個看不見的小細節,會影響後面的操作設定喔。

2019-1003-161608.png

我們的目標是要把這些名冊檔案合併成一個檔案,如上圖所示。仔細觀察的話,可以發現兩個檔案之間是有加入換行的結果。

雖然這個例子只用了兩個小檔案,也許用複製貼上也可以完成這個工作。不過在處理大量檔案的時候,手工作業就很難做到這件事情了。

那要怎麼將純文字檔案合併成一個檔案,並且加入換行呢?讓我們從Notepad++開始吧。


環境設定:Notepad++ / Environment: Notepad++

2019-1003-161947.png

我是在Windows 7 64位元作業系統中使用Notepad++ 7.2.2版本。你可以選擇使用安裝版或可攜版的Notepad++,請下載並安裝,把它準備好吧。

安裝Combine外掛 / Install Combine plugin

2019-1003-162504.png

再來我們要為Notepad++安裝外掛。請開啟Notepad++,從工具列中的「外掛」進入「Plugin Manager > Show Plugin Manager」。

2019-1003-162658.png

開啟Plugin Manager (外掛管理器)後,預設會在「Available」(可安裝的外掛)頁籤裡面,請到Plugin(外掛)列表中找到「Combine」這個外掛,將它打勾。然後按下右下角的「Install」按鈕。

2019-1003-162943.png

Combine外掛會用到「combine.dll」檔案,但是Notepad++無法驗證它的安全性。實際使用的時候似乎是沒問題的,這時候請按下「Yes」即可。

2019-1003-163008.png

安裝完成之後,Plugin Manager會需要重新啟動Notepad++。請按「Yes」。

2019-1003-163102.png

重新啟動Notepad++後,我們就能在「外掛」底下看到「Combine」外掛的功能。這就表示Combine外掛安裝完成了。


合併檔案 / Combine files

接下來我們就一步一步來實作看看。

STEP 1. 準備檔案 / Prepare plain text files

2019-1003-163329.png

請將待合併的純文字檔案放到一個資料夾中。

STEP 2. 用Notepad++開啟舊檔 / Open files in Notepad++

2019-1003-163553.png

再來回到Notepad++中,打開「開啟舊檔」功能。

2019-1003-163744.png

選取要合併的檔案,然後按下「Open」(開啟)按鈕。

2019-1003-163812.png

這時候要合併的檔案會在Notepad++中開啟。

STEP 3. 合併檔案 / Combine files

2019-1003-164004.png

從工具列的「外掛」進入「Combine > Start」。

2019-1003-164114.png

這時候會顯示Combine外掛合併檔案的選項。這四個選項的意思是:

Before text: (在檔案之前)

  • Insert filename (是否插入檔案名稱)
  • Insert line (是否插入以「-----」構成的虛線水平線)

After text: (在檔案之後)

  • Insert line (是否插入以「-----」構成的虛線水平線)
  • Insert linefeed (是否插入換行)

這邊我們要勾選「Insert linefeed」這個選項,讓每個檔案合併時加入換行。然後按下「OK」。

2019-1003-161608.png

這時候Combine外掛就會把在Notepad++中開啟的檔案合併成一個新的檔案,這樣就合併完成了。

2019-1003-164451.png

你可以按工具列的「儲存檔案」按鈕,將合併的檔案儲存起來。這樣就做完了。


結語 / Wrap up

在Notepad++的Combine外掛中提供了很多選項,使用者可以依照待合併檔案的內容,以及希望的合併結果,來決定是否要開啟某些選項。舉例來說,如果每個純文字檔案的結尾都已經有換行,那就不必勾選「Insert linefeed」,直接合併即可。

使用Notepad++來合併純文字檔案最大的優勢在於它能夠正確處理不同編碼。我找過許多其他的檔案合併工具,但它們多半只是為了英文語系使用者開發,一遇到中文檔案就變成亂碼。相較之下,Notepad++在處理不同編碼的檔案時,一直表現得很好。我也很推薦大家用Notepad++把純文字檔案轉換成UTF-8編碼,請見「如何把純文字檔案轉換成UTF-8格式:使用Notepad++」這篇。

雖然網路上有很多用命令列就能完成的教學,但幾乎都不能額外加入換行的功能。而且命令列指令也容易忘記,每次要用都要回頭查詢,實在麻煩。

不過Notepad++的Combine外掛也半斤八兩,它的合併檔案其實是指合併在Notepad++開啟的檔案。第一次使用的時候,我還摸索了一陣子,所以才想要寫一下操作教學。

值得注意的是,Combine外掛只能合併在Notepad++中開啟的檔案,因此你的電腦必須先承受Notepad++開啟大量檔案的壓力,然後才能用Combine外掛來合併。我不確定用Notepad++來合併檔案的處理檔案上限在那裡,至少合併30幾個幾百K的小檔案,在我這臺記憶體有16GB的電腦上是完全沒問題。 如果真的要處理超級大的巨量資料,我想你還是撰寫程式語言,用串流(stream)的模式來處理檔案的合併吧。


那麼這次使用Notepad++合併純文字檔案的教學就到這裡了。寫到最後,我有些問題想問問大家:

  • 你有遇到過需要合併大量檔案的情況嗎?
  • 你通常需要合併什麼類型的檔案呢?
  • 在合併檔案時,你有用過其他工具嗎?

歡迎在下面的留言處跟我們分享你的想法。大家的意見是我繼續分享的動力喔!如果你覺得我這篇實用的話,請幫我在AddThis分享工具按讚、將這篇分享到Facebook等社群媒體吧!

感謝你的耐心閱讀,我是布丁,讓我們下一篇見。

總共5 則留言 ( 我要發問 , 隱藏留言 顯示留言 )

  1. # PowerShell
    $files = gci .\*.txt
    $files | ForEach-Object -Process { (Get-Content $_) >> .\newcombinefile.txt}

    回覆刪除
    回覆
    1. To dtcfyvgu:

      這個腳本會加上換行嗎?

      我很少用PowerShell
      比較常用Bash

      刪除
  2. 後來找到更簡單的做法,適用於Windows環境中:
    https://stackoverflow.com/questions/45652493/merging-text-files-in-bat-with-line-break-between-files/45652641#45652641

    指令:
    FOR %f IN (*.csv) DO type %f >> ..\newfile.csv & echo. >> ..\newfile.csv

    之後有機會再來寫一篇操作說明吧。

    回覆刪除
    回覆
    1. bash 作法也類似, 另外除了用 >> , 也及以重導向整個迴圈。

      ```
      for file in *
      do
      cat $file
      echo
      done > all.txt
      ```

      刪除
  3. 由於Google Drive更改連結的形式。本篇用到舊連結的檔案已經更新了分享連結,在此做個記錄。

    回覆刪除