powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Разбор строки
10 сообщений из 10, страница 1 из 1
Разбор строки
    #39949375
lehakarlov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, уважаемые форумчане!
Помогите, пожалуйста, разобраться.
Есть строка, в которой данные разделены знаком "|". Т.е. строка выглядит примерно так:
текст1|текст2|число1|число2... и так далее (после каждого разделителя указывает определенный атрибут документа).
Мне нужно всегда брать лишь некоторые части из строки, заключенные внутри разделителя |.
Т.е. завожу несколько переменных, в первой, например, будет храниться часть строки между 3 и 4 разделителями, в следующей переменной между 7 и 8 разделителями.
Я понимаю, что удобнее всего использовать regexp_substr, но еще не успел разобраться с его синтаксисом. Подскажите, пожалуйста, или ткните, куда смотреть. Всем заранее спасибо.
...
Рейтинг: 0 / 0
Разбор строки
    #39949379
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решение задачи не требует regexp
...
Рейтинг: 0 / 0
Разбор строки
    #39949382
lehakarlov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous, каким, в таком случае, по Вашему мнению, будет оптимальный способ?
...
Рейтинг: 0 / 0
Разбор строки
    #39949389
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lehakarlov
оптимальный способ?

Оптимальный, как всегда, зависит от конкретного контекста.
...
Рейтинг: 0 / 0
Разбор строки
    #39949391
lehakarlov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous, контекст следующий: есть строка, в которой между знаками разделителя | находятся атрибуты одного объекта.
Количество разделителей в строки всегда фиксированное. Также неизменный порядок данных в этой строке, которые мне нужно извлечь.
Если уж совсем близко к моей реальной задаче, то нужно вычленить дату между 1 и 2 разделителями, потом числа между 7 и 8, и 10 и 11.
Я думал завести три переменные и в них поместить результаты моих regexp-ов.
...
Рейтинг: 0 / 0
Разбор строки
    #39949397
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lehakarlov

Если уж совсем близко к моей реальной задаче, то нужно вычленить дату между 1 и 2 разделителями, потом числа между 7 и 8, и 10 и 11.

Вопрос в использовании. К примеру, если оно надо в select - предложил бы табличную функцию, внутри которой за один проход по строке формировал бы все необходимые атрибуты. Если внутри pl/sql, то можно сделать аналогичную функцию, возвращающую record.
Сам парсинг прост до безобразия - instr ищет очередное вхождение разделителя от текущей позиции, substr дает подстроку.
...
Рейтинг: 0 / 0
Разбор строки
    #39949398
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lehakarlov
Я понимаю, что удобнее всего использовать regexp_substr, но еще не успел разобраться с его синтаксисом. Подскажите, пожалуйста, или ткните, куда смотреть. Всем заранее спасибо.

Особенности национальной рыбалкиСначала на червя, потом плавно переходим на блесну, а потом уж... другие способы ловли. Динамит, например. Электроудочка
смотри на substr/instr
...
Рейтинг: 0 / 0
Разбор строки
    #39949403
lehakarlov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сам разбор строки происходит в цикле.
Думаю, substr/instr - как раз то, что мне нужно. Попробую. Всем спасибо за помощь!
...
Рейтинг: 0 / 0
Разбор строки
    #39949419
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример с external table.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
create table ttt (col1 varchar(100), col2 varchar(100), col3 varchar(100))

ORGANIZATION EXTERNAL 
(
  TYPE ORACLE_LOADER DEFAULT DIRECTORY TEMP
  ACCESS PARAMETERS 
  (
    RECORDS DELIMITED BY NEWLINE 
    badfile 'test.bad'
    discardfile 'test.dis'
    logfile 'test.log'
    FIELDS TERMINATED BY '|' OPTIONALLY ENCLOSED by '"'
  )
  LOCATION ('test.txt')
)


REJECT LIMIT UNLIMITED;
...
Рейтинг: 0 / 0
Разбор строки
    #39949437
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmdmdm
Пример с external table.


зачем
банально instr
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SQL> ed
Wrote file afiedt.buf

  1* select substr(s,instr(s,'|',2)+1,instr(s,'|',1,3)-instr(s,'|',1,2)-1) p2 from (select '|123|456|78|9|' s from dual)
SQL> /

P2
---
456



.....
stax
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Разбор строки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]