Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Получение массива из строки с числами

Ответить
Настройки темы
Получение массива из строки с числами

Пользователь


Сообщения: 61
Благодарности: 0

Профиль | Отправить PM | Цитировать


Есть строка следующего вида: "5-23,45,54,60-62" нужно создать массив из чисел от 5 до 23, 45, 54 и от 60 до 62. Т.е. аналог печати из Word, когда задаются диапазоны печати страниц. Признаюсь что я не силен в рег. выражениях, но чувствую что где то в них собака зарыта если кто быстро соображает помогите, пытаюсь сам одновременно разобраться. Нужно конечно еще и ошибки обрабатывать, должны быть только цифры, знаки "-" и "," а также при указании диапазона первая цифра меньше второй. (5-23 а не 23-5)

Отправлено: 20:03, 10-09-2009

 

Аватара для Coutty

Кот Ти


Сообщения: 7318
Благодарности: 1204

Профиль | Отправить PM | Цитировать


Я бы воспользовался таким алгоритмом:
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.
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:12, 10-09-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 61
Благодарности: 0

Профиль | Отправить PM | Цитировать


хмм тоже вариант, и кажется более мне понятный, попробую набросать и выложить, только с первым пунктом не согласен, пускай пишут правильно, возможно пользователь перепутал "," с "." и если я удалю точку то получится к примеру из "3.5" не 3 и 5, а 35, что неверно

Отправлено: 20:34, 10-09-2009 | #3


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Вот так по алгоритму :

Код: Выделить весь код
#include <Array.au3>

$sVar = "5-23,45,54,60-62"

$aRange_Array = _GetRangeNumbersArray($sVar)

_ArrayDisplay($aRange_Array)

Func _GetRangeNumbersArray($sString, $sStr_Delim=",", $sRange_Delim="-")
    Local $aStr_Split = StringSplit($sString, $sStr_Delim)
    Local $aRetArr[1], $aRange_Split, $iFor, $iTo

    For $i = 1 To $aStr_Split[0]
        If StringInStr($aStr_Split[$i], $sRange_Delim) Then
            $aRange_Split = StringSplit($aStr_Split[$i], $sRange_Delim)

            $iFor = Number($aRange_Split[1])
            $iTo = Number($aRange_Split[$aRange_Split[0]])

            For $j = $iFor To $iTo ;От первого к последнему
                $aRetArr[0] += 1
                ReDim $aRetArr[$aRetArr[0]+1]

                $aRetArr[$aRetArr[0]] = $j
            Next
        Else
            $aRetArr[0] += 1
            ReDim $aRetArr[$aRetArr[0]+1]

            $aRetArr[$aRetArr[0]] = $aStr_Split[$i]
        EndIf
    Next

    Return $aRetArr
EndFunc
P.S
Не знаю почему, но у меня есть слабость к таким задачкам

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 00:08, 11-09-2009 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Получение массива из строки с числами

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
C/C++ - заполнение массива Lisiy_egik Программирование и базы данных 18 20-11-2009 14:58
MySQL - Автозамена строки из другой строки - trigger? procedure ? BugZZ Программирование и базы данных 0 18-09-2009 09:51
[решено] StringRegExp: Получение массива где каждый элемент содержит Ini-секцию Creat0R AutoIt 9 28-08-2009 07:52
.NET - [решено] Получение массива ячеек для объединения Delirium Программирование и базы данных 10 29-07-2009 06:49
C/C++ - операции с 12-разрядными числами .::.DIMA.::. Программирование и базы данных 14 17-03-2009 17:50




 
Переход