Форум программистов, компьютерный форум, киберфорум
Perl
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/63: Рейтинг темы: голосов - 63, средняя оценка - 4.83
3 / 3 / 1
Регистрация: 18.10.2009
Сообщений: 83
1

Разделить строку, используя split

12.04.2011, 18:17. Показов 11604. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Прошу помощи в регулярном выражении. Надо его использовать в функции split как разделитель.

Задача: отделить по четыре символа из строки в каждую "ячейку" массива.
То есть: разбить эту строку: 1111222233334444555566667777888899990000
Вот так: 1111 2222 3333 4444 5555 6666 7777 8888 9999 0000
и поместить полученное в каждую "ячейку" массива отдельно.

Я написал так:
Perl
1
2
$num="1111222233334444555566667777888899990000";
@arrnum=split("(.{4})",$num2);
но получилось, что массив @arrnum записал это в себя только по четным ячейкам, то есть:
Perl
1
2
3
4
5
6
7
@arrnum[0] # пустой
@arrnum[1] # 1111
@arrnum[2] # пустой
@arrnum[3] # 2222
@arrnum[4] # пустой
@arrnum[5] # 3333
# и т.д.
почему так произошло, и как правильно написать?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.04.2011, 18:17
Ответы с готовыми решениями:

Метод Split, разделить строку на слова и каждое передать в функцию
Здравствуйте, подскажите пожалуйста как решить проблему. Есть исходная строка например,...

Как разделить строку на подстроки, без использования функции Split
Подскажите, как разделить строку на подстроки, без использования метода Split. Есть идеи что...

Для каждой строки, разделить строку в список слов с использованием split() и append()
Для каждой строки, разделить строку в список слов с использованием сплит () функцию. Программа...

Разбить строку по делиметру, используя Split
Подскажите пожалуйста, как разбить строку по вхождению. Нужно разбить через Split() Делаю так: ...

4
654 / 352 / 113
Регистрация: 11.12.2009
Сообщений: 508
12.04.2011, 18:40 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

А зачем вам split? Можно обойтись и без него:
Perl
1
2
3
4
$num="1111222233334444555566667777888899990000";
@arrnum=$num=~/.{1,4}/g; #чтобы если в конце осталось меньше 4-х символов, то они тоже добавились
$,="\n";
print @arrnum;
1
3 / 3 / 1
Регистрация: 18.10.2009
Сообщений: 83
12.04.2011, 18:44  [ТС] 3
ухтыы), спасибо,
незнал что так можно, я только учу perl), хороший язык)
0
5986 / 1995 / 323
Регистрация: 10.12.2013
Сообщений: 6,878
19.08.2017, 21:57 4
РУБРИКА: ЛИСТАЯ СТАРЫЕ СТРАНИЦЫ

язык-то хороший, а в данном случае эффективнее всего использовать unpack:
Perl
1
@arrnum = unpack '( a[4] )*', $num

Цитата Сообщение от blase
Perl
1
@arrnum=split("(.{4})",$num2);
но получилось, что массив @arrnum записал это в себя только по четным ячейкам, то есть:@arrnum[0] # пустой
Perl
1
2
3
4
5
6
@arrnum[1] # 1111[SIZE="3"][/SIZE]
@arrnum[2] # пустой
@arrnum[3] # 2222
@arrnum[4] # пустой
@arrnum[5] # 3333
# и т.д.
почему так произошло, и как правильно написать?
что касается вопроса почему так произошло,
то тут всё дело в захватывающих скобках,
которые для regex-аргумента split не нужны.

Если бы скобок не было, вернуть он должен был массив из значений undefined
( напоминаю, что split - это функция, возвращающая несовпадающие фрагменты,
то есть, для строки '12+34+56' и аргументом у split '+', вернутся несовпадающие с '+' фрагменты:
12, 34, 56. А для аргумента у split /./ вернутся 9 значений undefined ).

Но скобки были, поэтому в выходной массив попали и собственно захваченные сепараторы 1111, 2222, 3333 итд.

Строго говоря, если вернуться к моему примеру
@array = split /./, "12+34+56"
то никакие undefined в массив бы не вернулись, поскольку хвостовые undefined холодно выбрасывает сам split.
Вернулся бы просто пустой массив.
Чтобы они вернулись, надо было бы использовать трёхаргументную форму с отрицательным счётчиком:
@array = split /./, "12+34+56", -1
Миниатюры
Разделить строку, используя split  
0
5986 / 1995 / 323
Регистрация: 10.12.2013
Сообщений: 6,878
19.08.2017, 22:06 5
Да, а в начале-то надо было написать следующее:

функция split для задачи blase совсем не нужна.
0
19.08.2017, 22:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.08.2017, 22:06
Помогаю со студенческими работами здесь

Как разделить строку используя сплит
Приветствую уважаемые форумчане. Как разбить такую строку "Иванов И.И. преподаватель" на две...

Разделить строку на слова, используя указатели
Помогите, пожалуйста, сделать программу. Ввести произвольное предложение с клавиатуры, слова...

Разделить строку используя регулярные выражения
Всем привет. Помогите с таким вопросом. Имеется предложение Мама, ax ax,, мыла раму...

Как разделить строку на разделители используя StringBuffer?
как разделить строку на разделители используя StringBuffer?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru