使用 OleDbConnection 读取制表符分隔的文件

发布于 2024-09-29 23:55:55 字数 919 浏览 6 评论 0原文

我的制表符分隔文件是这样的:

ISO ISO3    ISO-Numeric
AD  AND 20

我一直在尝试以下代码,但没有成功。

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);

这是数据集可视化工具的屏幕截图。它显然不是我想要的输出。 alt text

有什么建议吗?这是我的 Schema.ini 文件。它与文本文件位于同一目录中。

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

我应该使用类似 FileHelpers 的东西吗?


@Hans Passant 这是一个屏幕截图。 替代文本

My tab-delimited file is something like this:

ISO ISO3    ISO-Numeric
AD  AND 20

I've been trying the following code with no luck.

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);

Here's a screenshot of the Dataset Visualizer. Its obviously not the output i'm after.
alt text

Any suggestions? Here's my Schema.ini file. Its in the same directory as the text file.

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

Should i just use something like FileHelpers instead?


@Hans Passant Here's a screenshot.
alt text

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

够运 2024-10-06 23:55:55

创建 schema.ini 文件并将其保存到包含以下文本的应用程序文件夹中:

------------------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-----------------

然后使用以下代码加载 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();

Create and save an schema.ini file into the application folder containing the following text:

------------------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-----------------

Then use the following code to load the Data.txt file:

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();
你好,陌生人 2024-10-06 23:55:55

嗯,一个明显的候选者是这个空白实际上不是制表符而是空格。尝试 FMT=Delimited( )。使用十六进制查看器查看实际情况。背景资料在这里

此帖子说明了原因使用像 Jet 这样有缺陷的代码块,在过去的 9 年里一直不受支持,这就是一个错误。有了答案,将 schema.ini 中的第一行留空。

Well, one obvious candidate is that this white space isn't actually a tab but spaces. Try FMT=Delimited( ). Use a hex viewer to see what's really there. Backgrounder is here.

And this thread shows why using a buggy chunk of code like Jet that hasn't been supported for the past 9 years is such as mistake. With the answer, leave the first line in schema.ini blank.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文