で、そんな時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に出力したい項目だけ残して消します。USERID CHAR(10)
NAME VARCHAR2(80)
BIRTHDAY DATE
SEX NUMBER(1)
AGE NUMBER(3)
NICKNAME VARCHAR2(40)
例A
USERID
NAME
BIRTHDAY
NICKNAME
これがSELECTで取得する項目になるわけですが、取得した結果がCSVとなるようにちょっと編集したい(上記(2)の作業)。NAME
BIRTHDAY
NICKNAME
項目の間に「,」(カンマ)を入れ、Excelで開いても崩れないようにするために各項目を「"」(ダブルクォート)で囲うようにします。
要は、最終的にこんなSELECT文にしたい。
例B
SELECT
'"' || USERID || '",'
|| '"' || NAME || '",'
|| '"' || BIRTHDAY || '",'
|| '"' || NICKNAME '"'
FROM sample_tbl;
'"' || USERID || '",'
|| '"' || NAME || '",'
|| '"' || BIRTHDAY || '",'
|| '"' || NICKNAME '"'
FROM sample_tbl;
例Aから例Bをいかにサクっと作るか、そこで改行変換を活用。
例Aに対してザックリと以下のようにすれば例Bに近いものが出来上がりそうです。
・各行の終わりに『 || '",'』をくっつける
・各行の先頭に『|| '"' || 』をくっつける
つまり、各行の改行の前に『 || '",'』、改行の後ろに『|| '"' || 』をくっつければ良いわけです。
ではテキストエディタを使ってそのように変換しましょう。
秀丸、EmEditorといった定番テキストエディタに例Aが貼りつけられた状態で、「置換」(Ctrl+R)。
表示されたダイアログで検索(置換前)文字に『\n』、置換後の文字に『 || '",'\n|| '"' || 』を入れます。
「正規表現」にチェックを入れるのを忘れずに。
秀丸の例
これで「全置換」すると、あっという間に以下のようになります。
USERID|| '",'
|| '"' ||NAME|| '",'
|| '"' ||BIRTHDAY|| '",'
|| '"' ||NICKNAME|| '",'
|| '"' ||
ただ、このやり方だとこんな風に1行目と最終行が意図したものとは異なってしまうので、そこだけはチョチョイと手で編集(オイッ|| '"' ||NAME|| '",'
|| '"' ||BIRTHDAY|| '",'
|| '"' ||NICKNAME|| '",'
|| '"' ||
後は先頭に「SELECT」、後ろに「FROM sample_tbl;」と付け足せば例BのSELECT文が完成。
たった4行だと手でやるのとあんまり変わりませんが、これが数十行、数百行単位になってくると効果絶大です。
ちなみにちょっと説明を付け足しておくと(SEさんには常識ですが)、「\n」というのがつまり「改行」を表しています。
その他、「\t」=「TAB」というのも結構使います(Excelのデータをテキストエディタにコピペすると、TAB区切りになりますからね)。
まぁ、さすがにちょっと例(OracleからCSV云々)がマニアックな内容だと思いますが、「改行を置換できる」ってことを覚えておくと役立つ場面は多いと思いますので、「なんだかマニアックだなぁ」とか思わずに、知らない人は是非一度お試しあれ。
次回は「Excelはコードエディタです」でも紹介しましょうか。