Perl区分文件换行符类型

这篇具有很好参考价值的文章主要介绍了Perl区分文件换行符类型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

在Windows上使用Perl判断文件时何种换行符时,处理CR LF类型的换行符时,也识别成了LF。

思路

  1. Windows上的换行是 CRLF , Unix上是 LF , Mac CR
  2. 在Windows平台使用Perl读取文件创建文件句柄时,未对file handler设置binmode,了解到binmode模型作用是采用非二进制读取模式时,双字节换行符CR LF在读取时转换为LF,写入时将LF转换为CR LF。这对于使用双字节分隔文本文件行的操作系统(MS-DOS)至关重要,但对使用单个字符的操作系统(Unix,Mac OS,QNX)没有影响。
  3. chomp是去除每行行末的记录分隔符(record separator),这个分隔符的值是可以通过 perl内置变量 $/ (input record separators )来设置,默认情况下Windows和Linux上 $/ 的值都是 LF

处理

所以Perl脚本在读取DOS文本时,行末换行符CR LF 被自动转行成 LF ,此后去判断单行记录时,返回结果均是LF,未能正确识别出文件的换行符类型,基于此原因。修改代码如下(测试)

#!/usr/bin/perl

use strict;

my $path = '/export/script/perl_scripts';

my @files = qw /a.txt b.txt/;

my $newLine = '';

for my $f (@files)
{
    my $fullPath = sprintf "%s/%s",$path,$f;

    # 获取首行
    open(INFILE,$fullPath) or die "dont open this file ${fullPath}";

    # 此函数设置在操作系统上以二进制形式读取和写入FILEHANDLE的格式。
    # 采用非二进制读取模式时,双字节换行符CR LF在读取时转换为LF,写入时将LF转换为CR LF。
    # 这对于使用双字节分隔文本文件行的操作系统(MS-DOS)至关重要,但对使用单个字符的操作系统(Unix,Mac OS,QNX)没有影响。
    binmode(INFILE); # 设置二进制读取模式,保留文件中的原始换行符
    my $line = <INFILE>;
    close INFILE;

    if($line =~ '\r\n')
    {
        $newLine = 'CRLF';
        print "windows newline\n";
    }elsif($line =~ '\n')
    {
        $newLine = 'LF';
        print "linux newline\n";
    }elsif($line =~ '\r')
    {
        $newLine = 'CR';
        print "mac newline\n";
    }else
    {
        print "is a single line without newline\n";
    }
    print "${fullPath} newline is ${newLine}\n";

    # 采用如下去除换行符方式,替换chomp方法,可在任意平台处理任意换行符类型的文件
    $line =~ s/[\r\n]+\Z//g;

}
## 运行结果如下
# linux newline
# /export/script/perl_scripts/a.txt newline is LF
# windows newline
# /export/script/perl_scripts/b.txt newline is CRLF

思路源自:https://blog.csdn.net/fibonaccian/article/details/42168725文章来源地址https://www.toymoban.com/news/detail-730540.html

到了这里,关于Perl区分文件换行符类型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • git忽略换行符

    在 Git 仓库内配置 .git/info/attributes 文件 可以在 Git 仓库中新建一个名为 .git/info/attributes 的文件,并配置以下代码: 这样配置后,Git 就会将所有文件自动识别为文本文件,同时忽略换行符的变化。而且这种做法的好处在于,这个文件是在 Git 仓库内部定义,不会被共享提交到

    2024年02月13日
    浏览(47)
  • windows中的换行符

    用连续两个换行符来分隔文本 Regex reg = new Regex(@\\\"nn\\\"); string[] s = reg.Split(this.richtextbox1.text); 结果正常 Regex reg = new Regex(@\\\"nn\\\"); string[] s = reg.Split(System.IO.File.ReadAllText(txtfilepath)); 没有达到分割效果 所以稳定起见改成Regex reg = new Regex(@\\\"(nn)|(rnrn)\\\");就OK了

    2023年04月09日
    浏览(52)
  • Git 中换行符问题处理

    实习入职第一周就中遇到了一个问题,代码中新增了 shell 脚本,但是放到服务器上执行时,发生了 shell 脚本执行错误,这个是由于不同 OS 系统换行符不同而引起的问题,导致DolphinScheduler调度任务失败,在此记录。 r (return):表示回车,就是回到本行的行首 n (newline):表示

    2024年02月03日
    浏览(43)
  • notepad++去除换行符和空格

    在notepad++中按Ctrl+h 1.去除换行符 输入如图所示的查找内容为rn,【替换为】不填写,勾选底部的【正则表达式】,然后点击【全部替换】 2. 按照逗号换行 输入如图所示的查找内容为,,【替换为】rn,勾选底部的【正则表达式】,然后点击【全部替换】   2.去除空格 在替换

    2024年02月12日
    浏览(85)
  • pycharm、idea、golang等JetBrains其他IDE修改行分隔符(换行符)、在Git CRLF、LF 换行符转换

    一般来说,不同的开发环境和项目对换行格式的使用偏好不同: Windows平台 - 常用rn换行格式,因为这是Windows系统默认的换行方式。 Linux/Unix平台 - 更倾向于使用n换行格式,这是Linux/Unix系统的默认换行方式。 Mac OS - 早期使用r,但现代Mac也更常用n。 统一换行格式可以减少版本控

    2024年02月13日
    浏览(79)
  • Python如何换行】:使用换行符来实现多行代码的编写和阅读

    在Python中,有时候我们需要编写较长的代码行,为了提高可读性和美观性,我们可以使用换行符来将代码分成多行。下面我将详细介绍如何在Python中实现换行,并提供相应的源代码示例。 在Python中,我们可以使用反斜杠()作为换行符。当我们在一行代码中使用反斜杠作为

    2024年02月06日
    浏览(49)
  • go字符串去除首尾所有换行符

    原创不易,如果对你有帮助,欢迎给作者点个赞哦! 一键开启舒适、快捷: 调用: 效果:

    2024年02月13日
    浏览(49)
  • 在 Python 中打印换行符——打印一个新行

    在编程中处理字符串或文本数据经常涉及打印换行符。一行的结尾由换行符表示,它还会将光标前进到下一行的开头。使用转义字符 \\\" n ”,我们可以在 Python 中打印换行符。 其他编程语言可能有不同的打印换行符的规则。 了解 Windows 中的轻松访问中心 虽然某些语言可能具

    2024年02月05日
    浏览(49)
  • EXCEl——移除单元格中换行符

    方法一:使用清除格式功能 步骤如下: 1.选中需要取消换行的单元格 2.在“开始\\\"选项卡中找到\\\"清除”功能,点击下拉菜单中的“清除格式\\\" 3.这时单元格的换行就被取消了。 清除前效果图 清除后效果图 方法一:使用函数功能 步骤如下: 1.在一个空白单元格内输入函数=SUBSTIT

    2024年02月16日
    浏览(66)
  • sql中查找、修改、替换换行符和回车符

    在数据库里查询换行符和回车符我们用 ascii码 10和13,即 chr(10)为换行符,chr(13)为回车符 查询出来后进行修改、替换 

    2024年02月15日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包