当我读取固定长度文件时,该值始终没有空格。
示例:文件夹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 **
- &gt;这一行给了我“HMC12-163”,但我期待“HMC12-163”。 请注意空格!
感谢您的帮助。
非常感谢! -Deb
答案 0 :(得分: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\""))
答案 1 :(得分: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());