2017-05-31 47 views
0

我需要使用Perl(v5.10)来处理来自其他应用程序的字符串,其中嵌入了空格,逗号和其他非字母数字字符的八进制值。如何使用Perl转换混合字符串中的八进制字符值?

例如:这个 - “11624 \ 0040SE \ 00405th \ 0040St \ 0054 \ 0040Suite \ 0040100”,应该是 - “11624 SE 5th St,Suite 100”。

我可以使用“echo -e”在Linux命令行中完成所需的工作,但我需要能够在Perl脚本中进行处理和操作。

axiar @ formdev $回声-e “11624 \ 0040SE \ 00405th \ 0040St \ 0054 \ 0040Suite \ 0040100”

11624 SE五街,套房100

我看了字符串::逃生模块,但它似乎并没有做我认为应该做的。

use String::Escape qw(backslash unbackslash); 
my $strval="11624\0040SE\00405th\0040St\0054\0040Suite\0040100"; 
my $output=unbackslash($strval); 
printf("%s\n",$strval); 
printf("%s\n",$output); 

我已经做了很多谷歌和堆栈溢出搜索类似的问题/答案,但尚未遇到任何。

您的专家协助,将不胜感激。

回答

0

这种类型的事情一般是很容易在一个正则表达式的事情:

$ perl -E 'say shift =~ s[\\0([0-7]{1,3})][chr oct $1]egr' '11624\0040SE\00405th\0040St\0054\0040Suite\0040100' 11624 SE 5th St, Suite 100

可能更容易的方式。

+0

它看起来像八进制部分总是3个字符长,所以我会将'\\ 0([0-7] {1,3})'改为'\\ 0([0-7] {3} )'而不是。 – AntonH

+0

非常感谢!像Perl正则表达式一样工作。我确实与SW供应商进行了确认,八进制数将始终为3位数,所以我采用了AntonH的建议。但是,感谢你们两位! – SteveHeineck

相关问题