
よろしくお願いします。
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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Access(アクセス) CSVファイルの「0落ち」にVBA 6 2023/02/02 15:27
- その他(プログラミング・Web制作) データ解析ソフトRでのファイル入力read.csvがエラーになります 7 2022/03/27 22:11
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Visual Basic(VBA) excelにて、特定の列に数字入力してあれば、入力してある行コピーして 別ファイルに張り付ける 2 2022/08/11 05:33
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- Excel(エクセル) Excelのセル上の日付の不具合 3 2022/05/22 18:20
- フリーソフト Windowsの特殊文字を削除や変換したい そんなフリーソフトはありますか? 3 2022/11/09 00:05
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
教えて下さい
-
多量のSUMIF式を軽くしたい
-
メモ帳(テキストデータ)をExc...
-
EXCELVBAでSQLserverからデータ...
-
この行は既に別のテーブルに属...
-
配列でデータが入っている要素...
-
【エクセル】測定時間がバラバ...
-
csvファイルに複数行あるデ...
-
特定のデータの抽出方法を教え...
-
カンマからスラッシュに
-
エクセルで2つの時系列のデー...
-
ActiveReportについて
-
Excelのマクロでワードのテキス...
-
複数の変数にデータがあるかど...
-
Excel VBAでのオートフィルター...
-
ACCESSからEXCELに出力する際、...
-
シーケンサにパソコンからアク...
-
VBA 空白セルを削除ではない方...
-
パースとはなんですか?
-
C言語の度数分布の問題
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えて下さい
-
【エクセル】測定時間がバラバ...
-
配列でデータが入っている要素...
-
VBA 空白セルを削除ではない方...
-
メモ帳(テキストデータ)をExc...
-
EXCELVBAでSQLserverからデータ...
-
多量のSUMIF式を軽くしたい
-
この行は既に別のテーブルに属...
-
CString型の文字列連結について
-
ACCESSからEXCELに出力する際、...
-
ユーザーフォームのテキストボ...
-
エクセルで2つの時系列のデー...
-
C# でDataTableの更新を高速化...
-
特定のデータの抽出方法を教え...
-
C# ソケット通信でデータ受信時...
-
二分探索の平均探索回数
-
Excel VBAでのオートフィルター...
-
ブレーカー落ちで壊れたりしな...
-
Accessで該当データにフラグを...
-
VBAを使ってOutlookメール本文...
おすすめ情報