2011年4月13日水曜日

SEには常識な作業効率化の小ネタを公開しようぜ【その1】(改行置換)

SE風味なことをやっていると、設計したり調整したりドキュメント書いたりダラダラ打ち合わせwする以外にも、障害発生時にDBでデータの調査をしたり、バックアップを取ったり、依頼を受けて簡単なスクリプト作ったり、あるいはソース書いたり、いろいろとありますよね。

で、そんな時SE風な人たちは至極面倒な作業であっても、それが「定型作業の繰り返し」であれば、ちょこちょこっと工夫して効率よくこなすことができますよね。
それ、隠してないで皆に公開しようぜっ!という話。
だから、SE風味なアナタはもう普段やっていることなので、「あぁ、改行置換の話ね」とスルーして仕事に戻ってください。

「改行」を置換して一気に整形

たとえばOracleで、テーブルの中身を項目指定して取得して、結果をCSV形式で保存したいようなシーンってよくありますよね?ね?「ある」って言いなさい。
(ごめん、ちょっと良い例がすぐ思いつかなくて)

さぁ!そんな時の作業手順としては、
(1)取得項目をズラズラっと列挙したSELECT文を書いて、
(2)SELECTの結果がCSV形式になるようにSELECT文に小細工して、
(3)SQL*Plusで実行(spoolで保存)
といった感じでしょうか。

このSQL文をなるべく効率よく作る時のようなシーンで活躍するのが、「改行」の置換です。よね?ね?

まずは、SELECT文で使用する取得項目を列挙するためにDESCRIBE。
例)
SQL> desc sample_tbl
USERID    CHAR(10)
NAME      VARCHAR2(80)
BIRTHDAY  DATE
SEX       NUMBER(1)
AGE       NUMBER(3)
NICKNAME  VARCHAR2(40)
上記の結果を矩形コピーして(Ctrl押しながら、あるいはAlt押しながら範囲選択すれば大抵できる)、項目だけをテキストエディタにコピペしたらCSVに出力したい項目だけ残して消します。

例A
USERID
NAME
BIRTHDAY
NICKNAME
これがSELECTで取得する項目になるわけですが、取得した結果がCSVとなるようにちょっと編集したい(上記(2)の作業)。
項目の間に「,」(カンマ)を入れ、Excelで開いても崩れないようにするために各項目を「"」(ダブルクォート)で囲うようにします。
要は、最終的にこんなSELECT文にしたい。

例B
SELECT
'"' || USERID || '",'
|| '"' || NAME || '",'
|| '"' || BIRTHDAY || '",'
|| '"' || NICKNAME '"'
FROM sample_tbl;

例Aから例Bをいかにサクっと作るか、そこで改行変換を活用。

例Aに対してザックリと以下のようにすれば例Bに近いものが出来上がりそうです。
・各行の終わりに『 || '",'』をくっつける
・各行の先頭に『|| '"' || 』をくっつける

つまり、各行の改行の前に『 || '",'』、改行の後ろに『|| '"' || 』をくっつければ良いわけです。
ではテキストエディタを使ってそのように変換しましょう。

秀丸、EmEditorといった定番テキストエディタに例Aが貼りつけられた状態で、「置換」(Ctrl+R)。
表示されたダイアログで検索(置換前)文字に『\n』、置換後の文字に『 || '",'\n|| '"' || 』を入れます。
「正規表現」にチェックを入れるのを忘れずに。

秀丸の例

これで「全置換」すると、あっという間に以下のようになります。
USERID|| '",'
|| '"' ||NAME|| '",'
|| '"' ||BIRTHDAY|| '",'
|| '"' ||NICKNAME|| '",'
|| '"' ||
ただ、このやり方だとこんな風に1行目と最終行が意図したものとは異なってしまうので、そこだけはチョチョイと手で編集(オイッ
後は先頭に「SELECT」、後ろに「FROM sample_tbl;」と付け足せば例BのSELECT文が完成。
たった4行だと手でやるのとあんまり変わりませんが、これが数十行、数百行単位になってくると効果絶大です。

ちなみにちょっと説明を付け足しておくと(SEさんには常識ですが)、「\n」というのがつまり「改行」を表しています。
その他、「\t」=「TAB」というのも結構使います(Excelのデータをテキストエディタにコピペすると、TAB区切りになりますからね)。



まぁ、さすがにちょっと例(OracleからCSV云々)がマニアックな内容だと思いますが、「改行を置換できる」ってことを覚えておくと役立つ場面は多いと思いますので、「なんだかマニアックだなぁ」とか思わずに、知らない人は是非一度お試しあれ。


次回は「Excelはコードエディタです」でも紹介しましょうか。

0 件のコメント: