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

お世話になります。
現在テキストファイルをOracleデータベースに取り込む処理を開発しております。SQL*Loaderを用いて、テスト.datを取り込もうとしたのですが、
ORA-01722: 数値が無効です。エラーが出てデータを取り込めません。

テスト.datの中身を見たところ、該当個所に下記のようにNULLが入っていました。
数値型のテーブル項目に、NULLを取り込もうとしてエラーになっています。
Oracleの場合、数値型では空白は取り込めるようですが、NULLは取り込めないようです。

ですので、テスト.datのNULLの個所を空白に変換する方法を調査しています。

sedや、awk、perlを使えばできるのでしょうが、私は詳しくないため
方法が思いつきません。
どなたか、sed、awk、perlに詳しい方がいれば、方向性のヒントだけでも
お教えねがいますでしょうか。

環境: Solaris 9

■テスト.dat

od -c テスト.dat > テスト.txt

※ \t = タブ、\0= NULL

$ head -10 テスト.txt
0000000 0 0 1 \t 0 1 0 1 \t 1 \t 0 1 0 1 \t
0000020 0 0 0 0 0 0 \t 0 3 7 \t 1 0 0 1 0
0000040 2 8 \t \0 \0 \0 \t \0 \0 \0 \0 \0 \0 \0 \0 \0
0000060 \0 \t \0 \t 0 0 \t 6 3 \t 0 0 \t 1 \t

■編集後のイメージ
\0(NULL)の個所を、そのままスペース(空白)で置き換えたい。

0000000 0 0 1 \t 0 1 0 1 \t 1 \t 0 1 0 1 \t
0000020 0 0 0 0 0 0 \t 0 3 7 \t 1 0 0 1 0
0000040 2 8 \t   \t
0000060 \t \t 0 0 \t 6 3 \t 0 0 \t 1 \t

よろしくお願いします。

A 回答 (1件)

以下のようなperlのスクリプトを作ってください。


-----------------------------------
open FH, $ARGV[0] or die "open error $!";
while(read FH,$data,1){
$data =~ tr/\x00/\x20/;
print $data;
}
close FH;
---------------------------------
上記のスクリプトのファイル名を conv.pl とします
perl conv.pl テスト.dat > テスト.dat2
とすると
テスト.dat2が作成されます。(NULLをスペースに変換したファイル)
    • good
    • 0
この回答へのお礼

お世話になります。

教えていただいた方法で、目的のファイルを作成でき、
無事Oracleに取り込むことができました。

Perlって便利ですね。
これから勉強しようと思います。

非常に助かりました。
tatsu99さん、ありがとうございました。

お礼日時:2005/08/24 10:03

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