leo пишет:
цитата: |
В Harbour с недавнего времени появилась реализация замечательных функций для обработки текстовых файлов, которая давно реализована в xHarbour и перекочевавшая туда из известной библиотеки Nanfor.lib. Имею ввиду комплект функций из FTTEXT.C. Так вот сегодня наткнулся на ошибку, связанную с обработкой конца файла. |
|
Вообще, то функции FT_F* для Harbour существуют давно
19990528-21:00 WIB Andi Jahja <andij@aonlippo.co.id>
..
+ source/tools/hb_f.c
nanforum ft_f*() clones
Но настоящее портирование библиотеки Nanfor.lib сделано совсем недавно
2007-10-23 13:30 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
..
! FT_F*() functions fully ported from original NFLIB.
Pls test.
..
Сейчас в состав xHb входит FTTEXT.C полностью переписанный тем же Andi Jahja в 2005 году.
* Nanforum Toolkit simulation of text file handlers
* Ideas by Brice de Ganahl and Steve Larsen
* Total rework using xHarbour array implementation by Andi Jahja
Причем, это действительно лишь "вариации на тему" - IMHO полная несовместимость с Clipper Nanfor, добавлены некоторые функции, не реализованные в исходной библиотеке, но это не проблема, главная проблема заключается в том, что функции возвращают не тот результат, который бы можно было ожидать используя Clipper Nanfor.lib.
Для примера в исходной библиотеке функция FT_FUSE() возвращает handle открытого файла или 0 в случае неудачи, в xHb libnf таже функция возвращает в зависимости от результата TRUE/FALSE.
Также функции получают различное число параметров (например FT_INSERT - в Clipper функцию должен быть передан 1 параметр, для xHb их уже 2).
Но даже тем пользователям, которые не портируют свои приложения из Clipper, а пишут новые програмы используя libnf.lib из состава xHb придется немного понервничать.
Так типичный пример, взятый из Nanfor.NG не будет работать:
ft_fUse( "text.txt" )
ft_fUse()
в xB перед работой нужно вызывать ft_fselect( 1 )
Сл.пример приведет к GPF:
PROCEDURE main()
? ft_fdeleted()
ft_fselect( 1 )
ft_fUse( "text.txt" )
ft_fUse()
Функция FT_FUSE() без параметров в некоторых случаях приводит к memory leaks.
Так что качество реализации и совместимость однозначно желают лучшего.
Но в данном примере действительно Harbour FT_F* спотыкается на некоторых файлах ( CHR(0)+CHR(0)?), в xHb - без проблем ( к сожалению, я сейчас не могу проверить связку Clipper + nanfor.lib - как там обстоят дела ).
Будем надеяться, что разработчики Harbour разберутся с этой ошибкой.
Пользователи xHb вообще попали в пикантную ситуацию - сделав FT_F* функции совместимыми с Clipper Nanfor, можно потерять совместимость с xHb, кто-то же наверняка использовал их с 2005 года.
Я для себя сделал порт xHb FTTEXT.C для Harbour, если кому нужно (перешел на Harbour или планирует перейти и не хочет сильно переписывать исходники) - могу выслать.