Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / пробелы в содержимом строки ASE12.5.x / 9 сообщений из 9, страница 1 из 1
09.11.2007, 01:04
    #34926672
Kru
Kru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пробелы в содержимом строки ASE12.5.x
Такая ситуация - я выбираю фрагменты текстов процедур из syscomments, кладу их во временную таблицу и потом анализирую.

Например мне нужно отобрать все строки кода где переменная a numeric(9).
В тексте процедуры это может быть как a numeric(9) или a numeric (9) или a numeric( 9)
Соответственно в syscomments будут храниться все эти пробелы.
(Я не рассамтриваю случаи когда фраза разрывается и записывается в следующую строку )

В коде процедуры может быть declare a numeric(12), b numeric(9)

Если использовать like '%a%numeric%(%9%' то записи типа a numeric(12), b numeric(9) тоже будут выбраны.

Кажется, что единственный способ это убрать все пробелы и потом сравнивать
как like'%anumeric(9)%'

Вопрос - как это сделать?

str_replace(поле, ' ', null) like '%a=1%' не работает. Часть нежелательных записей всё равно проходят.

Дополнительный вопрос - может ли символ перевода строки храниться в текстовом поле?
Если да, то как его отловить?

Заранее всем огромное спасибо
...
Рейтинг: 0 / 0
09.11.2007, 13:47
    #34928138
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пробелы в содержимом строки ASE12.5.x
Kru пишет:
> Кажется, что единственный способ это убрать все пробелы и потом сравнивать
> как like'%anumeric(9)%'
> Вопрос - как это сделать?

Ну, можно написать хранимую процедуру, которая из строки все пробелы убирает.
Но я бы все же оставлял по одному пробелу, все же разделитель.
А то вы так 'n char(10)' от 'nchar(10)' не сможете отличить.
И еще - это было бы здорово делать регулярными выражениями.
Но ASE их не поддерживает. Может быть тогда лучше на клиенте ?

> Дополнительный вопрос - может ли символ перевода строки храниться в
> текстовом поле?
> Если да, то как его отловить?

Да, может, отловить - сравнить с char(10) или char(10) + char(13).
Но учтите, что это зависит от операционной системы.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
09.11.2007, 17:13
    #34929070
Kru
Kru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пробелы в содержимом строки ASE12.5.x
MasterZiv
Kru пишет:
> Кажется, что единственный способ это убрать все пробелы и потом сравнивать
> как like'%anumeric(9)%'
> Вопрос - как это сделать?

Ну, можно написать хранимую процедуру, которая из строки все пробелы убирает.
Но я бы все же оставлял по одному пробелу, все же разделитель.
А то вы так 'n char(10)' от 'nchar(10)' не сможете отличить.
И еще - это было бы здорово делать регулярными выражениями.
Но ASE их не поддерживает. Может быть тогда лучше на клиенте ?

На клиенте сделать не могу - среда не позволяет есть только DB Artisan.
Хранимка может решить проблему - если в ней отлавливать и прибивать все char(10), char(13) и потом удалять все пробелы. В моём конкретном случае нет nchar, но если бы был, то тогда, наверное нужно было бы сначала отловить все nchar, заменить их, скажем на ^nchar, потом удалить все пробелы и потом заменить ^ на пробел.

Но всётаки странно, почему в ASE нет стандартных средств для удаления пробелов.
Идеология?


MasterZiv
> Дополнительный вопрос - может ли символ перевода строки храниться в
> текстовом поле?
> Если да, то как его отловить?

Да, может, отловить - сравнить с char(10) или char(10) + char(13).
Но учтите, что это зависит от операционной системы.
Posted via ActualForum NNTP Server 1.4

Значит символы эти есть!!! и из-за них str_replace не работала.

Я пока проблему решил так - загнал все записи во временную таблицу.
Потом update table set field = str_replace(field,char(10),null), потом такой же update для char(13) и в конце для пробелов.

Вроде так работает.

Большое спасибо.
...
Рейтинг: 0 / 0
09.11.2007, 18:10
    #34929255
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пробелы в содержимом строки ASE12.5.x
если есть Артизан, то сделай экстакт процедур в файл и там уже пройдись хоть редактором, хоть программно чем-нить
...
Рейтинг: 0 / 0
09.11.2007, 20:25
    #34929476
Kru
Kru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пробелы в содержимом строки ASE12.5.x
komradесли есть Артизан, то сделай экстакт процедур в файл и там уже пройдись хоть редактором, хоть программно чем-нить

Можно было бы пойти по этому пути - но, если честно, у меня знаний не хватает.
- я не знаю как сделать в Artisan выгрузку каждого объекта в свой файл. Возможно ли это вообще?

Если все исследуемые объекты выгружать в один файл, то его потом придётся "пилить".
У меня нет никакого прикладного софта. Теоретически можно было бы написать скрипт на shell под Linux,
но я только только начал с Linux работать и на написание и отладку даже простой вещи у меня уйдёт гораздо больше времени, чем я могу себе позволить.
Попрошу не пинать меня за это. Так сложилось, что всю свою ITшную жизнь под виндой работал.

Поэтому я предпочёл syscomments и написал процедуру которая вылавливает нужные мне объекты.

В общем-то проблему с пробелами я решил, но как-то это решение сложным мне кажется.
Казалось бы делов-то, пробелы убрать. Поэтому и спросил, может есть какие-нибудь способы, если Sybase напрямую этого не позволяет.

Не хотелось велосипед изобретать.
...
Рейтинг: 0 / 0
09.11.2007, 20:41
    #34929494
Kru
Kru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пробелы в содержимом строки ASE12.5.x
komradесли есть Артизан, то сделай экстакт процедур в файл и там уже пройдись хоть редактором, хоть программно чем-нить

В Артизане есть поиск по базе данных, но он ищет с точностью до пробела.
Например если создать процедуру
create proc test
@num_fld numeric ( 9)
as
select @ca_id_nb

и попробовать запустить Database search для @num_fld numeric (9), то он ничего не найдёт.

Нельзя гарантировать, что в какой-то процедуре будут при декларации переменной лишние пробелы. Поэтому Артизаном придётся выгружать вообще все процедуры и потом уже вылавливать третьими средствами нужные фрагменты из этого огромного файла.
...
Рейтинг: 0 / 0
09.11.2007, 20:43
    #34929496
Kru
Kru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пробелы в содержимом строки ASE12.5.x
[quot Kru]Например если создать процедуру
create proc test
@num_fld numeric ( 9)
as
select @ca_id_nb
quot]

Редактор убрал мои лишние пробелы.

create proc test
@num_fld пробел пробел пробел... numeric пробел пробел ( пробел 9)
as
select @ca_id_nb
...
Рейтинг: 0 / 0
09.11.2007, 22:16
    #34929549
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пробелы в содержимом строки ASE12.5.x
KruПопрошу не пинать меня за это. Так сложилось, что всю свою ITшную жизнь под виндой работал.Во первых, это не оправдание, во вторых все что нужно есть и под виндой.
Например можно взять vbs, и на нем написать - подключаешься к базе, читаешь syscomments, получаешь резалтсет и на vbs-же разбираешь его. Для каждой очередной прочитанной строки резалтсета запускаешь регексп типа "\ba\b\s+numeric\s*\(\s*9\s*\)" если удовлетворил - записываешь эту строку в отдельный файл. Никаких временных таблиц не нужно.
...
Рейтинг: 0 / 0
12.11.2007, 19:42
    #34933622
Kru
Kru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пробелы в содержимом строки ASE12.5.x
White Owl KruПопрошу не пинать меня за это. Так сложилось, что всю свою ITшную жизнь под виндой работал.Во первых, это не оправдание, во вторых все что нужно есть и под виндой.
Например можно взять vbs, и на нем написать - подключаешься к базе, читаешь syscomments, получаешь резалтсет и на vbs-же разбираешь его. Для каждой очередной прочитанной строки резалтсета запускаешь регексп типа "\ba\b\s+numeric\s*\(\s*9\s*\)" если удовлетворил - записываешь эту строку в отдельный файл. Никаких временных таблиц не нужно.

Спасибо!
Я vbs никогда не пользовался. Почитаю доку, может он не хуже юниксовых скриптов будет.

Для этой конкретной задачи я всё-таки всё уже сделал на сервере БД, но подобных задач ещё много будет, так что удобный тул мне очень понадобится.

Ещё раз спасибо за идею
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / пробелы в содержимом строки ASE12.5.x / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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