Во время написания скриптов приходилось постоянно брать данные и немного их видоизменять. Вручную это делать для десятка полей, конечно же, лениво, да и нерационально. А помочь нам в этом может Notepad++ с возможностью использовать регулярные выражения.
По традиции. периодически забрасываемой, выпишу сюда эти полезные фишечки, хотя их будет мало, я уже забыть успела, что я вчера использовала.
Итак, есть схема создания некой таблички
CREATE TABLE test (
field_01 NUMBER,
field_02 DATE,
field_03 VARCHAR2(50 byte),
field_04 NUMBER,
field_05 VARCHAR2(100 byte),
field_06 VARCHAR2(100 byte),
field_07 CHAR(100 byte),
field_08 VARCHAR2(100 byte),
field_09 VARCHAR2(100 byte)
);
Нам надо взять все эти поля и переложить в табличку test_data.
Ищем и заменяем:
Примеры написаны в стиле
SELECT (
По традиции. периодически забрасываемой, выпишу сюда эти полезные фишечки, хотя их будет мало, я уже забыть успела, что я вчера использовала.
Итак, есть схема создания некой таблички
CREATE TABLE test (
field_01 NUMBER,
field_02 DATE,
field_03 VARCHAR2(50 byte),
field_04 NUMBER,
field_05 VARCHAR2(100 byte),
field_06 VARCHAR2(100 byte),
field_07 CHAR(100 byte),
field_08 VARCHAR2(100 byte),
field_09 VARCHAR2(100 byte)
);
Нам надо взять все эти поля и переложить в табличку test_data.
Ищем и заменяем:
Примеры написаны в стиле
- Find - то, что ищем
- Replace - то, на что заменяем
Поехали, большинство замен шли в режиме регулярных выражений:
- VARCHAR2\(.* byte\),
- ,
Тут важно помнить о том, что скобки надо заэкранировать, иначе результат будет нулевой.
Также убираем CHAR и NUMBER, последнюю строку вручную, ну или убрать потом из find запятую. Дата:
- \sDATE
- пусто
Тут, опять же, важно не забыть про "\s", иначе по закону подлости, обязательно найдутся поля вида field_date_2, а оттуда нам вырезать ничего не надо.
Отлично, все вырезали, получили примерно так
SELECT (
field_01 ,
field_02 ,
field_03 ,
field_04 ,
field_05 ,
field_06 ,
field_07 ,
field_08 ,
field_09
)...;
field_02 ,
field_03 ,
field_04 ,
field_05 ,
field_06 ,
field_07 ,
field_08 ,
field_09
)...;
А теперь мы хотим сметчить эти поля в test_data и test. И получить что-то типа
WHEN MATCHED THEN
UPDATE
SET b.field = ab.field
Только для всех полей. Ок, сначала удаляем все пробелы
- \s
- пусто
Потом пишем
- (.*),
- b.\1 = ab.\1,
Тут, опять же, важно помнить, что в поле replace мы для подстановки группы из регулярного выражения должны писать "\", а не "$".
Ну и наконец, простейший пример
Нам надо взять названия наших филдов
field_01 ,
field_02 ,
field_03 ,
field_04 ,
field_05 ,
field_06 ,
field_07 ,
field_08 ,
field_09
field_02 ,
field_03 ,
field_04 ,
field_05 ,
field_06 ,
field_07 ,
field_08 ,
field_09
И переложить в одну строку, чтобы потом добавить в файл с тестовыми данными. Казалось бы, элементарно
- $
- пусто
Но тут возникает проблема - блокнот находит конец строки, и даже типа делает замену, только внешний вид текста не меняется. Что делать? Переключаем на расширенный режим (Extended) и вводим
- \r\n
- пусто
Такие вот небольшие примеры из жизни тестировщика, подготавливающего тестовые данные
Комментариев нет:
Отправить комментарий