アプリ版:「スタンプのみでお礼する」機能のリリースについて

よろしくお願いします。

PLSQLで可変長のCSVファイルを読み込み、ある特殊文字があった場合、その
特殊文字が含まれている項目ごとNULLにし、またCSVファイルを出力する。

というプログラムを作りたいのですが、CSVファイルの読込み、書き出しのやり方
は判ったのですが、文字列置換がどうすればいいかわかりません。
またファイルはマルチレイアウトで、カラム数とも不定です。

例)
入力ファイル: A,B,C,D,ABCDEFG,FF,GG

となっている場合、'E'という文字があるカラムはNULLで出力する というときに

出力ファイル: A,B,C,D,,FF,GG

としたいのです。



ご教授下さい。

A 回答 (4件)

こんにちわ。



> 文字列置換がどうすればいいかわかりません。
decode(instr(データ, '特殊文字'), 0, データ, NULL)
でどうでしょう?
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。

特殊文字が複数ある場合はどうすればよいでしょうか?
またデータは [,]と[,]の間の文字としたいのですが
どう判断させればよろしいでしょうか?

お礼日時:2005/08/19 11:04

この手の作業はPL/SQLが苦手とする分野ですね。


Javaやほかのスクリプト言語(Perlなど)でプログラムした方が効率的だと思います。(PL/SQLで行わなければいけない理由が特に無い場合)
開発の制約でPL/SQLにこだわるのであれば、参考URLが役に立つと思います。

参考URL:http://www.oracle.com/technology/oramag/code/tip …
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。
PLSQLで作成しなければならず、いろいろ困っていました。
参考のURL情報大変、参考になります。
改良してなんとかやってみようと思います。
ありがとうございました。

お礼日時:2005/08/24 11:07

こんにちわ。



> 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個より少なかった場合の事は考慮していませんので、注意して下さい。
    • good
    • 0
この回答へのお礼

ありがとうございます。
SUBSTRのほうはなんとなくわかりました。
もうちょっと頑張ってみます。

お礼日時:2005/08/24 11:05

こんにちわ。


#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の組み合わせ
でできるとの事ですが、どのようにすればよいのでしょうか。
なにからなにまですみません。
お願い致します。

補足日時:2005/08/22 11:51
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す