Вы можете использовать групповой подход.
Dim wb_name as String
wb_name = Range("A1").Value & ".****"
Set wb = Workbooks(wb_name)
Для этих regexes:
m/\015\012/ms m/\015\012/s
И/m и/s бессмысленны.
.
соответствие \n
также. Ваш regex не содержит .
^
и $
соответствие рядом со встроенным \n
в строке. Ваш regex содержит нет ^
ни $
, или их синонимы.То, что возможно, действительно, если Ваш входной дескриптор (снабжают сокетом?) работает в текстовом режиме, \r
(\015
) символы будут удалены в Windows.
Так, что сделать? Я предлагаю делать \015
дополнительные символы, и разделенные против
/\015?\012/
Никакая потребность в/m,/s или даже продвижении m//
. Это - просто грузовой культ.
Нет никакого волшебства \n
. Оба \n
и \r
всегда имейте в виду точно один символ, и на всех основанных на ASCII платформах, который является \cJ
и \cM
соответственно. (Исключениями являются платформы EBCDIC (по очевидным причинам) и Классик MacOS (где \n
и \r
оба имеют в виду \cM
).)
Волшебство, которое происходит в Windows, состоит в том, что при выполнении ввода-вывода через дескриптор файла, который отмечен как являющийся в текстовом режиме, \r\n
переводится в \n
после чтения и наоборот после записи. (Кроме того, \cZ
взят для значения конца файла – удивление!) Это сделано на слое библиотеки времени выполнения C.
Вы должны binmode
Ваш сокет для фиксации этого.
Необходимо также удалить /s
и /m
модификаторы от Вашего шаблона: так как Вы не используете метасимволы, поведение которых они изменяют (.
и ^
/$
пара, соответственно), они ничего не делают – грузовой культ.
Почему Вы добавляли /m
? Вы пытаетесь разделить на строке? Сделать это с /m
необходимо использовать также ^
или $
в regex:
my @lines = split /^/m, $big_string;
Однако, если Вы хотите рассматривать большую строку как строки, просто открыть дескриптор файла на ссылке на скаляр:
open my $string_fh, '<', \ $big_string;
while( <$string_fh> ) {
... process a line
}