- - PR -
CSV出力時の改行コードについて
1
| 投稿者 | 投稿内容 | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-09-16 17:35
はじめまして。
SQL*PlusのSPOOL機能を使用してSELECT結果をCSVに出力するところで 悩んでいます。 一部のカラムの文字列(全角カナ:VARCHAR2)に改行が含まれている為、 検索結果をCSV出力し、エクセル等で出力したCSVを開くと、改行部分で 1レコードが複数行に分割されてしまいます。 **(例)******************************* NO BIKO ------------------------------- 1 あああ(改行)いいい >SPOOL /tmp/hoge.csv >SELECT no, biko FROM table; >SPOOL OFF /tmp/hoge.csvを開くと… 1行目 1 あああ 2行目 いいい ************************************* WRAPPEDをOFFにしてCSV出力したところ、改行される部分(「いいい」 の部分)が削除され、1行1レコードになったのですが、本来の目的は 1レコードのデータ全てを1行におさめたいです。 改行コードの有無に関わらず、CSV出力時、1レコードは1行として表示させたい のですが、どのようにすればいいかわかりません。 SQLで改行コードを無効化できればいいのですが。。 実現方法について、アドバイス頂けませんでしょうか? 環境は以下の通りです。 OS:RHAS2.1、Win2000pro DB:Oracle8i よろしくお願い致します。 | ||||||||||||||||||||
|
投稿日時: 2004-09-16 17:50
どもです。がると申します。
というのを知らないので中途半端な回答になってしまいますが。
まぁ、そうであろうと思われます。CSVは基本的に ・カラム毎を','(カンマ)で区切る ・レコードを改行で区切る ってのが通常の仕様なので。
基本的にCSVで「改行を含むデータを扱う」場合、データ全体を "(ダブルクォーテーション)で囲む必要があります。 エクセルにファイルをかませる前に、 あああ(改行)いいい を "あああ(改行)いいい" と変更してみてもらえると、状況が少しは見えてくるかなぁ、と。 後は「該当環境でデータを"で囲って出力する方法」がわかれば 何とかなると思うのですが :-P | ||||||||||||||||||||
|
投稿日時: 2004-09-16 18:02
改行コードを吹っ飛ばすだけで宜しいのでしたら、「REPLACE」関数を使って「CHR(10)」を「空文字列」にでも置換してあげれば大丈夫だと思います。
でしょうか。この場合、より正確には
のような感じになるかと思いますが、CSV内での「"」のエスケープ規則に関してはちょっと記憶があやふやです。半端な回答ですみません……。 --- 一部記述ミスがあったので修正しました。 [ メッセージ編集済み 編集者: 永井和彦 編集日時 2004-09-16 18:11 ] | ||||||||||||||||||||
|
投稿日時: 2004-09-16 18:43
> がるがる様、永井和彦様
早速のご返答ありがとうございます。 お二方のアドバイスにより、解決する事ができました。 > 基本的にCSVで「改行を含むデータを扱う」場合、データ全体を > "(ダブルクォーテーション)で囲む必要があります。 > 改行コードを吹っ飛ばすだけで宜しいのでしたら、「REPLACE」 > 関数を使って「CHR(10)」を「空文字列」にでも置換してあげれば > 大丈夫だと思います。 このような出力が欲しかったのですが、わたしではどうすればいいのか 分からず、困っていました。 本当にありがとうございます。 今後ともどうぞよろしくお願いします。。 | ||||||||||||||||||||
|
投稿日時: 2005-04-20 10:14
PostgreSQL(EUC_JP)環境からは、
下記の抽出方法で解決しました。 replace(foge,'¥r¥n', '') (¥は半角) *文字化けするので全角で書いています。 | ||||||||||||||||||||
|
投稿日時: 2005-04-20 10:31
EXCELで表示することが前提であれば、Replace等で改行(CR+LF)を
LFのみに変換しましょう。そうすれば同一セル内で改行されますよ。 ※行末のCR+LFは変換しちゃだめですけど。 ※Windowsでの話。 [ メッセージ編集済み 編集者: Beatle 編集日時 2005-04-20 10:33 ] | ||||||||||||||||||||
|
投稿日時: 2005-04-20 10:59
Excelでの表示が出来ればよいのであれば、ですが・・・ 改行コードが含まれる列の値を""で囲むと、改行コードが入っていても Excel上は1行になります たとえば、 "aaa","bbb(改行) ccc","ddd"(改行) となっているCSVファイルをExcelで開くと aaa bbb・ccc ddd と表示されます。 (・はExcelのセルが折り返し表示になっていないので、改行コード=・で表示されている) SQL文で '"' を1つめの列の前と、最後の列の後ろに文字列連結して SET COLSEP '","'として実験したらできました。 (SQLPLUSコマンドで列を常に""でくくる方法がわからなかった(^^; 知っている方いらしたら教えてくださいませ) #ちまっと編集(^^; [ メッセージ編集済み 編集者: 夏椰 編集日時 2005-04-20 11:00 ] | ||||||||||||||||||||
1
