Чтение текстового файла с фиксированным форматом - часть 2 - PullRequest
0 голосов
/ 30 января 2012

Это дополнительный вопрос к вопросу :

Я пытаюсь прочитать текстовый файл с фиксированным форматом, используя поставщик Microsoft.ACE.OLEDB.12.0.У меня есть полдюжины разных способов настройки драйвера и / или провайдера, и каждый раз я сталкиваюсь с одной и той же проблемой.Я по какой-то причине не могу даже «начать работу» из-за «Не удалось найти устанавливаемые ISAM» исключения или ошибки и исключения с драйвером.

В системе установлен Office 2007, поэтому «Не удалось найти устанавливаемый ISAM»"не имеет большого смысла.

Кто-нибудь видит проблему со следующим кодом?

string DATABASE_PROVIDER = "Provider=Microsoft.ACE.OLEDB.12.0";
string CVS = Application.StartupPath + @"\Data.txt";
string connectionString = DATABASE_PROVIDER = ";Data Source=" + CVS +";Extended Properties=text;HDR=Yes;FMT=Fixed";
string field ="*";
string table ="Data";
string StringQueryCMD = "SELECT" + field+" FROM " + table;
OleDbConnection myConnection = new OleDbConnection( connectionString );
OleDbCommand cmd = myConnection.CreateCommand();
cmd.CommandText = StringQueryCmd;
myConnection.Open(); // <---- "Could not find installable ISAM" exception here
OleDataAdapter myDataAdapter = new OleDbDataAdapter(cmd);
DataTable Table = new DataTable("Data");// <---- "Could not find installable ISAM" exception here

myDataAdapter.Fill(Table);

Ответы [ 2 ]

2 голосов
/ 30 января 2012

Я бы использовал библиотеку FileHelpers для чтения файла фиксированной длины, а не ADO.Net.

обновление В этом случае я думаю вам нужен INI-файл рядом с TXT-файлом, который определяет TXT-файл. ширина столбцов, имена и т. д.

другой вариант - вообще отказаться от ado.net и создать простую программу чтения файлов фиксированной длины.

var file = new FileInfo("path");
using(var reader = file.Open())
while(reader.Read())
{
   //parse the line
   yield return the object representing the parsed line.
}
0 голосов
/ 02 февраля 2012

В итоге я выбрал немного другое решение.Решением для исключения «Не удалось найти устанавливаемый ISAM» было использование следующего:

string EXTENDED_PROPERTIES = @"Extended Properties=""Text;HDR=YES;FMT=FixedLength;""";

Ключом к решению являются " (s) вокруг« Расширенные свойства »значений. Мне удалось заполнить DataTable содержимым файла, я думаю, что была проблема с INI-файлом, поэтому он содержал строки «-----», которые были для меня бесполезны.

Итак, я просто прочитал базу данных доступа.

string DATABASE_PROVIDER = "Provider=Microsoft.ACE.OLEDB.12.0";
string CVS Application.StartupPath + ""\\Database.accdb";
string DATA_SOURCE = "Data Source" + CVS;
string connectionString = DATABASE_PROVIDER + DATA_SOURCE;
string TABLE = " FROM STUFF";
string SELECT = "SELECT CODE, NAME, ICON, FUNCTION;
string StringQueryCmd = SELECT + TABLE;

OleDbConnection MyConnection = new OleDbConnection(connectionString);
OleDbCommand Command = OleDbCommand(StringQueryCmd,MyConnection);
OleDbAdapter MyDataAdapter = new OleDbAdapter(Command);
DataSet MyDataSet = new DataSet();
DataTable MyDataTable = new DataTable();
MyConnection.Open();
MyDataAdapter.Fill(MyDataSet,"STUFF");
MyConnection.Close();

Получив DataTable, вы теоретически можете использовать LINQ to DataSet вместо работы с DataTable.

...