0,12 (小数点記号としてコンマ) のように書式設定されたいくつかの 10 進数値を含むタブ区切りのテキスト ファイルがあります。その内容を Provider=Microsoft.Jet.OLEDB.4.0 経由で OleDBDataReader に解析しましたが、結果を見ると、10 進数であるはずの値が DateTime に変換されていました。
アプリケーションにカンマを数値の小数点記号として理解させるにはどうすればよいですか? cultureinfo を en-US またはその他に変更しても機能しませんでした。
public static OleDbDataReader CriarOleDbDataReader(string sCaminhoArquivo)
{
FileInfo fi = new FileInfo(sCaminhoArquivo);
string format;
string linha;
if (fi.Extension.ToLower().Equals(".csv"))
{
string texto = System.IO.File.ReadAllText(sCaminhoArquivo).Replace(',', ';');
System.IO.File.WriteAllText(sCaminhoArquivo, texto);
linha = System.IO.File.ReadAllLines(sCaminhoArquivo)[0];
format = "Delimited(;)";
}
else
{
linha = System.IO.File.ReadAllLines(sCaminhoArquivo)[0];
format = (linha.Split('\t').Count() > 1) ? "TabDelimited" : "Delimited(;)";
}
DefinirSchema(fi, format);
string cn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fi.DirectoryName + ";Extended Properties='text;HDR=Yes';";
OleDbConnection con = new OleDbConnection(cn);
OleDbCommand cmd = new OleDbCommand("select * from [" + fi.Name + "]", con);
OleDbDataReader dr;
con.Open();
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return dr;
}
フィールド "IOF" は 10 進数で、.txt ファイルの値は 0,02 ですが、datetime を返します。
dr["iof"]
{30/12/1899 00:02:00}
Date: {30/12/1899 00:00:00}
Day: 30
DayOfWeek: Saturday
DayOfYear: 364
Hour: 0
Kind: Unspecified
Millisecond: 0
Minute: 2
Month: 12
Second: 0
Ticks: 599264353200000000
TimeOfDay: {00:02:00}
Year: 1899