0

csv ファイルから特殊文字を削除するのに苦労しています。

私の出力テーブルのこのようなプロセスには、このようなデータがあります

Col1 
BC,BS/APP 

このように、別の 10 列があり、patindex で試したときに特殊文字を取得する可能性があります。最初の特殊文字のみを削除でき、他の文字を削除するために使用する必要がある while ループには時間がかかります。それを行う 。

だから私は以下のcsvファイルにデータをbcpingした後に特殊文字を削除しようとしましたが、私が使用しているbcpコマンドです

bcp_with_error_check tempdb..STT_IM166_WEB_MWE out temp.dat -SSVR -UUSR -PPWD -c -b1000 -t'","'
sed -e 's/,"0/,="0/g;s/,"1/,="1/g;s/,"2/,="2/g;s/,"3/,="3/g;s/,"4/,="4/g;s/,"5/,="5/g;s/,"6/,="6/g;s/,"7/,="7/g;s/,"8/,="8/g;s/,"9/,="9/g'temp.dat > temp1.dat
sed -e 's/$/"/g' temp1.dat > temp2.dat
sed -e 's/^/="/g' temp3.dat >>Filename.csv

私の問題は、カンマ(、)を削除するとCSVファイルになるため、ファイルレイアウトを乱す特殊文字と見なされます。

データベースでコンマだけを置き換えることはできますが、コンマだけを除外して他の文字を削除するコマンドを取得できません。このコマンドが非常に必要な私を助けてください

4

1 に答える 1

1

あなたが本当に何を求めているのかはわかりませんが、少なくとも最初のsedコマンドを 10 分の1 に縮小できます。

sed -e 's/,"\([0-9]\)/,="\1/g' temp.dat > temp1.dat

このパターンは、コンマ、二重引用符、および数字を探します (数字が何であるかを記憶しています)。コンマ、等号、二重引用符、および記憶された数字に置き換えられます。

一時ファイルが異なる理由がない限り、次のコマンドを使用して 3 つのsedコマンドを 1 つにまとめることができます。

sed -e 's/,"\([0-9]\)/,="\1/g' -e 's/$/"/g' -e 's/^/="/g' temp.dat >>Filename.csv

またbcp_with_error_check、引数を省略した場合に標準出力に書き込む場合はout temp.dat、一時ファイルは必要ありません (これは一般的には良い考えです)。2 人のユーザーが無邪気に同じディレクトリで同時にこのコマンドを実行した場合、お互いの一時ファイルを踏みにじる (または実行できないために問題が発生する) ことに注意してください。Filename.csv一時ファイルがないので、心配する必要があるのは最終的なファイル名だけです。

ただし、これで主な問題が解決されるわけではありません。スクリプトが改善されるだけです。

于 2013-10-03T03:24:17.200 に答える