Лучший отвечающий
c# и .fin файл

Вопрос
-
Имеется файл .fin . Я открываю его с помощью моей программы и мне нужно получить сумму всех значений из столбца "I" или PRICE . Но складывать нужно только те значения, у которых в столбце N_DEPART (U) есть число. В конце нужно вывести сумму всех значений в две переменных. Первая - суммы всех значений с N_DEPART равных 1 и 3. Вторая 2 и 4 соответственно.
Помогите с чего начать. Как получить доступ к файлу и как считать определенное значение знаю . А как сделать всё это вместе пока не пойму. Прилагаю
9 апреля 2012 г. 11:30
Ответы
-
> Имеется файл .fin [...] нужно получить сумму всех значений из столбца "I" или PRICE [...] складывать нужно только те значения, у которых в столбце N_DEPART (U) есть число.
если в системе установлен oledb провайдер для .fin, то можно использовать OleDbConnection.
пример см. здесь; запрос будет примерно такой:select sum(price) from mytable where n_depart is not null
> как считать определенное значение знаю
можно загрузить данные в DataTable и выполнить необходимые вычисления.
пример см. здесь
9 апреля 2012 г. 11:59 -
Это файл FoxBASE+/Dbase III plus, родное расширение - dbf. Работать с ним можно через OleDb, примерно так:
using (var connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\database;Extended Properties=dBASE IV;")) { OleDbCommand command = new OleDbCommand("SELECT COUNT(*) FROM test.fin", connection); connection.Open(); Console.WriteLine(command.ExecuteScalar()); // 479 }
Только путь к Data Source нужно исправить на актуальный.
- Помечено в качестве ответа aNtik636 10 апреля 2012 г. 21:29
10 апреля 2012 г. 18:16Модератор -
Получилось только после установки OLE DB provider for Visual FoxPro.
Вот этот код заработал :
MyConnection = new System.Data.OleDb.OleDbConnection(@"provider=vfpoledb; Data Source='c:\';Extended Properties=dBASE IV;"); MyCommand = new System.Data.OleDb.OleDbDataAdapter("SELECT COUNT(*) FROM test.FIN", MyConnection);
10 апреля 2012 г. 21:36
Все ответы
-
> Имеется файл .fin [...] нужно получить сумму всех значений из столбца "I" или PRICE [...] складывать нужно только те значения, у которых в столбце N_DEPART (U) есть число.
если в системе установлен oledb провайдер для .fin, то можно использовать OleDbConnection.
пример см. здесь; запрос будет примерно такой:select sum(price) from mytable where n_depart is not null
> как считать определенное значение знаю
можно загрузить данные в DataTable и выполнить необходимые вычисления.
пример см. здесь
9 апреля 2012 г. 11:59 -
Здравствуйте.
А с помощью чего вы читаете данный файл? Посмотрите ответ Malobukv, если он решает проблему, то, пожалуйста, отметьте сообщение как ответ.
Спасибо.
Для связи [mail]
9 апреля 2012 г. 15:22 -
Здравствуйте.
В данный момент не могу ничего проверить к сожалению , вечером обязательно отпишусь и помечу ответы . Эти файлы открываются ДОС-овским приложением работающим под виндой.Это приложение работает с кассовыми аппаратами(приложение не моё). То , что я пытаюсь написать не относится к нему, а только к этим .фин файлам.
9 апреля 2012 г. 15:49 -
Если использую OleDb , то выдаёт ошибку "External table is not in the expected format." при доступе к файлу. Если другие варианты? А если открыть .фин файл в Excel , то тогда получается подгрузить в датагрид весь файл , а иначе выдаёт ошибку.
- Изменено aNtik636 9 апреля 2012 г. 23:47
9 апреля 2012 г. 21:56 -
> Если использую OleDb , то выдаёт ошибку "External table is not in the expected format." при доступе к файлу.
какую строку подключения указывали? как для Excel?
10 апреля 2012 г. 7:16 -
MyConnection = new System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source='c:\\test.FIN;Extended Properties=Excel 8.0;"); Строка подключения примерно такая.10 апреля 2012 г. 9:35
-
Файл точно не в CSV-формате? Попробуйте открыть notepad-ом. Или выложите пример куда-нибудь в общий доступ (с левыми значениями).10 апреля 2012 г. 15:38Модератор
-
Это файл FoxBASE+/Dbase III plus, родное расширение - dbf. Работать с ним можно через OleDb, примерно так:
using (var connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\database;Extended Properties=dBASE IV;")) { OleDbCommand command = new OleDbCommand("SELECT COUNT(*) FROM test.fin", connection); connection.Open(); Console.WriteLine(command.ExecuteScalar()); // 479 }
Только путь к Data Source нужно исправить на актуальный.
- Помечено в качестве ответа aNtik636 10 апреля 2012 г. 21:29
10 апреля 2012 г. 18:16Модератор -
Как только не пробую всё равно "The Microsoft Jet database engine could not find the object 'test.FIN'. Make sure the object exists and that you spell its name and the path name correctly". Хотя файл там есть , путь писал по разному . Что я делаю не так?
private void button2_Click(object sender, EventArgs e) { using (var connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\;Extended Properties=dBASE IV;")) { OleDbCommand command = new OleDbCommand("SELECT COUNT(*) FROM test.FIN", connection); connection.Open(); Console.WriteLine(command.ExecuteScalar()); // 479 } }
10 апреля 2012 г. 18:55 -
> Как только не пробую всё равно "The Microsoft Jet database engine could not find the object 'test.FIN'.
укажите полный путь к файлуvar path = @"c:\temp\test.fin"; var dbc = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+path+";Extended Properties=dBase IV");
если соединение откроется без ошибок, то получить названия таблиц можно с помощью GetSchema. пример см. здесь - GetTables
- Изменено Malobukv 10 апреля 2012 г. 20:37
10 апреля 2012 г. 20:34 -
Получилось только после установки OLE DB provider for Visual FoxPro.
Вот этот код заработал :
MyConnection = new System.Data.OleDb.OleDbConnection(@"provider=vfpoledb; Data Source='c:\';Extended Properties=dBASE IV;"); MyCommand = new System.Data.OleDb.OleDbDataAdapter("SELECT COUNT(*) FROM test.FIN", MyConnection);
10 апреля 2012 г. 21:36 -
11 апреля 2012 г. 6:44