|
|
|
Парсинг строки, замена символа подстроки
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток. Помогите решить задачу: Необходимо разбить строку вида 1308,"18402,6",2,"1,29,35,87,99",3,1 на колонки по разделителю - , НО значения в " необходимо считать одним целым. На выходе нужно получить: 1308 "18402,6" 2 "1,29,35,87,99" 3 1 Была идея вначале заменить все запятые в подстроке на ~, получилось бы 1308,"18402~6",2,"1~29~35~87~99",3,1, а затем по разделителю распарить - regexp_substr(str2, '[^,]+', 1, 1) , regexp_substr(str2, '[^,]+', 1, 2), ....... Буду очень признателен за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2017, 10:31 |
|
||
|
Парсинг строки, замена символа подстроки
|
|||
|---|---|---|---|
|
#18+
dantong, Лучше заменить ',"' и ''',' на ' "' и '" ' соответственно (IMHO) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2017, 10:47 |
|
||
|
Парсинг строки, замена символа подстроки
|
|||
|---|---|---|---|
|
#18+
это не столь важно, просто количество колонок может увеличиваться, и соответственно привязываться к количеству возможных вхождений " " не красиво, код будет огромным) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2017, 11:14 |
|
||
|
Парсинг строки, замена символа подстроки
|
|||
|---|---|---|---|
|
#18+
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2017, 11:15 |
|
||
|
Парсинг строки, замена символа подстроки
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2017, 11:34 |
|
||
|
Парсинг строки, замена символа подстроки
|
|||
|---|---|---|---|
|
#18+
AmKad, Для одной строки, данное решение подходит. Но для набора данных уже не отрабатывает: with s as (select '1308,"18402,6", " ", "", 2,"1,29,35,87,99",3,1' str from dual union all select '3,"18402,6", " ", "", 2,"1,29,35,87,99",3,1' str from dual ) select ltrim(regexp_substr(str, '("[^"]*"|(,| |^)[^", ]+)', 1, level), ' ,') sub from s connect by level <= regexp_count(str, '("[^"]*"|(,| |^)[^", ]+)'); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2017, 11:52 |
|
||
|
Парсинг строки, замена символа подстроки
|
|||
|---|---|---|---|
|
#18+
dantongНо для набора данных уже не отрабатываетТы не умеешь его готовить. Код: plsql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2017, 11:59 |
|
||
|
Парсинг строки, замена символа подстроки
|
|||
|---|---|---|---|
|
#18+
AmKad, Супер. сделал вот так: with s as ( select '1,,1308,"18402,6","","",2,"1,29,35,87,99",3,1' str from dual union all select '3,"18402,6","","",2,"1,29,35,87,99",3,1' str from dual ) select replace(ltrim(regexp_substr(replace(str,',,',',"",'),'("[^"]*"|(,| |^)[^", ]+)', 1, 1), ' ,'),'"','') col_1, replace(ltrim(regexp_substr(replace(str,',,',',"",'),'("[^"]*"|(,| |^)[^", ]+)', 1, 2), ' ,'),'"','') col_2, replace(ltrim(regexp_substr(replace(str,',,',',"",'),'("[^"]*"|(,| |^)[^", ]+)', 1, 3), ' ,'),'"','') col_3, replace(ltrim(regexp_substr(replace(str,',,',',"",'),'("[^"]*"|(,| |^)[^", ]+)', 1, 4), ' ,'),'"','') col_4, replace(ltrim(regexp_substr(replace(str,',,',',"",'),'("[^"]*"|(,| |^)[^", ]+)', 1, 5), ' ,'),'"','') col_5, replace(ltrim(regexp_substr(replace(str,',,',',"",'),'("[^"]*"|(,| |^)[^", ]+)', 1, 6), ' ,'),'"','') col_6, replace(ltrim(regexp_substr(replace(str,',,',',"",'),'("[^"]*"|(,| |^)[^", ]+)', 1, 7), ' ,'),'"','') col_7, replace(ltrim(regexp_substr(replace(str,',,',',"",'),'("[^"]*"|(,| |^)[^", ]+)', 1, 8), ' ,'),'"','') col_8, replace(ltrim(regexp_substr(replace(str,',,',',"",'),'("[^"]*"|(,| |^)[^", ]+)', 1, 9), ' ,'),'"','') col_9, replace(ltrim(regexp_substr(replace(str,',,',',"",'),'("[^"]*"|(,| |^)[^", ]+)', 1, 10), ' ,'),'"','') col_10 from s; Спасибо за регулярку, я что-то долго тупил над ней) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2017, 12:08 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39387503&tid=1886624]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
194ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 248ms |
| total: | 527ms |

| 0 / 0 |
