![]() |
Получение массива из строки с числами
Есть строка следующего вида: "5-23,45,54,60-62" нужно создать массив из чисел от 5 до 23, 45, 54 и от 60 до 62. Т.е. аналог печати из Word, когда задаются диапазоны печати страниц. Признаюсь что я не силен в рег. выражениях, но чувствую что где то в них собака зарыта если кто быстро соображает помогите, пытаюсь сам одновременно разобраться. Нужно конечно еще и ошибки обрабатывать, должны быть только цифры, знаки "-" и "," а также при указании диапазона первая цифра меньше второй. (5-23 а не 23-5)
|
Я бы воспользовался таким алгоритмом:
1. Проверить строку на лишние символы и вырезать их. 2. Разбить строку по запятым StringSplit($str, ",") 3. Полученный массив обходим в цикле поэлементно и каждый элемент обрабатываем следующим образом: 3.1. Проверяем наличие дефиса в элементе. 3.2. Если дефиса нет, то просто копируем элемент в хранилище, скажем, $arr2. 3.3. Если дефис есть, то (предполагается, что пользователь не будет писать 5-20-40. Хотя можно потом и до такого расширять алгоритм): 3.4. Разбить строку по разделителю "дефис". 3.5. Проверить, чтобы 1 элемент был меньше второго. 3.6. В цикле от "1 элем" до "2 элем" создать последовательность чисел и записать в $arr2. |
хмм тоже вариант, и кажется более мне понятный, попробую набросать и выложить, только с первым пунктом не согласен, пускай пишут правильно, возможно пользователь перепутал "," с "." и если я удалю точку то получится к примеру из "3.5" не 3 и 5, а 35, что неверно
|
Вот так по алгоритму :):
Код:
#include <Array.au3> Не знаю почему, но у меня есть слабость к таким задачкам ![]() |
Время: 07:59. |
Время: 07:59.
© OSzone.net 2001-