Csvファイル読込時の数値について

ダウンロードしたCSVファイルを読み、10000000000以上のデータだけを抽出する処理を
行いたいです。

CSVから読み込んだデータをdatatable型変数に入れてAssignのvalueに以下のように
入力していますが条件に合わないレコードも抽出されます。

datatable型.Select(“列名>‘10000000000’”).CopyToDataTable()

csvファイルを開いたときに値は「134049059738.68」ですが、「1.34049E+11」のように
表示されていることが原因でしょうか?

Assignのvalueにデータ型変換関数を入れることはできますか?

条件に合うレコードだけを抽出する方法を教えてください。

教えていただいたので修正しました。

csvを読む前にBuildDataTableでデータ型を定義してからAssign で以下のようにしましたが
条件に合わないレコードも抽出されてしまいます。
to : AA(datatable型変数)
value : BB(datatable型変数).Select(“列名>‘10000000000’”).CopyToDataTable()

多分、datatable型の列がimt32型になって、桁落ちしている可能性があります。

事前に列定義をするアクティビティで、imt64型にしてみましょう。

あと、csvファイルの中身を見るにはexcelが便利ではありますが、桁を指数変換してしまうので、テキストエディタなどで見たほうが生のデータを見ることができるので、使い分けてみてくださいませ。

こんにちは

条件の部分:シングルクォートなしで想定の動作にならないでしょうか?
datatable型.Select(“列名>10000000000”).CopyToDataTable()

アドバイスありがとうございます。
シングルクォートなしにすると、Assignで止まってしまいます。

アドバイスありがとうございます。
csvを読む時にRead CSVのActivityを使い、outputにDataTable型変数を使っています
事前にDataTableの定義をしていないので、csvを読みこむ前にBuildDataTableで
定義してみます。

こんにちは

シングルクォートなしにすると、Assignで止まってしまいます。

当該列に数値以外の文字あるいは空文字が入っているのでしょうか?

であればベタですが以下のような感じはいかがでしょうか?

datatable型.AsEnumerable.Where(Function(x) IsNumeric(x("列名"))).Where(Function(x) CType(x("列名"),double)>10000000000).CopyToDataTable

あるいは以下の方がスマートかもしれません
datatable型.AsEnumerable.Where(Function(x) IsNumeric(x("列名")) AndAlso CType(x("列名"),double)>10000000000).CopyToDataTable

csvを読みこむ前にBuildDataTableで定義してみます。

おそらくこちらは不要かと。

アドバイスありがとうございます。
どちらの方法でも条件に合うデータを抽出できました。
やはり.Netの知識が必要そうですね。

1 Like