[前の記事]« バッチ起動時に黒い画面が出てくるのを止めたい
[次の記事][NT4]ネットワーク接続しているユーザの確認 »

関連オンラインソフト配布サイト:
Vector>ダウンロード(top) |>MS-DOSまたは汎用 | >WindowsVista/XP/2000/NT

▲カテゴリー「COPY,XCOPY…ファイルやディスクの複写・連結・バックアップ」索引へ

CSVファイルの連結で半角スペース(?)が混入する

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..
 
 


カテゴリー「COPY,XCOPY…ファイルやディスクの複写・連結・バックアップ」索引へ

 

カテゴリー一覧

FPCU/FPCDIY QUICK LINK online
この上の各ジャンル名をクリックすると、下のウィンドウが切り替わります▼


=リンク集のインデックスはこちら=

資料書籍

About

2003年09月12日 12:05に投稿されたエントリーのページです。

ひとつ前の投稿は「バッチ起動時に黒い画面が出てくるのを止めたい」です。

次の投稿は「[NT4]ネットワーク接続しているユーザの確認」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

This site is powered by Six Apart
Movable Type 3.33-ja
このブログについて | 運営:有限会社メディアポート