2010-10-31 21 views
5

tập tin định giới bằng tab của tôi là một cái gì đó như thế này:Sử dụng OleDbConnection để đọc Tab-Ly file

ISO ISO3 ISO-Numeric 
AD AND 20 

Tôi đã cố gắng đoạn mã sau không có may mắn.

OleDbConnection cn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source= |DataDirectory|;Extended Properties='text;HDR=Yes;FMT=TabDelimited'"); 
OleDbCommand cmd = new OleDbCommand(@"SELECT * FROM countryInfo.txt", cn); 
OleDbDataAdapter da = new OleDbDataAdapter(cmd); 

cn.Open(); 

DataTable dt = new DataTable(); 
da.Fill(dt); 

Đây là ảnh chụp màn hình của Trình hiển thị dữ liệu. Rõ ràng nó không phải là đầu ra tôi sau. alt text

Mọi đề xuất? Đây là tệp Schema.ini của tôi. Trong cùng thư mục với tệp văn bản.

[countryInfo.txt] 
Format=TabDelimited 
ColNameHeader=True 
CharacterSet=ANSI 

Tôi có nên sử dụng thứ gì đó như FileHelpers thay thế không?


@Hans Passant Đây là ảnh chụp màn hình. alt text

+0

tôi luôn luôn phân tích cú pháp bản thân tập tin. –

+0

Tôi đã làm việc với một vài năm trước đây, vì vậy tôi khá gỉ. Nhưng tôi nhớ rằng schema.ini phải nằm trong cùng thư mục với tệp dữ liệu. Ngoài ra, có một dấu # ở cột phía trước "có thể" là một vấn đề, nhưng tôi không chắc chắn. Nó có thể giải thích dòng tiêu đề cột của bạn để được nhận xét. –

+0

Schema.ini nằm trong cùng thư mục. Ngoài ra tôi đã cố gắng loại bỏ các dấu # nhưng điều đó dường như không giúp đỡ. –

Trả lời

1

Vâng, một trong những ứng cử viên rõ ràng là không gian trắng này không thực sự là một tab nhưng không gian. Thử FMT = Delimited(). Sử dụng trình xem hex để xem những gì thực sự ở đó. Backgrounder is here.

this thread cho biết lý do sử dụng đoạn mã lỗi như Máy bay phản lực chưa được hỗ trợ trong 9 năm qua chẳng hạn như nhầm lẫn. Với câu trả lời, hãy để trống dòng đầu tiên trong ô schema.ini.

+0

FMT = Phân tách() không hoạt động. Khi tôi mở tập tin trong một trình soạn thảo hex tôi thấy '.' giữa các trường. Điều đó thực sự có ý nghĩa gì? –

+0

Bạn được coi là số hex chứ không phải dấu chấm. Đăng ảnh chụp màn hình. –

+0

Không có đầu mối gì "bh" có thể có nghĩa là, đó là điểm yêu cầu một ảnh chụp màn hình. 09 thực sự là mã ascii cho một tab. –

2

Tạo và lưu một tập tin schema.ini vào thư mục ứng dụng có chứa các văn bản sau đây:

------------------Schema.ini file starts here----------------- 
[Data.txt] 
ColNameHeader=True 
Format=TabDelimited 
Col1=First_Name Text 
Col2=Middle_Initial Text 
Col3=Last_Name Text 
------------------Schema.ini file ends here----------------- 

Sau đó sử dụng đoạn mã sau để tải file data.txt:

string fileName = string.Format("{0}", AppDomain.CurrentDomain.BaseDirectory); 
string connectionString = string.Format(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0}; " + "Extended Properties=\"text;HDR=YES;FMT=TabDelimited;\"", fileName); 
string sql = "select * from " + "Data.txt"; 

OleDbConnection con = new OleDbConnection(connectionString); 
con.Open(); 

OleDbDataAdapter dap = new OleDbDataAdapter(sql, con); 
DataTable dt = new DataTable(); 
dt.TableName = "Data"; 
dap.Fill(dt); 

con.Close(); 
Các vấn đề liên quan