Автор | Сообщение |
|
| |
Пост N: 5423
Зарегистрирован: 17.05.05
|
|
Отправлено: 24.12.15 14:13. Заголовок: [?] Строку в массив (Разминка перед новым годом)
Есть строка вида 1,2,456,77 Или 1c2_456(77 Разделитель между цифрами может быть любой (кроме цифры разумеется) Надо преобразовать строку в числовой массив вида {1,2,456,77} Есть идеи ? PS Решение я уже знаю , хочется посмотреть и другие подходы.
|
|
|
Ответов - 11
[только новые]
|
|
|
| постоянный участник
|
Пост N: 4629
Зарегистрирован: 12.09.06
|
|
Отправлено: 24.12.15 14:33. Заголовок: aDim := HB_ATokens(..
aDim := HB_ATokens(cStr,",",.F.,.F.)
|
|
|
|
| |
Пост N: 5424
Зарегистрирован: 17.05.05
|
|
Отправлено: 24.12.15 14:37. Заголовок: Andrey пишет: aDim ..
Andrey пишет: цитата: | aDim := HB_ATokens(cStr,",",.F.,.F.) |
| Неа не верно. Проверь на строке 1c2_456(77
|
|
|
|
| постоянный участник
|
Пост 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,":",";")
|
|
|
|
| |
Пост 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}
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 24.12.15
|
|
Отправлено: 24.12.15 15:15. Заголовок: aNumbers := hb_Regex..
aNumbers := hb_RegexSplit("[^0-9]+",cTestString)
|
|
|
|
| |
Пост N: 1
Зарегистрирован: 24.12.15
|
|
Отправлено: 24.12.15 15:16. Заголовок: или "\D"..
или "\D" вместо "[^0-9]" )))
|
|
|
|
| |
Пост N: 733
Зарегистрирован: 20.02.11
|
|
Отправлено: 24.12.15 15:16. Заголовок: Vlad69 пишет: aNumb..
Vlad69 пишет: цитата: | aNumbers := hb_RegexSplit("[^0-9]+",cTestString) |
| в точку это самый короткий и правильно работающий код
|
|
|
|
| |
Пост N: 5425
Зарегистрирован: 17.05.05
|
|
Отправлено: 24.12.15 16:23. Заголовок: Haz пишет: в точку ..
Haz пишет: Да , так и есть !
|
|
|
|
| |
Пост 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
|
|
|
|
| |
Пост N: 2
Зарегистрирован: 24.12.15
|
|
Отправлено: 24.12.15 17:40. Заголовок: Пробелы в середине у..
Пробелы в середине убираются через "\D+", хвостовые - тривиальным Alltrim )))
|
|
|
|
| |
Пост N: 5427
Зарегистрирован: 17.05.05
|
|
Отправлено: 24.12.15 17:49. Заголовок: Vlad69 Понятно. Спа..
Vlad69 Понятно. Спасибо. Оставлю пожалуй код без изменений :)
|
|
|
|