忘れないうちにメモ。

//不幸にも手持ちのcsvファイルが自由奔放すぎて、
//カンマや改行が混入していることって、よくありますよね。
//「このままじゃ、読み込めない…」
//「とりあえずもうその項目はなくてもいいから、インポートしたい…」
//そんな貴方の要望を叶えるjavascript、作りました。

//【仕様】拡張子.jsで保存。
//問題のファイルをtest.csvで同じディレクトリに配置して実行する。
//すると、replace.csvの形で成形後のデータを返してきます。

//>>宣言の類
//残念な列
var rejectcol = 15;
//本来の列数
var targetcol = 20;
//読み込み対象ファイルが存在するディレクトリ
var path = ‘./’;
//読み込み対象ファイル名
var fName = ‘test.csv’;
//書き出すファイル名
var writeName = ‘replace.csv’;
//csvファイルの区切り文字
var separator = ‘,’;
//読み込んだファイルを格納する配列
var dat = new Array();
//改行を消し去ったデータを格納する配列
var temprow = new Array();

//>>以下、一旦csvファイル内の全データを配列化するルーチン。
//ファイルオブジェクト作成
var object = WScript.CreateObject( ‘Scripting.FileSystemObject’ );
var file = object.OpenTextFile( path + fName, 1 );
//ファイルの終わりまで読み込む
while( !file.AtEndofStream ){
var temp = new Array();
//1行読み込み
var line = file.ReadLine();
//空行は消去する。
if( line == null || line == ” ){
continue;
}
//行をカンマで配列化
temp = line.split( separator );
dat.push(temp);
}
//ファイルを閉じる
file.close();

//>>以下、無駄な改行を消していくルーチン。
//そもそも問題のある列まで要素が足りない列=改行列なので、
//それを前の行に追加する。
//(ただし、改行後のカンマが問題列-1を超えるとこのやり方では通用しない。)
for ( var i = 0 ; i < dat.length ; i++ ){
if (dat[i].length < 15){
//改行後の要素
for ( var j = 0 ; j < dat[i].length ; j++ ){
temprow[temprow.length – 1].push(dat[i][j]);
}
}else{
//問題のない列。or 改行されるまでの要素
temprow.push(dat[i]);
}
}

//>>以下、問題の列を読み飛ばしてファイルに書き出すルーチン
//(その列に何個カンマが含まれていようが無敵。)
//出力用ファイルオブジェクト作成
var writeFile = object.CreateTextFile( path + writeName);
//別配列を用意して、データとカンマを交互にほりこんでいく。
for(var i = 0;i < temprow.length;i++){
var newrow = new Array();
//1列目~問題の列まで
for(var j = 0;j < rejectcol - 1 ;j++){
newrow.push(temprow[i][j]);
newrow.push(‘,’);
}
//問題の列の次~最後まで
for(var j = temprow[i].length – (targetcol – rejectcol);j < temprow[i].length ; j++){
newrow.push(‘,’);
newrow.push(temprow[i][j]);
}
//配列要素を結合させた文字列をファイルに書き出す
writeFile.WriteLine(newrow.join(”));
}

//書き込みファイルを閉じる
writeFile.close();

//いかがでしたか?役に立ちましたか?
//ただ、私は申し上げたい、本当に大切なことは、
//「エクスポートする前にそんな要素がないか確認すること…」
//エクスポート先への思いやり、それが一番大事なんですね。
//それでは、また後日。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA