On-line: гостей 2. Всего: 2 [подробнее..]
АвторСообщение
администратор




Пост N: 5423
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 24.12.15 14:13. Заголовок: [?] Строку в массив (Разминка перед новым годом)


Есть строка вида 1,2,456,77
Или 1c2_456(77
Разделитель между цифрами может быть любой (кроме цифры разумеется)
Надо преобразовать строку в числовой массив вида {1,2,456,77}
Есть идеи ?

PS
Решение я уже знаю , хочется посмотреть и другие подходы.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 11 [только новые]


постоянный участник




Пост N: 4629
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 24.12.15 14:33. Заголовок: aDim := HB_ATokens(..


aDim := HB_ATokens(cStr,",",.F.,.F.)

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5424
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 24.12.15 14:37. Заголовок: Andrey пишет: aDim ..


Andrey пишет:

 цитата:
aDim := HB_ATokens(cStr,",",.F.,.F.)


Неа не верно. Проверь на строке 1c2_456(77

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4630
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 24.12.15 14:47. Заголовок: Dima пишет: Неа не ..


Dima пишет:

 цитата:
Неа не верно. Проверь на строке 1c2_456(77


Сделай перед этим
FOR nI := 1 TO 255
IF nI <=48 .OR. nI > 59
ELSE
STRTRAN(cStr,CHR(nI),";")
ENDIF
NEXT
STRTRAN(cStr,":",";")


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 732
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 24.12.15 14:55. Заголовок: Andrey пишет: Сдела..


Andrey пишет:

 цитата:
Сделай перед этим
FOR nI := 1 TO 255



так не годится - так из строки "1xxx2zzz3...4" в массиве будет
{1,,,,2,,,,3,,,,4} а надо {1,2,3,4}




Спасибо: 0 
ПрофильЦитата Ответить



Не зарегистрирован
Зарегистрирован: 24.12.15
ссылка на сообщение  Отправлено: 24.12.15 15:15. Заголовок: aNumbers := hb_Regex..


aNumbers := hb_RegexSplit("[^0-9]+",cTestString)

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 1
Зарегистрирован: 24.12.15
ссылка на сообщение  Отправлено: 24.12.15 15:16. Заголовок: или "\D"..


или "\D" вместо "[^0-9]" )))

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 733
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 24.12.15 15:16. Заголовок: Vlad69 пишет: aNumb..


Vlad69 пишет:

 цитата:
aNumbers := hb_RegexSplit("[^0-9]+",cTestString)



в точку
это самый короткий и правильно работающий код

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5425
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 24.12.15 16:23. Заголовок: Haz пишет: в точку ..


Haz пишет:

 цитата:
в точку


Да , так и есть !

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5426
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 24.12.15 17:06. Заголовок: Vlad69 пишет: или &..


Vlad69 пишет:

 цитата:
или "\D" вместо "[^0-9]" )))


Все красиво пока нет пробелов
На такой строке c:="1c 2_456(77 "
вернет {"1", "", "2", "456", "77","",""}
наверное это косяк Harbour , так как маска "[^0-9]" означает любой не цифровой символ а
за пробел разрабы забыли :)

Поэтому сделать можно так
 
Func strtoArrayn(c)
local ams:=hb_regexSplit( '\D', c )
local ret:={}
if len(ams)#0
aeval(ams,{|x| iif(!empty(x), aadd(ret,val(x)),"") })
endif
return ret


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 2
Зарегистрирован: 24.12.15
ссылка на сообщение  Отправлено: 24.12.15 17:40. Заголовок: Пробелы в середине у..


Пробелы в середине убираются через "\D+", хвостовые - тривиальным Alltrim )))

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5427
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 24.12.15 17:49. Заголовок: Vlad69 Понятно. Спа..


Vlad69
Понятно. Спасибо.
Оставлю пожалуй код без изменений :)

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 686
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет