|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Получение массива из строки с числами |
|
Получение массива из строки с числами
|
Пользователь Сообщения: 61 |
Профиль | Отправить PM | Цитировать Есть строка следующего вида: "5-23,45,54,60-62" нужно создать массив из чисел от 5 до 23, 45, 54 и от 60 до 62. Т.е. аналог печати из Word, когда задаются диапазоны печати страниц. Признаюсь что я не силен в рег. выражениях, но чувствую что где то в них собака зарыта если кто быстро соображает помогите, пытаюсь сам одновременно разобраться. Нужно конечно еще и ошибки обрабатывать, должны быть только цифры, знаки "-" и "," а также при указании диапазона первая цифра меньше второй. (5-23 а не 23-5)
|
|
Отправлено: 20:03, 10-09-2009 |
Кот Ти Сообщения: 7318
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать хмм тоже вариант, и кажется более мне понятный, попробую набросать и выложить, только с первым пунктом не согласен, пускай пишут правильно, возможно пользователь перепутал "," с "." и если я удалю точку то получится к примеру из "3.5" не 3 и 5, а 35, что неверно
|
Отправлено: 20:34, 10-09-2009 | #3 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить 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 Не знаю почему, но у меня есть слабость к таким задачкам |
------- Отправлено: 00:08, 11-09-2009 | #4 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|