2016-05-21 30 views
0

スキップしなければならない行がいくつかあるため、きれいではないクリーンなCSVファイルをインポートしています。 しかし、多くのフィールドには望ましくない文字が含まれており、正常に削除できませんでした。D3 csvインポートでデータを変更しようとしました

d3.csv("DATA2015.csv", function(csv) { 
    csv.CheckDate = csv.CheckDate.substring(1); 
    csv.Amount = +csv.Amount.substring(1); 
    csv.Fee=+csv.Fee; 
    csv = csv.filter(function(row) { 
     return row['Amount'] != ''; 
    }) 
    console.log(csv[0]); 
    console.log(csv[1]); 
    console.log(csv[2]); 
    console.log(csv[3]); 
    console.log(csv[4]); 
}); 

をそして私がキャッチされない例外TypeErrorを取得しています:プロパティ「ストリング」を読み取ることができません。これは、私がしようとしてるものです

Amount:"$286.28" 
CheckDate:" 12/31/15" 

データは、追加の文字とスペースが付属していますsubstring(1)行で未定義です。

どのようなアイデアも大歓迎です。

+0

:代わりにあなたのアカウントにそれを取るなど、

を、配列の各メンバーをループにしたいと思いrow.CheckDate.substring(1)、これを試してみてください。量)? –

+0

最も可能性の高い問題は、csv.CheckDateとcsv.Amountがスティッキングではないことです。これらのフィールドの値を持たない行がいくつかあります。 csvオブジェクトの外観とそのプロパティのコードを表示できますか? – shteeven

+0

なぜあなたは単純にエクセルをかけて、それらの望ましくない文字のすべてを見つけて置き換えるのではないのですか?あなたが読む前に、この方法でCSVを消毒します。 – Klaujesi

答えて

0

部分文字列を作成する前にチェックすることができます。このようなもの。

csv.Amount = csv.Amount || 'Your string when data is undefined'; 

以降、文字列の操作を行います。

2

私はこれを単純化することができますが、配列はcsvではありませんか? csv.CheckDate.substring(1)を実行することは意味がありません。あなたは(csv.CheckDate、CSVをCONSOLE.LOGときに何が起こるか

d3.csv("DATA2015.csv", function(csv) { 
    csv.forEach(function(row) { 
    row.CheckDate = row.CheckDate.substring(1); 
    row.Amount = +row.Amount.substring(1); 
    row.Fee = +row.Fee; 
    }); 

    csv = csv.filter(function(row) { 
    return row.Amount !== ''; 
    }); 

    console.log(csv[0]); 
    console.log(csv[1]); 
    console.log(csv[2]); 
    console.log(csv[3]); 
    console.log(csv[4]); 
}); 
関連する問題