首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将行写入二进制文件

将行写入二进制文件
EN

Stack Overflow用户
提问于 2021-05-31 16:57:10
回答 2查看 263关注 0票数 7

我正在进一步玩Raku的CommaIDE,我想逐行打印一个二进制文件。我试过了,但没用:

代码语言:javascript
复制
for "G.txt".IO.lines -> $line {
    say $_;
    }

我该怎么修呢?这显然是不正确的。

编辑--这也不起作用,请参阅下面的片段

代码语言:javascript
复制
for "G.txt".IO.lines -> $line {
    say $line;
    }

EN

回答 2

Stack Overflow用户

发布于 2021-06-07 18:17:50

您向我们展示了h.raku,但是逗号给了您一个关于c.raku的错误,这是逗号项目中的其他文件。

看起来你在处理一个文本文件,而不是二进制文件。Raku在这里做了一个明确的区分:无论编码如何,文本文件都被视为文本。如果是UTF-8,现在使用.lines应该会很好,因为这是默认的。如果是其他编码,可以调用.lines(:enc<some-other-encoding>)。如果它是真正的二进制,那么“行”的概念实际上没有任何意义,您需要更像.slurp(:bin)的东西,这将为您在字节级别上工作提供一个Buf[uint8]

票数 6
EN

Stack Overflow用户

发布于 2021-06-01 23:10:53

这个问题特别提到读取二进制文件,根据文件的不同,按行读取可能(或不可能)有意义。

下面的代码可以直接从文档中读取二进制文件(使用 IO::CatHandle):

代码语言:javascript
复制
~$ raku -e '(my $f1 = "foo".IO).spurt: "A\nB\nC\n"; (my $f2 = "foo"); with IO::CatHandle.new: $f2 {.encoding: Nil; .slurp.say;};'
    Buf[uint8]:0x<41 0A 42 0A 43 0A>

与使用默认编码(utf8)读取文件相比:

代码语言:javascript
复制
~$ raku -e '(my $f1 = "foo".IO).spurt: "A\nB\nC\n"; (my $f2 = "foo"); with IO::CatHandle.new: $f2 {.slurp.say;};'
    A
    B
    C

请参阅:https://docs.raku.org/routine/encoding

注意:read方法使用 IO::Handle,默认情况下读取二进制。因此,代码很简单:

代码语言:javascript
复制
~$ raku -e '(my $file1 = "foo".IO).spurt: "A\nB\nC\n"; my $file2 = "foo".IO; given $file2.open { .read.say; .close;};'
Buf[uint8]:0x<41 0A 42 0A 43 0A>

请参阅:https://docs.raku.org/type/IO::Handle#method_read

有关进一步阅读,请参阅对Perl5 5的<>钻石-等效于Raku的讨论:

https://docs.raku.org/language/5to6-nutshell#while_until

...and的一些(旧的)邮件列表讨论相同:

https://www.nntp.perl.org/group/perl.perl6.users/2018/11/msg6295.html

最后,文档在这里编写了一个混合的utf8 8/二进制文件(对于进一步的测试很有用):https://docs.raku.org/routine/encoding#Examples

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67777736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档