我正在使用C#。
我正在尝试将文本文件拉入对象。我正在使用ODBC连接,它看起来像这样
Driver = {Microsoft Text Driver(* .txt; * .csv)}; Dbq = C:\ Users \ Owner \ Desktop \ IR \ IR_Files \ Absolute; Extensions = asc,csv,tab,txt;
我能够建立连接,但我无法将列分开。我正在使用schema.ini文件,但它无法正常工作。这是我的架构文件。
[MyTextFile.CSV]
格式=分隔(|)
ColNameHeader =假
Col1 = fullstockn文字
col2 = FULLINFO文本
的MaxScanRows = 0
字符集= ANSI
文本文件如下所示。
fullstockn | FULLINFO
“555555”|
Contenu:Neuf Ttudes sur l这里有更多文字......
答案 0 :(得分:4)
我使用以下连接字符串
string connectionString = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"text;HDR=YES;Format=Delimited(|)\";", Path.GetDirectoryName(path));
和一个通常以
开头的Schema.ini文件[myFile.txt]
Format=Delimited(|)
TextDelimiter="none"
我将通过
执行阅读器command.CommandText = String.Format("SELECT * FROM [{0}]", Path.GetFileName(path));
OleDbDataReader reader = command.ExecuteReader();
此外,当我第一次调查此文本时,文本文件驱动程序上的MSDN page是有用的。具体来说,Schema.ini
文件上的page非常有用。
答案 1 :(得分:0)
是否有理由需要为此使用ODBC连接?我认为直接打开文本文件并自己解析它会更容易。
答案 2 :(得分:0)
我不知道这是否重要但是......
您可能错过了dbq属性中的结尾“\”...
编辑:实际上......在您发布的文字中,您有3列,而不是2 ...(2个管道而非1个)
答案 3 :(得分:0)
我总是自己为这种操作编写代码。这是我不久前为此目的编写的抽象类的示例。如果您愿意,可以修改它或将其子类化
public abstract class ReadTextFile : ILoadable
{
public string Path { get; set; }
public UploadFileType FileType { get; set; }
protected internal List<List<string>> Table { get; set; }
public Guid BatchID { get; set; }
/// <summary>
/// Method that loads the raw text into a collection of strings
/// </summary>
/// <returns></returns>
public bool Load()
{
Table = new List<List<string>>();
var splitter = Convert.ToChar("\t");
try
{
using (TextReader tr = new StreamReader(Path))
{
// Discard the first line
String line = tr.ReadLine();
// Read and display lines from the file until the end of the file is reached.
while ((line = tr.ReadLine()) != null)
{
Table.Add(line.Split(splitter).ToList<string>());
}
tr.Close();
tr.Dispose();
}
return true;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
return false;
}
}
public string Left(string param, int length)
{
//we start at 0 since we want to get the characters starting from the
//left and with the specified lenght and assign it to a variable
string result = param.Substring(0, length);
//return the result of the operation
return result;
}
public string Right(string param, int length)
{
//start at the index based on the lenght of the sting minus
//the specified lenght and assign it a variable
string result = param.Substring(param.Length - length, length);
//return the result of the operation
return result;
}
}
答案 4 :(得分:0)
尝试使用此连接字符串
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Owner\Desktop\IR\IR_Files\Absolute\MyTextFile.CSV;Extended Properties='text'
和: