Замените числа буквами в части строки в списке через запятую в Perl - PullRequest
0 голосов
/ 08 января 2019

Если у меня есть файл, разделенный запятыми длиной 10 числовых строк (например, 0001010101), и я хочу переформатировать строку, чтобы заменить два последних символа каждой строки буквой, где 01 равно A, и так что до 26 будет Z каков лучший способ сделать это в Perl?

Пример содержимого файла:

0109150103,1807111225,0305102306

Выходные данные будут:

01091501C,18071112Y,03051023F

Предположим, я бы разделил строку на массив, а затем оценил каждую, чтобы посмотреть последние 2 цифры с помощью substr и заменить их соответствующей буквой. Хотите знать, какой самый эффективный способ сделать это порок, ищет, если 01, а затем установить A, и так далее.

Я бы сделал грубую силу, как:

$data=<file.txt>;
@tokens=split /,/,$data;
while(@tokens)
{
 print substr($_,0,7)."A," if(substr($_,8,2)=='01');
 print substr($_,0,7)."B," if(substr($_,8,2)=='02');
#.
#.
 print substr($_,0,7)."Z," if(substr($_,8,2)=='26');
}

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Другой Perl!

$ echo "0109150103,1807111225,0305102306" | perl -ne ' while(/(.+?)(..)(,|$)/g) { print "$1",chr(64+$2),"\n" } '
01091501C
18071112Y
03051023F
$

добавление раствора Миллера

echo "0109150103,1807111225,0305102306" | perl -pE 's/(\d\d)(?!\d)/chr(64+$1)/ge'
0 голосов
/ 08 января 2019

Можно использовать chr

echo "0109150103,1807111225,0305102306" | 
    perl -wnE'@t = split /,/; s/(..)$/chr(64+$1)/e for @t; say for @t'

, где модификатор /e делает заменяемую часть в регулярном выражении как код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...