「欄轉逗號分隔清單」工具,會把一段每行一個值的直向文字,轉換成單一一串以逗號分隔的序列。這種轉換的安全版本,會把每個值都用雙引號括起來,並把值中原本就存在的雙引號加倍,因此像 Smith, Jane 這樣的名字,會維持是一個項目,而不會在逗號處被拆成兩個欄位。這款以瀏覽器為基礎的Column to Comma Separated List工具,預設就會套用這種加引號的做法,每次貼上最多接受 500,000 個字元與 10,000 行,並在本機處理貼上的內容,不會傳送到伺服器。這種引號處理、明確的清理開關,加上可見的輸出數量,正是一款謹慎的清單轉換工具,與一個會弄亂值內逗號的簡單尋找取代功能之間的差別。這樣的輸出,適合用在 CSV 風格加引號才是正確格式的貼上目的地:試算表匯入、逗號分隔的設定檔、標籤清單、投標人或供應商識別碼、標案參考代碼,以及其他你能掌控目的地、並能確認其語法的類似小規模逐行資料集。

這項轉換實際上必須解決什麼問題
一份直向清單看起來是最簡單不過的輸入內容。困難的地方不在於把各行接在一起;而在於當這些值本身就含有分隔符號所使用的相同標點符號時,如何讓值維持完整。像「Smith, Jane」這樣一行,本身就已經含有一個逗號,因此只單純替換換行符號的簡陋做法,會產生一個序列,讓這一個名字無法與兩個相鄰的項目區分開來。同樣的問題也出現在雙引號上:像 6" bolt 這樣的描述,在嚴格的 CSV 讀取器中,會被解析成一個開始了加引號欄位、卻從未關閉的值。一款知道自己正在產生 CSV 輸出的工具,必須同時逸出這兩種字元,而一款追求結果可預期的工具,會對每一個值都套用這種逸出處理,而不是自行猜測哪些值才需要。
這項轉換必須解決的另一個問題,是換行符號的混亂。從試算表複製出來的欄位,可能是 Windows 的 CRLF、純 Unix 的 LF,也可能是某些舊資料中仍會出現、更早期的純歸位字元(carriage-return-only)形式。這款工具三種格式都接受,因此同一次貼上動作,不會因為換行類型不對而悄悄漏掉某些值。清理開關(去除多餘空格、移除空白行、去除重複值)接著會以固定的順序執行,因此顯示出來的數量是可重現的,而不會取決於你最後記得勾選了哪一個核取方塊。
把一欄資料轉換成逗號分隔清單
- 把每行一個值的內容,貼進輸入框中。如果你的來源是試算表的一欄,請先把標題列拿掉,因為對這款轉換工具來說,標題只是另一個值而已。決定你是否想去除前後多餘空格、移除空白行,或合併重複值;每個開關都會依這個順序執行,結果數量會在執行後更新。
- 如果任何值可能含有逗號或雙引號,請保持 CSV 加引號功能開啟,這也是預設狀態。選取「轉換欄位」按鈕。這款工具會依 CRLF、CR 或 LF 分割貼上的內容,套用所選的篩選條件,接著要嘛把每個保留下來的值都用雙引號括起來(並將內含的引號加倍),要嘛在關閉加引號功能時,用逗號加空格連接各個值。
- 檢視顯示出來的值數量,並與你預期的資料列數量做比對。掃視輸出結果,找出任何看起來過短或標點符號不太對勁的值,對照原始那一行,並且只在數量吻合之後才使用「複製結果」按鈕。把結果貼到一個能顯示欄位邊界的目的地(例如試算表匯入對話框或 CSV 檢視器),是最快速的端對端檢查方式。
這個介面不會要求你選擇資料庫方言、SQL 版本,或任何 shell 逸出規則,因為這些都不屬於單純 CSV 轉換的一部分。如需針對同一流程的更深入說明,安全轉換一欄資料的逐步指南會更詳細地說明同樣這些開關。
CSV 加引號 vs. 純逗號加空格輸出
目前提供兩種輸出模式,而在兩者之間做選擇,其實是在決定目的地接下來要怎麼處理這串序列。
| 輸出模式 | 產生的內容 | 最適合用在 | 當值含有逗號或「"」時的風險 |
|---|---|---|---|
| 為每個值加上 CSV 引號(預設) | 每個值都用雙引號括起來;內含的雙引號會加倍 | 試算表匯入、CSV 檔案、含標點符號的標籤清單,以及任何嚴格 CSV 讀取器會解析的內容 | 無:值內的逗號與引號都會保留在加引號的欄位內 |
| 純逗號加空格連接 | 以「, 」連接各個值,不加任何外層引號 | 簡短的敘述性清單、電子郵件中的句子,以及加引號會顯得雜亂的文件內容 | 高:含有逗號的值會讓欄位被拆開;含有雙引號的值會讓之後任何嘗試解析這串字串的程式感到困惑 |
純文字模式在螢幕上讀起來比較快,而這也是它唯一真正的優點。對任何之後會被重新解析回獨立值的目的地來說,加引號的形式都是比較安全的選擇,這款工具也預設保持開啟,並附上提醒,讓一個看起來乾淨的輸出結果,不會悄悄地毀掉結構化資料。
去除空格、空白行與去重複:每個開關做了什麼
這三個清理開關看起來可以互換,但它們會以特定的順序執行,並針對不同種類的混亂情況。
| 開關 | 對每一行的影響 | 執行順序 | 需要留意的地方 |
|---|---|---|---|
| 去除前後多餘空格 | 去除每一行開頭與結尾的空格 | 第一步 | 值內部的空格不受影響;「San Jose」會維持「San Jose」,不會被壓縮成「SanJose」 |
| 移除空白行 | 在去除多餘空格步驟執行完後,丟棄任何變成空的行 | 第二步 | 一旦去除多餘空格的步驟執行完畢,只包含空白字元的行也會被視為空白行 |
| 移除重複值 | 保留每個值第一次出現的那一筆,捨棄之後完全相符的重複項 | 第三步 | 比對區分大小寫:Apple 與 apple 會維持是兩個不同的值,因為悄悄合併它們可能會改變識別碼、產品代碼或名稱 |
對於標案參考代碼、供應商識別碼、從 CRM 貼出來的電子郵件地址,以及其他任何一個多餘的空白、複製動作留下的空行,或重複匯入一次的項目都會悄悄改變結果的資料集,把三個開關全部打開是正確的起點。當重複值本身有意義時(例如一份投標金額清單,同一個數字可能出現在多行中),則關閉去重複功能,只依賴去除多餘空格與移除空白行。
驗證數量並檢查對標點符號敏感的項目
每次執行後,輸出框都會回報確切的值數量,而這個數字是檢查清理開關是否真的按你預期執行的最佳單一依據。預期的數量應該是來源資料列數,扣掉空白行(如果你開啟了那個開關),再扣掉重複值(如果你開啟了那個開關),如果數字對不上,通常指向三種情況之一:貼上前沒有先移除的標題列、在去除多餘空格步驟執行前看起來像一個值的尾隨空白,或是本應保持獨立、卻被誤合併的重複項。
一旦數量吻合,接下來要檢查的就是標點符號。掃視輸出結果,找出任何含有逗號或雙引號的值,並確認它已經被雙引號括起來,且內部的引號已經加倍。像 Smith, Jane 這樣的名字,應該顯示為 "Smith, Jane";像 6" bolt 這樣的度量,則應該顯示為 "6"" bolt",內含的引號明顯加倍。如果目的地是能識別 CSV 格式的應用程式,加引號的形式就是你想要的;如果你之後需要不加引號的形式,可以關閉 CSV 加引號功能並重新執行,然後再次檢查數量,因為值的清單不會改變,但顯示出來的序列會改變。
這種輸出適用於哪些場合,以及該改用其他工具的場合
這種輸出格式,是為了能理解 CSV 風格加引號的目的地而設計的:需要分隔檔案的試算表匯入、以 INI 或 CSV 格式撰寫的設定檔、以逗號分隔字串作為標準格式的標籤欄位,以及任何你只是單純需要把一份清單整理成一行的手動輸入情境。對於標案 ID、供應商名稱、產品代碼,或網域清單等小規模逐行資料集來說,只要你能掌控輸出的使用方式,並能在貼上後確認語法,這就是正確的工具。
但它並不適合用在 SQL 值、JSON 字串、URL 參數清單,或 shell 指令參數上。這些目的地各自有自己的加引號與逸出規則,在 CSV 雙引號內安全的值,並不會自動在單引號包起來的 SQL 字面值、JSON 字串,或是可能需要對反斜線、錢字號或空格做不同處理的 shell 參數中同樣安全。這款工具不會嘗試去猜測這些目的地,因為猜錯反而會毀損資料。遇到這些情況時,請改用針對特定目的地的格式化工具,以及具備參數綁定意識的 SQL 工作流程,接著再以同樣的方式重新驗證輸出:計算項目數量、檢查任何含有分隔符號的項目,並確認目的地能把它們正確解析回原本的欄位數。
如果你還在權衡選項,Compare Two Lists for Differences From Excel對此有詳細說明。