【问题标题】:remove CR or LF or CRLF after reading file读取文件后删除 CR 或 LF 或 CRLF
【发布时间】:2013-09-29 11:07:24
【问题描述】:

J中,读入一个文本文件后,如何摆脱那些CRLFCRLF,然后我可以使用".而不得到spelling error

【问题讨论】:

    标签: j


    【解决方案1】:

    使用freads 动词将强制行结尾为LF。如果您使用的是 J6 或更早版本,则需要先加载 files script (load 'files'),否则 freads 可作为标准库的一部分使用。然后正如 Eelvex 建议的那样,cut ;. 更具体地说,;._2 可用于使用字符串中的最后一个字符(在本例中为 LF)作为分隔符来划分文件的行:

       _99&".;._2 freads 'myfile.txt'
    

    最好使用Numbers(二元".)将文字转换为数字,而不是Do(一元".)。这避免了文件中“执行”代码的潜在安全问题,并将正确转换更多变体,比较以下:

       ". '45 -34'        NB. monadic ".
    11
       _99 ". '45 -34'    NB. dyadic ".
    45 _34
    

    您可能会发现以下更快:

       _99 ". ];._2 freads 'myfile.txt'
    

    Numbers 一次作用于整个数组,而不是单独作用于每一行。

    【讨论】:

    • 兴趣点:freads 的二元形式可以为您将文件分成几行(在封面下使用;.)。例如,'b' freads 'filename.ext' 将每一行放入自己的“盒子”(适用于不规则长度的行),'m' freads 'filename.ext'];._2 的事情,即制作数据的“矩阵”(这对常规数据,例如 OP 的数字表)。
    • 但不知何故,当我像在/:~ (_99 ". ];._2 freads 'myfile.txt') 中那样做时,我仍然得到输出4 2 3。请告诉我为什么?
    • 在不知道文件内容的情况下,很难知道输出应该是什么,或者为什么它不是您所期望的。您能否显示您尝试阅读的文件的一小段摘录?
    • 文件内容为4 2 3,加减这些CR or LF or CRLF。我不能上传文件,否则会更容易
    • 请注意5 + _99 ". ];._2 freads 'myfile.txt' 应该返回9 7 8,因此我们已经成功解决了您的行尾问题。您现在遇到的问题与输出的形状以及排序的工作方式有关。 /:~ 将对数组中的项目进行排序。输出的形状是1 3。 IOW 你有一个二维数组(一个有 1 行/项目的表),所以 sort 正确排序了表的项目(行)。试试/:~ , _99". ];._2 freads 'myfile.txt'
    【解决方案2】:

    cut;. 使用最后一项(品格 |2)——这应该是你的 CR/LF——同时删除此项(品格 _2)。

    a =: 0 : 0      NB. a =: (1!:1)<filename
    1 2 3 4
    5 6 7 8
    )
    
    *: ".;._2 a
     1  4  9 16
    25 36 49 64
    

    【讨论】:

    • 但不知何故,当我在 /:~ (".;._2 'myfile.txt') 中那样做时,我仍然得到输出 4 2 3。请告诉我为什么?
    猜你喜欢
    • 2019-08-06
    • 2020-02-02
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多