2014-02-26 105 views
13

這是一個常見的問題,我和我的解決方案是有點傲慢。所以我正在尋找解決問題的快速解決方案。Excel保存製表符分隔的文件,而無需換行(UNIX/MAC OS X)

的問題是,當我決定要在Excel中保存(MAC 2011)爲製表符分隔的文件,似乎這樣做完全沒有電子表格。直到我嘗試使用Perl逐行解析文件。出於某種原因,它將整個文檔整理成一行。

我的野蠻的解決辦法是打開一個網頁瀏覽器的文件,複製並粘貼信息轉換成文本編輯的製表符分隔的文件(我從來沒有使用富文本格式)。我嘗試在修復之前在文件末尾引入一個換行符,但它不能解決問題。

這是怎麼回事?一個解釋將不勝感激。

〜謝謝!〜

+0

輸出中的換行符是什麼,以及您期望的是哪些? '\ n','\ r'或'\ r \ n'?如果輸出包含'\ n'行結尾(Unix中的標準),並且您實際上期待Windows行結尾處出現'\ r \ n',則可能會出現此問題。請檢查實際存在的內容。 – amon

+0

當我使用'less'時,我看到這個字符'^ M' – IMPERATOR

+1

我討厭微軟的另一個原因。 –

回答

10

問題是在不同系統上定義新行的實際字符代碼。 Windows系統通常使用CarriageReturn + LineFeed(CRLF),* NIX系統僅使用LineFeed(LF)。

這些字符可以用RegEx表示爲\ r \ n\ n(分別)。

有時候,通過哈希一個文本文件,你需要解析換行符。嘗試此DOS到UNIX的perl的

perl -pi -e 's/\r\n/\n/g' input.file 

,或者使用UNIX到DOS的sed的

$ sed 's/$'"/`echo \\\r`/" input.txt > output.txt 

,或者使用DOS到UNIX的sed

$ sed 's/^M$//' input.txt > output.txt 
+0

我在想如何這可能會導致他的問題,我不明白它如何。我懷疑他會去* Windows。 –

+0

我住在UNIX和Mac電腦上。我已經完成了perl修復,它工作了!謝謝!但是,你知道Excel是否可以保存爲UNIX格式化的文檔?我爲Mac使用Excel 2011,所以你會認爲它應該能夠做到這一點。 – IMPERATOR

+0

我的猜測是,微軟沒有包含/啓用該功能,試圖最大限度地提高與基於Windows的Office產品的兼容性。 – epluribusunix

4

找到了一個非常簡單的解決方案。將數據從Excel複製到剪貼板,並將其粘貼到Google電子表格中。將Google電子表格文件下載爲「製表符分隔值.tsv」。這解決了這個問題,並且每行都有製表符分隔符。

+0

不是一個解決方案,只是一個解決辦法。 – Borodin

+0

同樣,在Mac版Excel中,您可以通過在Excel中複製所有內容並粘貼到Sublime Text中來解決此問題。保存該文件,換行符正確形成。 – safay

1

Perl有一個有用的正則表達式模式\R它可以匹配任何常見的行結尾。實際上,它匹配任何垂直空白 - 一樣\v - 或CR LF組合,所以它的同\r\n|\v

這是這裏有用的,因爲你可以發出聲音的整個文件到一個標,然後split /\R/,其中會給你一個文件記錄列表,如果你想保留行終止符,你可以改爲split /\R\K/而不是

另一個選項是PerlIO::eol模塊。它提供了將正常化行結尾不管什麼文件的內容是

一旦您已加載模塊與use PerlIO::eol您可以在open語句中使用一個新的Perl的IO層

open my $fh, '<:eol(LF)', 'myfile.tsv' or die $!; 

,或者你可以使用open編譯將其設置爲所有輸入文件的默認層處理

use open IN => ':raw:eol(LF)'; 

這將很好地工作的輸入文件從任何平臺

2

又一解決方案...

  • 爲製表符分隔的文件,該文件保存爲Windows Formatted Text (.txt)文件類型
  • 一個逗號分隔的文件,該文件保存爲`的Windows逗號分隔( .csv)'文件類型
相關問題