1

重複の可能性:
.Netで、CSVからOleDBを使用して必要な形式で値をインポートするにはどうすればよいですか?

OleDbCommandを使用して読み取ったcsvファイルがあります。

CSVには、0が埋め込まれたままの数値である列が含まれています。列を読み取ると、先行0文字なしで結果が得られます。これは数値になりました。

CSVのこれらの値:

UserNumber    LocationNumber
00001234      00023456
00891234      00000456

になります

UserNumber    LocationNumber
1234      23456
891234      456

結果のデータテーブルで、OleDbDataAdapterによって入力されます。

これを防ぐ方法はありますか?

PS、パディングは問題ではありませんが、行われている作業の性質上、CSVファイルにはフォーマットが設定されていないため、実際には良い解決策ではありません。

4

1 に答える 1

1

ファイル全体を文字列として読み取るだけでもかまわないように思えます。そのようなSchema.iniファイルを非常に簡単に作成できます。

元の接続を使用する:

DataTable GetSchemaTable() 
{
    try
    {
        OleDbDataAdapter da; // init adapater with your own connection
        DataSet ds = new DataSet();
        System.Data.DataTable[] dtTables = da.FillSchema(ds, SchemaType.Source);
        return dtTables[0];
    }
    catch (System.Exception se)
    {
        throw new System.Exception("Problem retrieving Schema: " + se.Message);
    }
}

void CreateSchemaIni(string csvDirectory, string csvFileName) 
{       
    DataTable dt = GetSchemaTable();
    FileStream fsOutput = new FileStream(csvDirectory + "\\schema.ini", FileMode.Create, FileAccess.Write);
    StreamWriter srOutput = new StreamWriter(fsOutput);
    string s1, s2, s3;
    s1 = "[" + csvFileName + "]";
    s2 = "ColNameHeader=False";
    s3 = "Format=CSVDelimited";
    srOutput.WriteLine(s1 + '\n' + s2 + '\n' + s3 + '\n');
    StringBuilder strB = new StringBuilder();
    for (int i = 1; i <= dt.Columns.Count; i++)
    {
        strB.Append("Col" + i.ToString());
        strB.Append("=F" + i.ToString());
        strB.Append(" Text\n");
        srOutput.WriteLine(strB.ToString());
        strB = new StringBuilder();
    }
    srOutput.Close();
    fsOutput.Close();
}
于 2012-07-17T12:15:05.330 に答える