614) CSV連結で半角スペースが混入 GPZ 2003/09/12(金) 08:58 |
|
|
|
こんにちは いつもbatファイル作成の時には大変参考にさせてもらってます 環境は Windows2000server SP2 です 現在 各システムからCSV出力されたファイルの連結、MOVE、rename などbat処理しているのですが、最近連結して出来たCSV ファイルの途中に、半角スペースが混入するようになりました。 5つ(jisseki1~5)のCSVファイルを連結しているの ですが(連結後はjisseki.csvとなる) jisseki4とjisseki5の間(jisseki5の頭)に のみ半角スペースが混入するようになりました。 具体的には 1、aaa、bbb、ccc、1234 --------ここまでjisseki4.csvのデータ--------------- --------ここからjisseki5.csvのデータ--------------- ■1、ddd、eee、fff、5678 1、ggg、hhh、iii、9012 1、jjj、kkk、mmm、3456 ■(行の終わり) ■:半角スペース 元のcsvを見たのですが、半角スペースはjisseki4の終わりと jisseki5の頭には存在しません。 またjisseki1~4の各行頭や行末に半角スペースが存在してません。 行途中の半角スペースがあるため、別システムへ取込んだ際jisseki5のデータが取込めないという現象が現れています。 原因追求もしたいのですが、対処として途中にある半角スペース を検索し除去するバッチなど、vector等いろいろ探して実験した のですが、うまくいきませんでした (vectorにreplf41というのがあり、NTではうまくいったのですが w2kで実行すると、エラーで動きませんでした) この半角スペースを除去するうまいbatの組み方あるでしょうか? できれば、これを応用して、出来上がった最終データのcsvをチェック するような仕組みも考えたいのですが・・・ すいませんが、ご教授ください |
|
615) Re:CSV連結で半角スペースが混入 じゃく 2003/09/12(金) 09:05 |
|
|
|
こんにちは いまはどうやって連結しているのですか? |
|
616) Re2:CSV連結で半角スペースが混入 GPZ 2003/09/12(金) 09:50 |
|
|
|
こんにちは じゃくさん >いまはどうやって連結しているのですか? はい 以下のようにしてます ----------------------------------------------- type NUL > jisseki.CSV FOR %%B IN (jisseki?.csv) DO copy /A jisseki.CSV + %%B ------------------------------------------------- 気になるのは、生成された(このbatが動作するのは1日1回) jisseki.csvの全てに半角スペースが混入する訳ではないこと なんです。 もう 4月くらいから動作させているbatなんですが・・・ |
|
618) Re3:CSV連結で半角スペースが混入 じゃく 2003/09/12(金) 10:14 |
|
|
|
>こんにちは じゃくさん > >>いまはどうやって連結しているのですか? > >はい 以下のようにしてます >----------------------------------------------- >type NUL > jisseki.CSV > >FOR %%B IN (jisseki?.csv) DO copy /A jisseki.CSV + %%B >------------------------------------------------- >気になるのは、生成された(このbatが動作するのは1日1回) >jisseki.csvの全てに半角スペースが混入する訳ではないこと >なんです。 >もう 4月くらいから動作させているbatなんですが・・・ 気になる点と言えば、jisseki?.csv に jisseki.csv も含まれて しまう事でしょうか。 COPY /? を見てみたのですが、現状だと受け手側のファイル名の指定がないような記述ですね。(それでも動くのかもしれませんが) 送り側にワイルドカードが使えるようなので、 del jisseki.csv copy jisseki?.csv jisseki_tmp.CSV ren jisseki_tmp.csv jisseki.csv としたほうがいいのではないでしょうか。 もしくは、もっとストレートに copy jisseki1.csv+jisseki2.csv+jisseki3.csv+jisseki4.csv++jisseki5.csv jisseki.csv (/a はつけなくてもいいのではないかな?両方試してみてください) 各行の先頭の半角スペースを取り除くことを先行したいのなら、sed や awk を使ったほうが確実ですね。 awk を使えば CSV の各フィールドのチェックもできちゃうし。 |
|
623) Re3:CSV連結で半角スペースが混入 Hellcat 2003/09/12(金) 23:23 |
|
|
|
GPZさん、じゃくさん、横から失礼します。 >jisseki.csvの全てに半角スペースが混入する訳ではないこと なんです。 失礼ですが、半角スペースが混入したことは間違いありませんか。 ファイルをダンプして確認されましたか? 画面ではスペースに見えても、スペース以外が混入している可能性があります。 というのは、私がテストしたところではEOFマークが混入しているのではないかと思われるふしがあるからです。 私の環境(WinMe)でdata1 data2 data3を作ってテストしてみました。 data1は1,1 data2は2,2 data3は3,3 というデータが入っています。 各ファイルのダンプリストは以下のとおりです。 なお、ダンプリストの出力が1行に表示できず、ずれてしまうので、一部を割愛して表示してあります。 [21:27:01.61 C:\TAK\WORK] $ dumpx data1 0000 31 2C 31 0D 0A - [21:27:09.19 C:\TAK\WORK] $ dumpx data2 0000 32 2C 32 0D 0A - [21:29:00.97 C:\TAK\WORK] $ dumpx data3 0000 33 2C 33 0D 0A - いずれも復帰改行で終わっていることが確認できます。 これらのファイルを copy data1+data2+data3 としてdata1ファイル(出力ファイル)をダンプすると、以下のとおり、最後にEOFマーク(16進法表記で1A)が挿入されていることが確認できます。それにしても出力先を指定しないcopyコマンドの使い方があるとは知りませんでした。 (^^; [21:29:04.32 C:\TAK\WORK] $ copy data1+data2+data3 C:data1. を上書きしますか (Yes/No/All)?y data1 data2 data3 1 個のファイルをコピーしました. [21:29:55.89 C:\TAK\WORK] $ dumpx data1 0000 31 2C 31 0D 0A 32 2C 32-0D 0A 33 2C 33 0D 0A 1A この部分にEOFマークが挿入されている。↑ また、copy data1+data2+data3 dummyとして実行しdummyファイル(出力ファイル)をダンプしてみると、やはり最後にEOFマーク(16進法表記で1A)が挿入されていることが確認できます。 [21:31:17.46 C:\TAK\WORK] $ copy data1+data2+data3 dummy data1 data2 data3 1 個のファイルをコピーしました. [21:31:37.83 C:\TAK\WORK] $ dumpx dummy 0000 31 2C 31 0D 0A 32 2C 32-0D 0A 33 2C 33 0D 0A 1A やはりこの部分にEOFマークが挿入されている。↑ ということで、copyコマンドで連結した場合は最後にEOFマークが挿入されるようです。 GPZさんの環境と私の環境が異なるので断定はできませんが、GPZさんの場合もその可能性は高いと思います。 単純にcopy data1 dummy2としdummy2をダンプすると、 [21:31:43.33 C:\TAK\WORK] $ copy data1 dummy2 1 個のファイルをコピーしました. [21:59:02.47 C:\TAK\WORK] $ dumpx dummy2 0000 31 2C 31 0D 0A - ↑この部分にEOFマークはない。 ということで、EOFマークは挿入されません。ファイルを連結した場合のみEOFマークが挿入されるようですね。 私は、ファイルの連結はcatコマンド(フリーソフト)を使用しています。catコマンドでの実行結果は以下のとおりで、余計なデータは挿入されません。 [22:01:47.19 C:\TAK\WORK] $ cat data? > dummy4 [22:02:05.53 C:\TAK\WORK] $ dumpx dummy4 0000 31 2C 31 0D 0A 32 2C 32-0D 0A 33 2C 33 0D 0A この部分にEOFマークはない。↑ catコマンドは http://www.vector.co.jp/soft/dos/util/se009386.html にあります。 ******************* 行頭がスペースのデータの当該行頭スペース(1個だけ)を削除する方法 izgrep -s "^ " "" inputfile > outpitfile これで、可能です。多分WinXPなどでも動くと思います。 izgrepは http://www.vector.co.jp/soft/dos/util/se004975.html にあります。 |
|
this article refers Vector Soft Library..
|