![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
よろしくお願いします。
PLSQLで可変長のCSVファイルを読み込み、ある特殊文字があった場合、その
特殊文字が含まれている項目ごとNULLにし、またCSVファイルを出力する。
というプログラムを作りたいのですが、CSVファイルの読込み、書き出しのやり方
は判ったのですが、文字列置換がどうすればいいかわかりません。
またファイルはマルチレイアウトで、カラム数とも不定です。
例)
入力ファイル: A,B,C,D,ABCDEFG,FF,GG
となっている場合、'E'という文字があるカラムはNULLで出力する というときに
出力ファイル: A,B,C,D,,FF,GG
としたいのです。
ご教授下さい。
No.4
- 回答日時:
この手の作業はPL/SQLが苦手とする分野ですね。
Javaやほかのスクリプト言語(Perlなど)でプログラムした方が効率的だと思います。(PL/SQLで行わなければいけない理由が特に無い場合)
開発の制約でPL/SQLにこだわるのであれば、参考URLが役に立つと思います。
参考URL:http://www.oracle.com/technology/oramag/code/tip …
お返事ありがとうございます。
PLSQLで作成しなければならず、いろいろ困っていました。
参考のURL情報大変、参考になります。
改良してなんとかやってみようと思います。
ありがとうございました。
No.3
- 回答日時:
こんにちわ。
> decode(instr(データ,'特殊文字1')+instr(データ,'特殊文字2')+・・・
> instr(データ,'特殊文字N'),0,データ,null)
以下のように演算結果の符号部分のみdecode して下さい。
decode(sign(instr(...) + instr(...) + ...), 0, データ, NULL)
> 「,」で区切られている間をデータとみなす方法がInstrとSUBSTRの組み合わせ
> でできるとの事ですが、どのようにすればよいのでしょうか。
こんな感じでしょうか?
substr(データ, instr(データ, ',') + 1, instr(データ, ',', 1, 2) - instr(データ, ',')-1)
→ 最初のカンマと2番目のカンマの間の文字をデータとして取り出します。
最初のカンマの次の文字から、2番目のカンマまでの文字数 - 最初のカンマ
までの文字数 -1文字を、間のデータと見なしています。
カンマの数が2個より少なかった場合の事は考慮していませんので、注意して下さい。
No.2
- 回答日時:
こんにちわ。
#1 のmuyoshid です。
> 特殊文字が複数ある場合はどうすればよいでしょうか?
特殊文字の数分instr の結果を足し算すればできますょ。
instr は、指定した文字が表れた場所を返してくれるので、
instr(データ, '特殊文字1') + instr(データ, '特殊文字2') +
... + instr(データ, '特殊文字n') を計算します。
計算結果の符合 (SIGN) をdecode すれば、
0:特殊文字無し
1:特殊文字有り
となります。
Oracle9i であればcase 文が使えますが、この方法だとバージョン
に依存せず使用できます。
> またデータは [,]と[,]の間の文字としたいのですが
これは、instr とsubstr を組合せればカンマの中を取り出す事ができます。
この回答への補足
ありがとうございます。
decode(instr(データ,'特殊文字1')+instr(データ,'特殊文字2')+・・・
instr(データ,'特殊文字N'),0,データ,null)
ということですよね。
よくわかりました。
「,」で区切られている間をデータとみなす方法がInstrとSUBSTRの組み合わせ
でできるとの事ですが、どのようにすればよいのでしょうか。
なにからなにまですみません。
お願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
教えて下さい
-
配列でデータが入っている要素...
-
【エクセル】測定時間がバラバ...
-
<VB>String→Object
-
S9タイプからXタイプにデータ...
-
ハミング窓関数とFFT(高速フー...
-
Fortranで/(スラッシュ)を含...
-
VBAでシートからコンボボックス...
-
Accessで該当データにフラグを...
-
共有メモリへのマッピング(Map...
-
フォートランでの相互相関関数...
-
メモ帳(テキストデータ)をExc...
-
カンマからスラッシュに
-
ブレーカー落ちで壊れたりしな...
-
マクロを使って「円」を消すのは
-
ワイモバイルの速度制限
-
ACCESS VBA インデックスが有効...
-
VBにおいてフォーム間の変数の...
-
EXCELVBAでSQLserverからデータ...
-
[VBA] CountIfに変数を使いたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えて下さい
-
配列でデータが入っている要素...
-
あんまり考えたくないけど
-
【エクセル】測定時間がバラバ...
-
メモ帳(テキストデータ)をExc...
-
多量のSUMIF式を軽くしたい
-
この行は既に別のテーブルに属...
-
エクセルで2つの時系列のデー...
-
ブレーカー落ちで壊れたりしな...
-
VBA 空白セルを削除ではない方...
-
S9タイプからXタイプにデータ...
-
Accessで該当データにフラグを...
-
EXCELVBAでSQLserverからデータ...
-
CString型の文字列連結について
-
[C言語] コメント文字列を無視...
-
VBAを使ってOutlookメール本文...
-
シーケンサにパソコンからアク...
-
C# ソケット通信でデータ受信時...
-
パースとはなんですか?
-
ユーザーフォームのテキストボ...
おすすめ情報