2017-05-31 50 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

相關問題