5

固定長ファイルを読み込むと、値に常にスペースがありません。

例: フォルダ c:\temp には 2 つのファイルが含まれています

fs.txt

ITMHMC12-163 -0000153430.30
ITMHMC12-164 -0000000745.18

schema.ini

[fs.txt]
ColNameHeader=False
Format=FixedLength
DateTimeFormat=yyyymmdd
Col1=RecordTypeSCFBody Text Width 3
Col2=InvoiceNumber Text Width 10
Col3=Amount Text Width 14

ファイルを読み取るC#コード...

string fileName = @"C:\temp\fs.txt";
string dir = Path.GetDirectoryName(fileName);

DataTable dataTable;

using (OleDbConnection conn =
    new OleDbConnection(@"Provider=Microsoft.Jet.OleDb.4.0;" +
        "Data Source=" + dir + ";" +
        "Extended Properties=\"Text;\""))
{
conn.Open();

using (OleDbDataAdapter adapter = new OleDbDataAdapter("select * from " + fileName, conn))
{

    dataTable = new DataTable();
    adapter.Fill(dataTable);
}
conn.Close();
}

Console.Write(dataTable.Rows[0][1].ToString()); <-- this line **

--> この行は "HMC12-163" を返しますが、"HMC12-163" を期待しています。スペースに注意!

あなたの助けに感謝。

どうもありがとう!-デブ

4

2 に答える 2

1

この動作を制御するための文書化された設定はないようです。末尾のスペースが重要な場合は、コードまたは SQL で正しい数のスペースを明示的に埋め込むことができます。

const int maxInvoiceLength = 10;
string fileName = @"C:\temp\fs.txt";
string dir = Path.GetDirectoryName(fileName);

DataTable dataTable;

using (OleDbConnection conn =
    new OleDbConnection(@"Provider=Microsoft.Jet.OleDb.4.0;" +
        "Data Source=" + dir + ";" +
        "Extended Properties=\"Text;\""))
    {
        conn.Open();

        string query = String.Format("SELECT RecordTypeSCFBody, LEFT(InvoiceNumber + SPACE({0}), {0}), Amount FROM {1}", maxInvoiceLength, fileName);
        using (OleDbDataAdapter adapter = new OleDbDataAdapter(query, conn))
        {
            dataTable = new DataTable();
            adapter.Fill(dataTable);
        }
    }

    Console.Write(dataTable.Rows[0][1].ToString());
于 2012-09-11T18:46:11.437 に答える
1

固定長形式のテキスト ファイルの場合、拡張プロパティで次のように指定する必要があります。

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\txtFilesFolder\;Extended Properties="text;HDR=No;FMT=Fixed";

「HDR=はい;」最初の行にデータではなく列名が含まれていることを示します。「HDR=いいえ;」反対を示しま​​す。
各列の長さを指定するには、Schema.iniファイルを使用します。

したがって、コードは次のようになります。

using (OleDbConnection conn =
    new OleDbConnection(@"Provider=Microsoft.Jet.OleDb.4.0;" +
        "Data Source=" + dir + ";" +
        "Extended Properties=\"Text;HDR=No;FMT=Fixed\""))
于 2012-09-11T16:14:26.720 に答える