这是我遇到的一个常见问题,我的解决scheme有点匆忙。 所以我正在寻找一个快速修复和问题的解释。
问题是,当我决定将一个电子表格保存在excel(mac 2011)中作为制表符分隔的文件时,它似乎完全正确。 直到我尝试使用Perl逐行parsing文件。 由于某种原因,它将整个文档整理成一行。
我粗暴的解决scheme是在Web浏览器中打开文件,并将信息复制并粘贴到文本编辑器中的制表符分隔文件中(我从不使用富文本格式)。 在尝试修复之前,我尝试在文件末尾添加换行符,但不能解决问题。
这里发生了什么? 一个解释将不胜感激。
UNIX:用换行符replace换行符,在EOF之前保留换行符
为什么在windows中换行符是2个字节?
使用Tectia从窗口传输文件到unix时如何删除ctrl M字符?
在windows / Java中反向换行
插入新行到bash提示
〜谢谢!〜
以二进制模式写入标准输出最简单的方法是什么?
如何做一个redirect到它的stringwhile循环
只有当它不存在时才添加一个换行符
使用JRuby在windows上编写Unix换行符
PHP的正则Expression式来限制新的行数最多两个
问题是在不同系统上定义新行的实际字符代码。 windows系统通常使用CarriageReturn + lineFeed(CRLF),而* NIX系统只使用lineFeed(LF)。
这些字符可以在RegEx中分别表示为 r n或 n (分别)。
有时候,要通过文本文件进行散列,您需要解析新行字符。 在perl下试试DOS-to-UNIX:
perl -pi -e 's/rn/n/g' input.file
或者,对于使用sed的 UNIX到DOS:
$ sed 's/$'"/`echo \r`/" input.txt > output.txt
或者,对于使用sed的 DOS到UNIX:
$ sed 's/^M$//' input.txt > output.txt
找到一个非常简单的解决方案。 将数据从Excel复制到剪贴板,粘贴到谷歌电子表格。 将Google电子表格文件下载为“制表符分隔值.tsv”。 这解决了这个问题,并且每行都有制表符分隔符。
Perl有一个有用的正则表达式模式R将匹配任何常见的行结束。 它实际上匹配任何垂直空格 – 与v相同 – 或CR LF组合,所以它与rn|v
这在这里很有用,因为你可以把你的整个文件变成一个标量,然后split /R/ ,这会给你一个已经chomp的文件记录列表(如果你想保留行结束符, split /RK/来代替
另一种选择是PerliO::eol模块。 它提供了一个新的Perl IO层,无论文件的内容是什么,都可以规范行尾
一旦你use PerliO::eol加载模块,你可以在open语句中使用它
open my $fh,'<:eol(LF)','myfile.tsv' or dIE $!;
也可以使用open杂注将其设置为所有输入文件句柄的默认层
use open IN => ':raw:eol(LF)';
这将从任何平台的输入文件工作正常
又一个解决方案…
对于制表符分隔文件,将文档另存为windows Formatted Text (.txt)文件类型
对于以逗号分隔的文件,将文档另存为“windows逗号分隔(.csv)”文件类型
总结以上是内存溢出为你收集整理的Excel保存不带换行符的制表符分隔文件(UNIX / Mac OS X)全部内容,希望文章能够帮你解决Excel保存不带换行符的制表符分隔文件(UNIX / Mac OS X)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)