当我没有可以使用的分隔符时,Perl将一条线分成不同长度的碎片是一种好方法.我的数据按列长度组织,因此第一个变量位于1-4位,第二个变量位于5-15位等.有许多变量各有不同的长度.
换句话说,有没有办法根据字符串中的位置使用split函数,而不是匹配的表达式?
谢谢.
Zai*_*aid 25
就在这里.该unpack函数非常适合处理固定宽度的记录.
my $record = "1234ABCDEFGHIJK";
my @fields = unpack 'A4A11', $record; # 1st field is 4 chars long, 2nd is 11
print "@fields"; # Prints '1234 ABCDEFGHIJK'
Run Code Online (Sandbox Code Playgroud)
第一个参数是模板,它告诉unpack字段开始和结束的位置.第二个参数告诉它要解压缩的字符串.
unpack也可以通过指定空字节来告诉它忽略字符串中的字符位置x.该模板'A4x2A9'可用于忽略"AB"上述示例中的内容.
请参阅perldoc -f pack并perldoc perlpacktut获取深入的详细信息和示例.
而不是使用split,尝试老式substr方法:
my $first = substr($input, 0, 4);
my $second = substr($input, 5, 10);
# etc...
Run Code Online (Sandbox Code Playgroud)
(我也喜欢unpack方法,但是如果你只解析几个字段,那么在不查阅文档的情况下,substr更容易编写.)
| 归档时间: |
|
| 查看次数: |
602 次 |
| 最近记录: |