![]() |
#4 |
Участник
|
Цитата:
Сообщение от gl00mie
![]() См. также http://fastdbf.codeplex.com
Некоторые особенности этого варианта: - штатно нельзя задать кодировку символов файла при чтении (по умолчанию она в стандартной западной кодировке, а российские файлы DBF кодируются в кодировке 866, в основном). Пришлось "подправить" это в DLL. - прилагается. - текстовые поля возврашаются без "обрезанных" с права пробелов, например X++: "Адыгея " А во остальном этот вариант - очень даже "FastDbf" ![]() Вот пример использования на том же примере... Файл - 198 тыс строк, время работы примера - 21 секунда, даже быстрее чем предидущий пример!!! X++: static void DBFTest(Args _args) { SocialExplorer.IO.FastDBF.DbfFile dbfFile; SocialExplorer.IO.FastDBF.DbfRecord dbfRecord; SocialExplorer.IO.FastDBF.DbfHeader dbfHeader; int cnt; int i; str name; str code; int name_idx; int code_idx; int t1, t2; ; new InteropPermission(InteropKind::ClrInterop).assert(); try { t1 = timeNow(); dbfFile = new SocialExplorer.IO.FastDBF.DbfFile(); dbfFile.Open("c:\\KLADR.DBF", System.IO.FileMode::Open); dbfHeader = dbfFile.get_Header(); cnt = dbfHeader.get_RecordCount(); // определяет количество строк в файле dbfRecord = new SocialExplorer.IO.FastDBF.DbfRecord(dbfHeader, System.Text.Encoding::GetEncoding(866)); // можно задать кодировку в dbf файле // определение порядкового номера столбца по его имени name_idx = dbfRecord.FindColumn("name"); code_idx = dbfRecord.FindColumn("code"); info(strFmt("строк в файле %1", cnt)); for (i = 0; i < cnt; i++) { dbfFile.Read(i, dbfRecord); name = dbfRecord.get_Item(name_idx); // Для корректного отображения результата по текстовым полям нужно использовать strrTrim для удаления пробелов в конце строки name = strRtrim(name); code = dbfRecord.get_Item(code_idx); } dbfFile.Close(); } catch (exception::CLRError) { error(AifUtil::getClrErrorMessage()); dbfFile.Close(); } catch (exception::Internal) { throw error("Internal"); } t2 = timeNow(); info(strFmt("Время обработки %1", t2 - t1)); } |
|
Теги |
.net, dbf, fastdbf, законченный пример, полезное |
|
|