文字列を使用していて、intが偶数である限りデータを整えることができますが、ピリオドを含む数字を使用する場合はエラーが発生します。データテーブル内のカラムに小数点を使用する
static DataTable GetTable()
{
DataTable table = new DataTable();
table.Columns.Add("Date", typeof(string));
table.Columns.Add("Item Name", typeof(string));
table.Columns.Add("Buyer", typeof(string));
table.Columns.Add("Quantity", typeof(int));
table.Columns.Add("Price", typeof(string)); //I want this to be a decimal or whatever
using (TextFieldParser parser = new TextFieldParser("c:\\folder\\sold.csv"))
{
parser.CommentTokens = new string[] { "#" };
parser.SetDelimiters(new string[] { "," });
parser.HasFieldsEnclosedInQuotes = true;
parser.ReadLine();
while (!parser.EndOfData)
{
string[] fields = parser.ReadFields();
table.Rows.Add(fields[0], fields[1], fields[2], fields[3], fields[4]);
}
}
return table;
}
「数量」、それが「1」または「2」ですが、それはように「21.56」だとするとき、「価格」は私にエラーが発生しますので、int型であることを気にしません。私は何が欠けていますか?
「日付」を「8/31/16」のときに「DateTime」にするのにも問題がありますが、実際には文字列ではなく3つの整数にする必要があると仮定しています。
編集 私はスウェーデン出身ですが、それは文化の問題だと思われました。小数点の代わりにカンマを使用しています。誰かが好奇心が強い場合のためのコードはここにありますが、私は確かにこれをやるよりエレガントな方法があります。
static DataTable GetTable()
{
DataTable table = new DataTable();
table.Columns.Add("Date", typeof(DateTime));
table.Columns.Add("Item Name", typeof(string));
table.Columns.Add("Buyer", typeof(string));
table.Columns.Add("Quantity", typeof(int));
table.Columns.Add("Price", typeof(decimal));
using (TextFieldParser parser = new TextFieldParser("c:\\folder\\sold.csv"))
{
parser.CommentTokens = new string[] { "#" };
parser.SetDelimiters(new string[] { "," });
parser.HasFieldsEnclosedInQuotes = true;
parser.ReadLine();
while (!parser.EndOfData)
{
string[] fields = parser.ReadFields();
table.Rows.Add(DateTime.ParseExact(fields[0], "MM/dd/yy", null), fields[1], fields[2], int.Parse(fields[3]), Convert.ToDecimal(fields[4], new CultureInfo("en-US")));
}
}
return table;
}
正しいタイプのカラムを設定してから、正しいタイプのCXV値を解析します。 [culture](http://stackoverflow.com/a/5238137/4625305)、 – AXMIM
"give me errors"に注意してください。 **どちらのエラー? –