Разрезание строки в Perl - PullRequest
       1

Разрезание строки в Perl

1 голос
/ 22 февраля 2011

У меня в Perl есть строка длиной 23 цифры. Мне нужно разрезать его на части. Первые 2 цифры в одной переменной, следующие 3 в другой переменной, следующие 4 в другую переменную и т. Д. В основном 23 цифры должны заканчиваться как 6 отдельных переменных (2,3,4,4,3,7) символов, в этом порядок.

Любые идеи, как я могу разрезать строку как это?

Ответы [ 5 ]

8 голосов
/ 23 февраля 2011

Есть много способов сделать это, но самый короткий, вероятно, распаковать :

my $string = '1' x 23;
my @values = unpack 'A2A3A4A4A3A7', $string;

Если вам нужны отдельные переменные, вы можете использовать присвоение списка:

my ($v1, $v2, $v3, $v4, $v5, $v6) = unpack 'A2A3A4A4A3A7', $string;
2 голосов
/ 22 февраля 2011

Расширяя метод Алекса, вместо того, чтобы указывать каждое начало и конец, используйте список длин, который вы дали.

#!/usr/bin/env perl

use strict;
use warnings;

my $string = "abcdefghijklmnopqrstuvw";
my $pos = 0;
my @split = map { 
  my $start = $pos; 
  my $end = $_;
  $pos += $end;
  substr( $string, $start, $end);
} (2,3,4,4,3,7);

print "$_\n" for @split;

Это говорит о том, что вы, вероятно, должны смотреть на unpack, который используется для полей фиксированной ширины.У меня нет опыта с этим, хотя.

1 голос
/ 22 февраля 2011

Вы можете использовать регулярное выражение, а именно:

$string =~ /\d{2}\d{3}\d{4}\d{4}\d{3}\d{7}/

и захватить каждую часть, заключив в скобки ().

Затем вы найдете каждый захват в переменных $ 1, $ 2 ..или получить их все в возвращенном списке

См. perldoc perlre

0 голосов
/ 23 февраля 2011

Вот саб, который это сделает, используя уже обсужденный unpack.

sub string_slices { 
    my $str = shift;
    return unpack( join( 'A', '', @_ ), $str );
}
0 голосов
/ 22 февраля 2011

Вы хотите использовать perldoc substr .

$substring = substr($string, $start, $length);

Я бы также использовал `map 'в списке пар [начало, длина], чтобы сделать вашу жизнь проще:

$string = "123456789";
@values = map {substr($string, $_->[0], $_->[1])} ([1, 3], [4, 2] , ...);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...