在Perl中,当我从文件中读取它时,我可以限制一行的长度(比如fgets
发布时间:2020-12-15 21:42:20 所属栏目:大数据 来源:网络整理
导读:我正在尝试编写一段代码,逐行读取文件并存储每行,最多可存储一定数量的输入数据.我想防止最终用户变得邪恶,除了防止吸入异常大的文件之外,还要把一些数据放在一行上.做$str = FILE仍然会读完整行,这可能会很长,并且会让我记忆犹新. fgets允许我通过让我在每
我正在尝试编写一段代码,逐行读取文件并存储每行,最多可存储一定数量的输入数据.我想防止最终用户变得邪恶,除了防止吸入异常大的文件之外,还要把一些数据放在一行上.做$str =< FILE>仍然会读完整行,这可能会很长,并且会让我记忆犹新.
fgets允许我通过让我在每次调用期间指定要读取的字节数来实现这一点,并且基本上让我将一条长行拆分为我的最大长度.在perl中有类似的方法吗?我看到了关于sv_gets的一些内容,但我不确定如何使用它(尽管我只是粗略的谷歌搜索). 本练习的目的是避免在读取数据后进行额外的解析/缓冲. fgets在N个字节后或达到换行符时停止. 编辑我觉得我很困惑.我想读取X行,每行最大长度为Y.我不想读取超过Z字节的总数,我宁愿不一次读取所有Z字节.我想我可以这样做并分割线,但想知道是否还有其他方法.如果这是最好的方法,那么使用read函数和手动解析是我最容易的选择. 谢谢. 解决方法
Perl没有内置的fgets,但
File::GetLineMaxLength实现了它.
如果你想自己做,那对getc非常简单. sub fgets { my($fh,$limit) = @_; my($char,$str); for(1..$limit) { my $char = getc $fh; last unless defined $char; $str .= $char; last if $char eq "n"; } return $str; } 将每个字符连接到$str是有效的,因为Perl会机会性地重新分配.如果Perl字符串有16个字节并且你连接另一个字符,Perl会将它重新分配为32个字节(32个转到64,64到128 ……)并记住长度.接下来的15个连接不需要重新分配内存或调用strlen. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |