Форум » [x]Harbour » scope аномалия » Ответить

scope аномалия

new2: перевожу программу с clipper 5.2 на harbour. Версия из последних ночных сборок. Столкнулся с неработой в sixcdx функций создания scope: sx_setscope. На форуме это уже проходило. (Странно, что не исправили, но судя по changelog разработчики сосредоточены на вещах далеких от прикладных. Хотя это тоже конечно надо.) Заменил вызовы на ordscope - стало получше, но ordscope(0) не работает. Попробовал (ради смеха) ordscope(0, NIL) - работает. Получается, что компилятор по разному передает параметры функции? Даже если бы это была такая фича свойственная ordscope() - компилятор не должен был бы так работать. Это можно поправить? Продолжая тему ошибок. Как-то ранее натолкнулся на то, что вываливает программу функция из xhb.lib:fparse.c, кажется FPARSELINE() Есть ли смысл куда-то сообщать о найденных ошибках? И еще, исходные тексты rmdbfcdx только за деньги (хочется чтобы функции m6_ заработали, да и scope может нормальные будут)? Или не имеет смысла - оставить в программе один ads?

Ответов - 6

alx_on: new2 А что должна была сделать функция ordscope(0)? ordscope(0) - просто возвращает предыдущий top scope ordscope(0,NIL) - сбрасывает верхнюю скопу

Петр: new2 пишет: Попробовал (ради смеха) ordscope(0, NIL) - работает. А над чем смеялись? Вы документацию когда в последний раз читали? ORDSCOPE() Syntax ORDSCOPE(<nScope>, [<expNewValue>]) --> uCurrentValue Arguments .. <nScope> is a number specifying the top (TOPSCOPE) or bottom (BOTTOMSCOPE) boundary. Note: To use the TOPSCOPE and BOTTOMSCOPE constants, you must include (#include) the Ord.ch header file in your application. <expNewValue> is the top or bottom range of key values that will be included in the controlling order's current scope. <expNewValue> can be an expression that matches the data type of the key expression in the controlling order or a code block that returns the correct data type. Omitting <expNewValue> or specifying it as NIL has the special effect of resetting the specified scope to its original default. The default top range is the first logical record in the controlling order, and the default bottom range is the last logical record. Returns If <expNewValue> is not specified, ORDSCOPE() returns and clears the current setting. If <expNewValue> is specified, the function sets it and the previous setting is returned. Description The range of values specified using ORDSCOPE() is inclusive. In other words, the keys included in the scope will be greater than or equal to the top boundary and less than or equal to the bottom boundary. Note: To return current settings without changing them, call the DBORDERINFO() function using the DBOI_SCOPETOP and DBOI_SCOPEBOTTOM constants. Получается, что компилятор по разному передает параметры функции? ???!!! new2 пишет: Продолжая тему ошибок. Как-то ранее натолкнулся на то, что вываливает программу функция из xhb.lib:fparse.c, кажется FPARSELINE() Есть ли смысл куда-то сообщать о найденных ошибках? Конечно есть, только убедитесь, что действительно присутствует ошибка; четко сформулируйте проблемму, подготовьте небольшой самодостаточный пример для иллюстрации. И еще - для портирования с Clipper 5.2 на Harbour xhb.lib вообще-то не нужна. Ночные сборки тоже не для портирования, а для тестирования самого Harbour.

new2: Петр пишет: Omitting <expNewValue> or specifying it as NIL has the special effect of resetting the specified scope to its original default. Да тут так и написано: пропуск второго параметра ИЛИ указание его в NIL сбрасывает scope получается, компилятор различает вызовы funname(p1) и funname(p1,NIL). Всегда считал, что если в функцию параметр не передается, то в функции он равен NIL. пример, в котором присутствует ошибка взят из описания функции в xHarbour Language Reference Guide (Version 1.1) строим так: hbmk2 fn.prg xhb.lib PROCEDURE Main() LOCAL cText, aData cText := '"Jones, Mr",Male,"Oklahoma","IL",20041231,"Director, President"' aData := FParseLine( cText ) FOR EACH cText IN aData ? LTrim( Str( HB_EnumIndex() ) ), cText NEXT ** Output // 1 Jones, Mr // 2 Male // 3 Oklahoma // 4 IL // 5 20041231 // 6 Director, President RETURN В xHb пример работает Петр пишет: И еще - для портирования с Clipper 5.2 на Harbour xhb.lib вообще-то не нужна. Согласен, просто, когда переводил программу, искал замену для своих С и asm модулей и попалась эта функция. Конечно, я и без нее обошелся. Согласен и насчет ночных сборок. Но я, пока, и занимаюсь тестированием харбора. А по третьему вопросу?


Петр: Еще раз взгляните на синтаксис ORDSCOPE(<nScope>, [<expNewValue>]) а не ORDSCOPE(<nScope> [,<expNewValue>]) Omitting выглядит как ORDSCOPE( 0, ), а не ORDSCOPE( 0 ) получается, компилятор различает вызовы funname(p1) и funname(p1,NIL) Естественно, в первом случае в функцию передается один параметр, во втором - два, и в случае ORDSCOPE( 0, ) - тоже два. ORDSCOPE(..) относится к числу функций, поведение которых зависит от числа переданных параметров, вот и все. new2 пишет: пример, в котором присутствует ошибка я посмотрю А по третьему вопросу? Понятия не имею, что это такое и зачем оно нужно.

new2: Петр Спасибо за четкое разъяснение по скопе. Был невнимателен. Петр пишет: Понятия не имею, что это такое и зачем оно нужно. rmdbfcdx это rdd dbfcdx с поддержкой RushMore, т.е. быстрых фильтров. Является одним из основных отличий в комплектации платного и бесплатного xHb. Ее автор Przemyslaw Czerpak о ней: ..... I do not plan to public RMAP (RMDBFCDX/RMDBFNTX) library code. IMHO without xHarbour.com some things like professional documentation had never been created and if RMAP helps them to keep their work then at least now I will keep this code private. Вполне понятное желание, но может есть у кого?

Петр: new2 пишет: I do not plan to public RMAP (RMDBFCDX/RMDBFNTX) library code. Вчера Przemyslaw Czerpak написал в dev list Hi, > Viktor and others, > Are there any specific technical limitations to port RMDBFCDX to Harbour ? DBRMAP library works with Harbour from the beginning. > In our forums several xHarbour users, wanting to migrate to Harbour, have > commented that the lack of RMDBFCDX support on Harbour, is stopping them to > migrate. In few months new version of DBRMAP with some extensions like file IO caches will be available as commercial library. I plan to prepare also few other commercial libraries and extensions to Harbour. I'll send message about it when I'll be ready. best regards, Przemek



полная версия страницы