powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / [Объявление] Библиотека пользовательских функции FoxPro на C
116 сообщений из 116, показаны все 5 страниц
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34082426
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дамы и Господа,

Я хотел бы предложить вам следующие пользовательские функции FoxPro

IFOR() «непосредственный» FOR цикл
IWHILE() «непосредственный» WHILE цикл
ICASE() «непосредственный» CASE условный переход
IEXECCASE() «непосредственный» CASE условный переход, с выполнением одной или нескольких команд после условий
IEXECIF() «непосредственный» IF условный переход, с выполнением одной или нескольких команд после условий
EXECUTE() выполняет строку команд, разделенных символом “;”, подобно макроподстановке
NPRECISION() возвращает количество знаков после десятичной точки в числовом выражении
FIELDNUM() возвращает порядковый номер поля в таблице по имени поля
DANSLISTE() определяет находится ли число в списке значений типа «1,5,13-18»
INCREMENT() увеличивает переменную на 1 и возвращает результат

Функции для работы с массивами
ARRAYSUM() возвращает сумму числовых элементов заданного столбца массива
ARRAYAVG() возвращает среднее значение числовых элементов заданного столбца массива
ARRAYMIN() возвращает минимальное значение элементов заданного столбца массива
ARRAYMAX() возвращает максимальное значение элементов заданного столбца массива
ARRAYCNT() возвращает количество числовых элементов заданного столбца массива
ASCANQUICK() аналогична встроенной функции ASCAN(), за исключением того, что осуществляет бинарный поиск по столбцу в заранее отсортированном массиве
GETALLWORDS() помещает в глобальный массив все слова из строки или memo поля

Функции конвертации арабских чисел в римские и наоборот
ARABTOROMAN() преобразует обычное число в римское число (от 1 до 3999)
ROMANTOARAB() преобразует римское число в обычное число (от I до MMMCMXCIX)

Более 11 000 человек во всем мире уже загрузили мои функции для MS SQL Server, надеюсь, что и данные функции будут полезными и для Вас.

Вышеупомянутые функции имеются для следующих версий FoxPro (VFP 9.0, 8.0, 7.0 и т.д., FoxPro 2.6 for DOS).

Вы можете загрузить русскую версию данной библиотеки по адресу
http://]ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.zip

С наилучшими пожеланиями,
Игорь Никифоров
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34082601
Игорь2004Дамы и Господа,

Я хотел бы предложить вам следующие пользовательские функции FoxPro

IFOR() «непосредственный» FOR цикл
IWHILE() «непосредственный» WHILE цикл
ICASE() «непосредственный» CASE условный переход
IEXECCASE() «непосредственный» CASE условный переход, с выполнением одной или нескольких команд после условий
IEXECIF() «непосредственный» IF условный переход, с выполнением одной или нескольких команд после условий
EXECUTE() выполняет строку команд, разделенных символом “;”, подобно макроподстановке
NPRECISION() возвращает количество знаков после десятичной точки в числовом выражении
FIELDNUM() возвращает порядковый номер поля в таблице по имени поля
DANSLISTE() определяет находится ли число в списке значений типа «1,5,13-18»
INCREMENT() увеличивает переменную на 1 и возвращает результат

Функции для работы с массивами
ARRAYSUM() возвращает сумму числовых элементов заданного столбца массива
ARRAYAVG() возвращает среднее значение числовых элементов заданного столбца массива
ARRAYMIN() возвращает минимальное значение элементов заданного столбца массива
ARRAYMAX() возвращает максимальное значение элементов заданного столбца массива
ARRAYCNT() возвращает количество числовых элементов заданного столбца массива
ASCANQUICK() аналогична встроенной функции ASCAN(), за исключением того, что осуществляет бинарный поиск по столбцу в заранее отсортированном массиве
GETALLWORDS() помещает в глобальный массив все слова из строки или memo поля

Функции конвертации арабских чисел в римские и наоборот
ARABTOROMAN() преобразует обычное число в римское число (от 1 до 3999)
ROMANTOARAB() преобразует римское число в обычное число (от I до MMMCMXCIX)

Более 11 000 человек во всем мире уже загрузили мои функции для MS SQL Server, надеюсь, что и данные функции будут полезными и для Вас.

Вышеупомянутые функции имеются для следующих версий FoxPro (VFP 9.0, 8.0, 7.0 и т.д., FoxPro 2.6 for DOS).

Вы можете загрузить русскую версию данной библиотеки по адресу
http://]ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.zip

С наилучшими пожеланиями,
Игорь Никифоров
По крайней мере в:
автор
IFOR() «непосредственный» FOR цикл
IWHILE() «непосредственный» WHILE цикл
ICASE() «непосредственный» CASE условный переход
IEXECCASE() «непосредственный» CASE условный переход, с выполнением одной или нескольких команд после условий
IEXECIF() «непосредственный» IF условный переход, с выполнением одной или нескольких команд после условий
FIELDNUM() возвращает порядковый номер поля в таблице по имени поля
INCREMENT() увеличивает переменную на 1 и возвращает результат

не вижу необходимости.
Или пусть автор подробно объяснит что такое "непосредственный" в его понимании и приведет примеры, когда его функции более эффективны, чем стандартные....
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34082621
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Каждая функция имеет детальное описание в CHM файле с примерами, скажем IFOR ()
____________________________________________________
IFOR () «непосредственный» FOR цикл
Выполняет одну или несколько команд в FOR цикле, возможное полезное применение, например, в отчетах.

IFOR (cExpression, nFinalValue, cExecutedExpressions [,nIncrement[, ReturnedExpression]])
Тип возвращаемого значения определяется пользователем, по умолчанию Logical .F.

Параметры
Первый параметр cExpression символьный тип
в данной строке осуществляется объявление и присвоение начального значения переменной for цикла, например, ”i = 1”, данная строка будет выполнена аналогично выполнению макроподстановки
Второй параметр nFinalValue числовой тип
конечное значение переменной for цикла
Третий параметр cExecutedExpressions символьный тип
строка исполняемых внутри цикла команд, разделенных символом “;”, причем
циклы и условные переходы не поддерживаются, каждая подстрока из строки будет выполняться подобно макроподстановке.
Четвертый (необязательный) параметр nIncrement числовой тип
шаг for цикла, по умолчанию 1
Пятый (необязательный) параметр ReturnedExpression символьный тип
переменная или выражение, которое будет оценено подобно тому, как оценивает выражения функция EVALUATE() и результат оценки затем будет возвращен функцией IFOR,
по умолчанию возвращается .f.

Примеры:
1) выводит на устройство вывода квадраты первых 25 натуральных чисел и возвращает сумму ряда квадратов первых 25 натуральных чисел, создавая при этом массив, содержащий квадраты первых 25 натуральных чисел.


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Set Library To St_Denis Additive

Clear
Sum_Elems =  0 
?IFOR("i=1", 25 ,"dimension laArr(i) ;laArr(i) = i**2;?laArr(i);Sum_Elems=Sum_Elems+laArr(i)", 1 ,"Sum_Elems")
* это полностью аналогично следующему коду
Sum_Elems =  0 
For i =  1  To  25 
   Dimension laArr(i)
   laArr(i) = i** 2 
   ?laArr(i)
   Sum_Elems = Sum_Elems + laArr(i)
Endfor
?Sum_Elems

Release Library  St_Denis
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34082751
piva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А на кой ляд это надо ?
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34083662
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pivaА на кой ляд это надо ?
Человек хочет на нас денег сделать?
Пусть автор прояснит свою позицию.

Если так, то мы это сообщение быстренько удалим...
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34083935
Sergey Ch pivaА на кой ляд это надо ?
Человек хочет на нас денег сделать?
Пусть автор прояснит свою позицию.

Если так, то мы это сообщение быстренько удалим...
Да нет, отдает бесплатно... Даже с исходными кодами (за что автору - респект)....
Как пишет автор, это его хобби...
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34083965
Aijik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЧеловек хочет на нас денег сделать?
Пусть автор прояснит свою позицию.

Скачать архив и посмотреть его не судьба?
Человек потратил время, оформил, бесплатно отдал (с С++ исходниками, плюс вариант с отдельной реализацией функций на чистом FoxPro), а ему еще по башке... Россия-матушка...
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34084024
Aijik авторЧеловек хочет на нас денег сделать?
Пусть автор прояснит свою позицию.

Скачать архив и посмотреть его не судьба?
Человек потратил время, оформил, бесплатно отдал (с С++ исходниками, плюс вариант с отдельной реализацией функций на чистом FoxPro), а ему еще по башке... Россия-матушка...
Ключевое слово: "СКАЧАТЬ".... Т.е. приобрести (вообще-то) "кота в мешке"... Оно многим надо? Тем более, что автор изначально не показал преимуществ своей библиотеки перед существующими средствами и вариантов ее использования...
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34084057
Aijik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так может надо было все-таки сначала "СКАЧАТЬ" и убедиться в своих предположениях, прежде чем писать их, либо вовсе не писать?

Впрочем ладно, моё какое дело... :)
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34084281
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aijik Скачать архив и посмотреть его не судьба? ...
А зачем? Почти все уже давно есть в стандартном наборе FoxPro, а если что-то надо экзотическое, то пишется "левой ногой" и не всегда по пути, выбранном автором... Пример же приведенный в тексте форума очень похож на задание для студентов, учащихся программированию...

Тем более автор не указал, что он хочет сделать со своими библиотеками... Подождем, когда в Канаде наступит рассвет
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34085193
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор“приведет примеры, когда его функции более эффективны, чем стандартные....”Стандартных функций, делающих то же, что и мои функции в FoxPro нет, мои функции можно написать, используя стандартные, что я и сделал. Затем показал разницу в скорости между функциями, написанными на C и на FoxPro.

автор”Как пишет автор, это его хобби...”Именно так.
автор”Ключевое слово: "СКАЧАТЬ"..... Оно многим надо?»Приблизительно каждый седьмой, из просмотревших сообщение скачивает, какой процент из скачавших реально использует мне неизвестно, некоторые переделывают исходный код под свои потребности. Те же шесть седьмых от общего количества просмотревших и не скачавших, просто не нуждаются в подобного рода функциях, некоторые уверены, что способны быстро написать нечто подобное.

автор»Т.е. приобрести (вообще-то) "кота в мешке".»В этом то и проблема, практически все что я встречал в Интернете содержало различного рода ошибки, мои функции ошибок не содержат, по крайней мере большая часть времени ушла именно на устранение ошибок. Я, например, нашел ошибки во встроенных функциях Visual FoxPro, MS SQL Server, DB2, Sybase.
Еще пример на сайте http://]http://msdn.microsoft.com/vfoxpro/default.aspx
справа в разделе "Top Downloads" есть ссылка на функции, похожие на FoxPro, но вызываются из .NET http://]http://foxcentral.net/microsoft/VFPToolkitNET.htm
Я нашел в них шесть ошибок, написал автору дважды, но он не ответил.

автор»автор изначально не показал преимуществ своей библиотеки перед существующими средствами и вариантов ее использования...»
Как раз все ровно наоборот. В файле документации все изложено подробнейшим, даже можно сказать, излишне подробнейшим образом. Может быть, не хватает примера применения некоторых функций в отчетах, но большинство людей все равно документацию не читают.
автор»Человек потратил время, оформил»Большая часть времени ~ 98 процентов, уходит на отладку и оформление.

автор»Тем более автор не указал, что он хочет сделать со своими библиотеками...»Предложить их широкой публике.
Сейчас нужно закончить перевод описания на английский, французский, испанский и немецкий и опубликовать.

автор» то пишется "левой ногой" и не всегда по пути, выбранном автором...»
К сожалению, многое из того, что мне встречалось, было написано именно "левой ногой". Но я расцениваю данную Вашу фразу как «быстро пишется», то есть, положим, минут за 15, если есть желание Вы можете быстро написать, скажем, функцию
GETALLWORDS() которая помещает в глобальный массив все слова из строки или memo поля, я же попробую затем детально показать в чем будет отличие между написанным Вами и мной. И Вам станет понятно, что предлагать вещи, написанные «левой ногой» широкой публике, означает просто красть ее время, но некоторые так и делают.


Вот, к примеру, ошибка найденная мной во встроенной функции ASORT()
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Set Exact On
pnStart =  30 
For pnI = pnStart To  42 
   Dimension laTestAsort(pnI +  1  - pnStart,  1 )
   laTestAsort(Alen(laTestAsort, 1 ),  1  ) = Chr(pnI)
Endfor
laTestAsort( 1 ,  1  ) = ""
=Asort(laTestAsort, 1 )
Display Memory Like laTestAsort
?[ Set Exact  ]+Set("exact"), [ массив отсортирован неправильно, поскольку первый элемент больше второго элемента, должно быть наоборот ]
?[ laTestAsort( 1 ,  1  )  >   laTestAsort( 2 ,  1  ) ], laTestAsort( 1 ,  1  )  >   laTestAsort( 2 ,  1  )
Дабы подкрепить вышеизложенное, приведу несколько цитат: [иногда исправление 1% ошибок занимает 500% усилий.],
[пример того как "последний 1% кода занимает 90% времени".], взято отсюда http://]http://russian.joelonsoftware.com/Articles/Craftsmanship.html, написано замечательным программистом Джоелем Спольски (Joel Spolsky) Кстати, рекомендую всем творчество Джоеля Спольски, на мой взгляд, весьма увлекательное и поучительное чтение.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34085408
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По поводу последнего примера. ASORT() тут вообще не при чем. Вы слишком много кода написали, который только затуманивает как сам смысл, так и проблему. Все проверяется более элементарно.

Код: plaintext
1.
2.
3.
4.
5.
SET EXACT ON
?"" > CHR( 31 )

SET EXACT OFF
?"" > CHR( 31 )

Весь вопрос в том, чем именно дополняется более короткое выражение до длины более длинного: Chr(32) или Chr(0).

Судя по результату, происходит дополнение именно пробелом. Chr(32). Так что, все логично.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34085636
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to ВладимирМ
Выражу свои мысли более подробно.
Итак, в упорядоченном массиве каждый предыдущий элемент должен быть не больше последующего элемента, причем сравнение должно проводиться по тем же правилам, что действовали в момент упорядочения массива.
Установка Set Exact влияет на правила сравнения символьных выражений, совершенно неважно, какие именно правила сравнения действуют, вышеприведенный принцип должен соблюдаться, иначе либо имеется ошибка функции сортировки, либо имеется ошибка в сравнении символьных выражений. Приведенный мною пример, не претендующий на элегантность, это наглядно демонстрирует.
Я полагаю, что ошибка имеется в работе функции сортировке массива, в случае, когда Set Exact, упорядочиваемый столбец состоит из символьных выражений, среди которых имеется пустая строка и символьные выражения, начинающиеся с символов ASCII код которых меньше 32.

авторПо поводу последнего примера. ASORT() тут вообще не при чем. Вы слишком много кода написали, который только затуманивает как сам смысл, так и проблему.
Все ровно наоборот.
авторВесь вопрос в том, чем именно дополняется более короткое выражение до длины более длинного: Chr(32) или Chr(0). Судя по результату, происходит дополнение именно пробелом. Chr(32).Ваши рассуждения относятся к правилам сравнения, которые можно не рассматривать, важно соблюдение сформулированного выше принципа.
авторВсе проверяется более элементарно.
Что именно Вы проверили более элементарно, правила сравнения, но об них я как раз речь не вел.
авторТак что, все логично.
Что именно представляется Вам логичным, я, к сожалению, не понял.

Вот еще одна ошибка функции ASORT() , возникает при сортировке нечувствительно к регистру.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
* символы, при наличии которых в массиве, функция Asort()
* в случае сортировки нечувствительной к регистру
* сортирует неправильно
* ЂђЃѓЉљЊњЌќЋћЏџЎўЈјҐґЁёЄєЇїІіЅѕ
Dimension laBugAsort( 5 )

laBugAsort( 1 ) = Chr( 134 )  && †
laBugAsort( 2 ) = Chr( 175 )  && Ї
laBugAsort( 3 ) = Chr( 128 )  && Ђ
laBugAsort( 4 ) = Chr( 191 )  && ї
laBugAsort( 5 ) = Chr( 144 )  && ђ
?[первоначальный массив]
For lnI =  1  To Alen(laBugAsort,  1 )
   ? laBugAsort(lnI), Asc(laBugAsort(lnI))
Endfor

=Asort(laBugAsort, - 1 , - 1 ,  0 ,  0 )
?[массив, отсортированный по возрастанию]
For lnI =  1  To Alen(laBugAsort,  1 )
   ? laBugAsort(lnI), Asc(laBugAsort(lnI))
Endfor

** сортируем с порядком нечувствительным к регистру
=Asort(laBugAsort, - 1 , - 1 ,  0 ,  1 )
?[массив, отсортированный по возрастанию, нечувствительным к регистру ]
?[ символ с ASCII кодом  134  оказался после символа с ASCII  кодом  144 , что неправильно]
For lnI =  1  To Alen(laBugAsort,  1 )
   ? laBugAsort(lnI), Asc(laBugAsort(lnI)), [ Is letter ], Isalpha(laBugAsort(lnI))
Endfor
?[ для массива отсортированного по возрастанию с нечувствительным к регистру способом]
?[ каждая предыдущая строка в нижнем регистре должна быть меньше либо равна]
?[ последующей строки в нижнем регистре]
?[ это не соблюдается !]
For lnI =  1  To Alen(laBugAsort,  1 ) -  1 
   If Lower(laBugAsort(lnI)) > Lower(laBugAsort(lnI+ 1 ))
      ? [Lower(']+laBugAsort(lnI)+[') > Lower(']+laBugAsort(lnI+1)+[')]
   Endif
Endfor
следующий тест показывает что функция Asort() преобразовывает при сравнении во время сортировки нечувствительной к регистру
символы именно в нижний регистр, причем в упорядоченном массиве буквы в верхнем регистре могут быть и до, и после букв в нижнем регистре

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
pnStart =  32 
For pnI = pnStart To  156 
            Dimension laTestAsort(pnI +  1  - pnStart)
            laTestAsort(Alen(laTestAsort, 1 ) ) = Chr(pnI)
Endfor
Display Memory Like laTestAsort

=Asort(laTestAsort, - 1 , - 1 , - 1 ,  1 )
Display Memory Like laTestAsort

В реальной практике все эти ошибки никогда не встретятся, но разработчики продукта в любом случае предпочли бы не иметь подобного рода ошибок.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34085815
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь2004 Я, например, нашел ошибки во встроенных функциях Visual FoxPro, MS SQL Server, DB2, Sybase.
Еще пример на сайте http://]http://msdn.microsoft.com/vfoxpro/default.aspx
справа в разделе "Top Downloads" есть ссылка на функции, похожие на FoxPro, но вызываются из .NET http://]http://foxcentral.net/microsoft/VFPToolkitNET.htm
Я нашел в них шесть ошибок, написал автору дважды, но он не ответил.
Думаю, что не открою Вам секрета - этими функциями почти никто не пользуются. Все предпочитают использовать native .NET functions, набор которых был расширен в .NET 2.0... Просто ребята на тогда еще новой волне создали эти функции, чтобы показать легкость перехода с FoxPro, но как оказалось .NET еще очень далеко до первого. Но .NET приближается к FoxPro - во второй версии уже ввели даже понятие таблица и добавили объект для управления (CurrencyManager) Так что к версии 5 он уже догонит FoxPro в нынешнем состоянии, если его не будут развивать
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34085942
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To Sergey Ch
В России наступил день, надеюсь, что сегодня еще пару ковшиков помоев плеснут на мое творчество.
авторДумаю, что не открою Вам секрета - этими функциями почти никто не пользуются.
Откуда у Вас эти сведения ?
На сайте Microsoft ссылка находится в разделе "Top Downloads", много рекламы в журналах, люди которые оставляют, вынужденно, FoxPro и переходят на .NET наверняка стараются использовать что-то уже знакомое. Значит, значительная часть Fox разработчиков, по крайней мере знакома с данными функциями.

авторПросто ребята на новой волне создали эти функцииАвтор у этих функций один, американец, индус по происхождению, еще один человек делал документацию. Вот какие ошибки я в них нашел, публикуется впервые :-) , автор на мое письмо, посланное дважды не ответил, не сказал «Спасибо» и не исправил ошибки.
__________________________________________________________________
Let's consider Public Class strings of Namespace VFPToolkit (file VFPToolkitNET_VBNET_Source.zip)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
 
 1 ) Functions Getwordcount, Getwordnum 
Public Shared Function GetWordCount(ByVal cString As String) As Long
 
Your  implementation:   the delimiters are space, tab, carriage return, line feed, and ascii( 160 )   ( method  IsWhiteSpace() )
 
VFP and my  implementation (please see the attachment):  the user can pass an optional parameter
cDelimiters Optional. Specifies one or more optional characters used to separate words in cString. 
The default delimiters are space, tab, carriage return, and line feed.
Note that GetWordCount( ) uses each of the characters in cDelimiters as individual delimiters, 
not the entire string as a single delimiter. 
 
 2 ) Functions Padc, Padr, Padl
Your  implementation:    
 Public Shared Function PadC(ByVal cExpression As String, ByVal nResultSize As Integer, ByVal cPaddingChar As Char) As String
 
Parameter cPaddingChar is one character
VFP and my  implementation:  cPaddingChar is string 
let's consider an example
?Padl("Padl", 40, "=!=")
 ' your  implementation returns  "====================================Padl"
' VFP and my  implementation  returns "=!==!==!==!==!==!==!==!==!==!==!==!=Padl"

3) Function Strtran
 
Public Shared Function StrTran(ByVal cSearchIn As String, ByVal cSearchFor As String, ByVal cReplaceWith As String, ByVal nStartoccurence As Integer, ByVal nCount As Integer) As String
 
let's consider fourth parameter nStartoccurence 
Your  implementation:    
nStartoccurence  The position in this instance where the substring begins. 
VFP and my  implementation:  
nStartOccurrence 
Specifies which occurrence of cSearchFor is the first to be replaced.
For example, if nStartOccurrence is  4 , replacement begins with the fourth occurrence of cSearchFor in cSearchIn and the first three occurrences
of cSearchFor remain unchanged. 
The occurrence where replacement begins defaults to the first occurrence of cSearchFor if you omit nStartOccurrence
let's consider fifth parameter nCount
Your  implementation:    nCount  The length of the substring. 
VFP and my  implementation:  
nCount  
Specifies the number of occurrences of cSearchFor  to replace.
If you omit nCount, all occurrences of cSearchFor , starting with the occurrence specified with nStartOccurrence, are replaced. 
 
let's consider an example
?Strtran("ABCDEFABCGHJabcQWE", "ABC", "", 2 , 1 )    ' your  implementation returns "DEFGHJabcQWE"
' VFP and my  implementation  returns "ABCDEFGHJabcQWE"
 
 4 ) Function Chrtran 
        Public Shared Function ChrTran(ByVal cSearchIn As String, ByVal cSearchFor As String, ByVal cReplaceWith As String) As String
            Dim lcRetVal As String = cSearchIn
            Dim cReplaceChar As String
            Dim i As Integer
            For i =  0  To cSearchFor.Length -  1  Step i +  1 
                If cReplaceWith.Length <= i Then
                    cReplaceChar = ""
                Else
                    cReplaceChar = cReplaceWith.Chars(i).ToString()
                End If
 
                lcRetVal = StrTran(lcRetVal, cSearchFor.Chars(i).ToString(), cReplaceChar)
            Next
            Return lcRetVal
        End Function
 
let's consider an example 
 ?Chrtran("eaba","ba","a")
Your  implementation:   Chrtran("eaba","ba","a")  ' returns "e"  Error !!!  "ea" is correctly
 
VFP and my  implementation:  Chrtran("eaba","ba","a")  ' returns "ea" 
 

5) Function  Rat
Your  implementation:   
The search performed by Rat() is excluding overlaps (method String.LastIndexOf )
let's consider an example 
?Rat("ABCA", "ABCABCABCA", 3 )
Run-time exception thrown : System.ArgumentOutOfRangeException - Index was out of range.  Must be non-negative and less than the size of the collection.
VFP and my  implementation:  - The search performed by Rat() is including  overlaps
?Rat("ABCA", "ABCABCABCA", 3 )  ' returns 1
 

6) Function  Occurs 
Here's a cooler and faster way to do occurs (excluding overlaps)
 
        Public Shared Function Occurs2(ByVal cSearchExpression As String, ByVal cExpressionSearched As String) As Integer
            Select Case cSearchExpression.Length
                Case  0 
                    Return  0 
                Case Else
                    Return (cExpressionSearched.Length - cExpressionSearched.Replace(cSearchExpression, "").Length) / cSearchExpression.Length
            End Select
        End Function
 
 7 ) Function  Replicate
Your  implementation:  
        Public Shared Function Replicate(ByVal cExpression As String, ByVal nTimes As Integer) As String
            'Create a stringBuilder
            Dim sb As StringBuilder = New StringBuilder()
 
            'Insert the expression into the StringBuilder for nTimes
            sb.Insert( 0 , cExpression, nTimes)
 
            'Convert it to a string and return it back
            Return sb.ToString()
        End Function
 
When nTimes is 0 
Run-time exception thrown : System.ArgumentOutOfRangeException - Value must be positive. Parameter name: count
 
My correction without error:  
    Public Shared  Function Replicate(ByVal cExpression As String, ByVal nTimes As Integer) As String
        Dim sb As StringBuilder = New StringBuilder   'Create a stringBuilder
        If nTimes >  0  Then
            Return sb.Insert( 0 , cExpression, nTimes).ToString()
        Else
            Return String.Empty
        End If
    End Function
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34086434
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь понял. Просто очень тяжело прорываться через Ваше нагромождение кода.

Смысл в следующем

Код: plaintext
1.
2.
3.
4.
5.
6.
SET EXACT ON
DIMENSION test( 2 )
test[ 1 ] = ""
test[ 2 ] = chr( 31 )
ASORT(test)
?test[ 1 ]>test[ 2 ]

По логике вещей, первый элемент массива после сортировки должен быть меньше, чем второй. На практике же, сравнение дает обратный результат. Первый элемент оказывается больше чем второй.

Это значит, что алгоритм сравнения элементов при сортировке массива отличается от алгоритма сравнения элементов "в лоб". По всей видимости, в данном случае при сортировке массива короткая строка дополняется символами Chr(0). Результат будет такой же, как и при сортировке полей типа VarChar

Код: plaintext
1.
2.
3.
4.
5.
create cursor test (f1 I, f2 V( 1 ))
append blank
insert into test ( 31 , chr( 31 ))
index on f2 tag f2
browse nowait

Между прочим, в описанни к SET EXACT в версии VFP9 об это говорится. Т.е. что более короткое выражение дополняется до более длинного либо пробелом, либо Chr(0). Однако не говорится, в каких случаях что именно используется.

Тут я могу сказать только то, что НИКОГДА не следует сравнивать символы разной длины. Последствия не всегда предсказуемые. И не из-за ошибок в работе функций, а из-за разного понимания того, что именно надо сравнивать. По каким правилам. Хотите получить корректное сравнение - сами озаботьтесь дополнением символов до нужной длины. В данном случае:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SET EXACT ON
DIMENSION test( 2 )
test[ 1 ] = chr( 0 )
test[ 2 ] = chr( 31 )
ASORT(test)
?test[ 1 ]>test[ 2 ]

* или
?PADR("", 1 ,chr( 0 )) > chr( 31 )



Насчет спец.символов. Что означает "не чуствительные к регистру"? Вероятно, речь идет о том, что при сравнении символы должны быть переведены в один регистр. Либо в верхний, либо в нижний. Какой регистр был выбран при сортировке массива? Проверяем

Код: plaintext
1.
2.
3.
?chr( 134 )>chr( 144 )
?lower(chr( 134 ))>lower(chr( 144 ))
?upper(chr( 134 ))>upper(chr( 144 ))

Т.е. явно видно, что работает upper(), а не lower(). Вопрос опять в том, что понимать под термином "не чувствительный к регистру". Видимо, каждый понимает под этим что-то свое. Ну и устраните эту неоднозначность. САМИ приведите символы к одному регистру.

Насчет вывода о том, что упорядочивание идет именно по нижнему регистру - опять мимо. Вы слишком прямолинейно анализируете результат. Надо "повертеть" его с разных сторон. Например, вот так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
create Cursor test (f1 I, f2 C( 1 ), up_f1 I, up_f2 C( 1 ), lw_f1 I, lw_f2 C( 1 ))
For pnI =  32  To  156 
	insert into test values (pnI,chr(pnI),;
			ASC(upper(chr(pnI))), upper(chr(pnI)),;
			ASC(lower(chr(pnI))), lower(chr(pnI)) )
Endfor
browse
index on up_f2 tag up_f2
BROWSE

Упорядочивание идет именно по ВЕРХНЕМУ регистру.

Насчет "кто первый, кто второй" - это вообще элементарно: имеем 2 ОДИНАКОВЫХ значения. Какое из них поставить первым, а какое вторым? Очевидно - без разницы. Какое первое попадется. Проверяем:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
DIMENSION test( 2 )
test[ 1 ] = "d"
test[ 2 ] = "D"
ASORT(test,- 1 ,- 1 , 0 , 1 )
?test[ 1 ]
?test[ 2 ]

* Меняем местами большую и маленькую буквы и повторяем
test[ 1 ] = "D"
test[ 2 ] = "d"
ASORT(test,- 1 ,- 1 , 0 , 1 )
?test[ 1 ]
?test[ 2 ]

Т.е. порядок следования символом при нечуствительности к регистру зависит от того, как они были расположены в исходном массиве. А, скорее всего, вообще случайно. Они же имеют ОДИНАКОВОЕ значение. Какая разница как их располагать?

PS: Вы серьезно думаете, что у всех пользователей есть такие мониторы, чтобы отобразить на экране сразу 125 строк (156-32+1)? Тестовые примеры надо писать так, чтобы с их помощью реально можно было провести тестирование.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34086480
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь2004 авторДумаю, что не открою Вам секрета - этими функциями почти никто не пользуются.
Откуда у Вас эти сведения ?
На сайте Microsoft ссылка находится в разделе "Top Downloads", много рекламы в журналах, люди которые оставляют, вынужденно, FoxPro и переходят на .NET наверняка стараются использовать что-то уже знакомое.Сведения подчерпнуты из общения с разработчиками, которых "вынудили перейти на .NET" (хотя часть из них снова вернулась на FoxPro).

На сайте Microsoft много чего находится в разделе "Top Downloads"

P.S. Насчет "пару ковшиков помоев" это Вы зря - здесь все свои люди и если кто-то выскажет что-то критическое, то я бы был за это благодарен - не много сегодня есть любителей ворошить чей-то мягко говоря код...
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34088445
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прежде всего, прощу прошения за свою ошибку.
Следующий тест показывает, что функция Asort() преобразовывает при сравнении во время
сортировки нечувствительной к регистру символы именно в ВЕРХНИЙ (а не нижний как я написал ранее) регистр,
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
pnStart =  32 
For pnI = pnStart To  156 
	Dimension laTestAsort(pnI +  1  - pnStart)
	laTestAsort(Alen(laTestAsort, 1 ) ) = Chr(pnI)
Endfor
Display Memory Like laTestAsort

=Asort(laTestAsort, - 1 , - 1 , - 1 ,  1 )
Display Memory Like laTestAsort
Разъясняю тест более детально.
Посмотрите на символы с кодами 90, 91, 97
Код: plaintext
1.
2.
?ASC('Z')  && display  90 
?ASC('[')   && display  91 
?ASC('a')  && display  97 
То есть любая латинская прописная (заглавная) буква меньше символа '[',
но любая латинская строчная буква больше данного символа.
Код: plaintext
1.
2.
3.
4.
5.
pnStart =  89 
For pnI = pnStart To  101 
   Dimension laTestAsort(pnI +  1  - pnStart)
   laTestAsort(Alen(laTestAsort, 1 ) ) = Chr(pnI)  && создаем массив содержащий символы, идущие последовательно от символа с ASCII кодом  89  до символа с ASCII  кодом   101 
Endfor
Display Memory Like laTestAsort
выводит
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
  
          (    1 )                                                                   C            "Y"
          (    2 )                                                                   C            "Z"
          (    3 )                                                                   C            "["
          (    4 )                                                                   C            "\"
          (    5 )                                                                   C            "]"
          (    6 )                                                                   C            "^"
          (    7 )                                                                   C            "_"
          (    8 )                                                                   C            "`"
          (    9 )                                                                   C            "a"
          (   10 )                                                                   C            "b"
          (   11 )                                                                   C            "c"
          (   12 )                                                                   C            "d"
          (   13 )                                                                   C            "e"
Код: plaintext
1.
=Asort(laTestAsort, - 1 , - 1 , - 1 ,  1 )  && сортируем нечувствительным к регистру образом
Display Memory Like laTestAsort
выводит
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 
          (    1 )                                                                   C            "a"
          (    2 )                                                                   C            "b"
          (    3 )                                                                   C            "c"
          (    4 )                                                                   C            "d"
          (    5 )                                                                   C            "e"
          (    6 )                                                                   C            "Y"
          (    7 )                                                                   C            "Z"
          (    8 )                                                                   C            "["
          (    9 )                                                                   C            "\"
          (   10 )                                                                   C            "]"
          (   11 )                                                                   C            "^"
          (   12 )                                                                   C            "_"
          (   13 )                                                                   C            "`"
То есть после сортировки нечувствительной к регистру, латинские строчные буквы оказываются впереди символа "[",
при нормальной сортировке латинские строчные буквы оказались бы после символа "[",
значит при сравнении во время сортировки символ вначале преобразовывался в верхний регистр, а затем сравнивался.
Таким образом, у функции ASORT мною найден только один баг.

to ВладимирМ
авторЭто значит, что алгоритм сравнения элементов при сортировке массива отличается от алгоритма сравнения элементов "в лоб" дальше опять следуют рассуждения о правилах сравнения.
Вот это я и нашел, и считаю это ошибкой функции ASORT, правила (если хотите алгоритмы) сравнения должны быть едины, при сравнении и при сортировке.

авторНИКОГДА не следует сравнивать символы разной длины. Последствия не всегда предсказуемые. И не из-за ошибок в работе функций, а из-за разного понимания того, что именно надо сравнивать. По каким правилам.Это утверждение конгениально, если правила сравнения определены, а они в FoxPro вполне определены, (Вы много раз тут к ним возвращались, хотя про сами правила я речь не вел), то почему же символьные выражения разной длины нельзя сравнивать? Никакой непредсказуемости результатов нет, есть ошибка в работе функции ASORT. Если разработчики устранят эту ошибку, то вообще все будет нормально и логично.

авторЧто означает "не чувствительные к регистру"?При сравнении прописные и строчные буква считаются равными.

авторОни же имеют ОДИНАКОВОЕ значение. Какая разница как их располагать
Об этом я и написал выше.


авторcreate Cursor test (f1 I, f2 C(1), up_f1 I, up_f2 C(1), lw_f1 I, lw_f2 C(1))
и так далее..Вы сами же индексируете по upper(chr(pnI)) , и на основе это делаете некий вывод, а если бы Вы решили проиндексировать по Str(Mod(Sin(f1),10),4,2), то и вывод был бы другой?

авторВы слишком прямолинейно анализируете результат
Я рассматриваю результат работы функции ASORT при сортировке нечувствительной к регистру, а не порядок следования в проиндексированном мной же курсоре.
автор
чтобы отобразить на экране сразу 125 строк
команда Display выводит результаты порциями,

to Sergey Ch
авторесли кто-то выскажет что-то критическое
Мало замечаний по делу, хорошо конечно, что я нашел свою ошибку в описании бага функции ASORT, и выяснил что нужно более детально описать ошибку функции ASORT в документации.

авторкто-то выскажет что-то критическое
За дельные замечания и помощь я всегда благодарен, благодарность выражается в частности, в упоминании имен людей мне помогавших на моих страницах.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34088524
Aptex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это может в хозяйстве пригодится.Однако странное явление произошло
в командном окне.VFP9SP2.
См приложение.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34088779
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Aptex
если Вы пошевелите окно мышью, то заголовок станет нормальным,
видимо, такова работа функции LCK _WSetTitle() с командным окном,
если же Вы конкретно укажете, окно с каким заголовком должно иметь новый заголовок, как например
Код: plaintext
?SETWINTITL('NewT',.f.,'cTitle1234567')
то и для командного окна все меняется нормально, но в реальной практике это не нужно, менять заголовок командного окна.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34088966
MSDN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорь2004, ты на правильном пути. VFP + C++ - сила. Только ты чуть- чуть спутал место , где "тренируются на кошках". Пока пишешь полную ****.
Удачи.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34088978
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to MSDN
Мы с Вами на ты, к сожалению не могу Вас вспомнить ?
авторПока пишешь полную ****.
Просьба ко всем любителям вести дискуссии на уровне автора предыдущего сообщения, воздержаться от реплик, если кому то невмоготу, то он может зайти в уединенное место и там вдоволь накричаться, или, лучше лупить себя по затылку, а затем заняться чисткой сараев, своим прямым делом.

Если Вы профессионал, то логично публиковать свои сообщения под своим именем, если Вы считаете мой код неоптимальным и/или неэлегантным, то крайне желательно указать свой более оптимальный и/или элегантный код, дабы авторитетно подкрепить свое мнение. С удовольствием посмотрю на лучшие, нежели мои, решения.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34089052
MSDN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорь2004, хорошо. ТЫ замените на ВЫ, смысл не изменится :)
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34089054
MSDN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На счет кода - это полный "АХТУНГ". Уж простите :))
А исходники на С++ можно посмотреть ? Код в студию.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34089057
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторНа счет кода - это полный "АХТУНГ". Уж простите :))
Что именно Вам представляется плохим ? Это не блузка и не цвет автомобиля, про которые можно просто говорить "не нравиться ", желательно указать детали, из них станет ясно, способны ли Вы предложить лучший код, либо нет,
как я понял из следующей фразы кода Вы не видели.
авторА исходники на С++ можно посмотреть ? Код в студию.
Эта ссылка была приведена в самом начале, там есть исходники, значит любой желающий может посмотреть, изменить и т.д.
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.zip
Зачем здесь заниматься графоманством, и спрашивать то, что было ясно из предыдущих сообщений ?
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34089187
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь, мы же не в суде. Зачем придираться к отдельным фразам? Я ведь тоже могу в Вашем стиле надергать цитат, а потом удивлятся, что за ерунду Вы тут понаписали. Попробую еще раз.

Итак: ASORT() и прямое сравнение символьных строк дает разный результат.

Вы сделали вывод, что неправильным (ошибочным) является именно ASORT(). Почему собственно? У Вас ведь всего 2 варианта результата. Какие есть основания считать, что ошибочен один и правилен другой?

Поэтому я решил поискать еще один (третий) вариант сравнения. Это индекс. Поскольку FoxPro в принципе не поддерживает значение индексных ключей переменной длины, то, логично предположить, что индексы будут строится как некий аналог SET EXACT ON. Т.е. обязательно дополнит более короткое выражение до длины более длинного.

Результат работы индекса совпал с результатом работы ASORT(). Т.е. имеет 3 технологии сравнения, при этом 2 из них дают одинаковый результат.

Далее, включаем "здравый смысл" и пытаемся понять ПОЧЕМУ? Т.е. понять логику сравнения в том или ином случае.

Итак, идет сравнение "пустой строки" и "НЕ пустой строки". Прямое сравнение символьных строк дает пародоксальный результат: пустое значение больше не пустого. Полный бред! Не может такого быть!

Однако если посмотреть "с другой стороны", то мы сравниваем "пустую строку" и "не печатный символ". Другими словами, пытаемся сравнить бинарные коды по правилам сравнения ТЕКСТА.

Для текста "пустая строка" - это строка состоящая из пробелов Chr(32).
Для бинарного кода "пустая строка" - это строка состоящая из Chr(0)

Очевидно, что ASORT() и индекс при сравнении используют бинарное сравнение, а прямое сравнение символьных строк предполагает некую предварительную визуализацию сравниваемых ТЕКСТОВ.

Другими словами, Вы пытаетесь сравнивать разые "сущности". Ну, примерно как сливы с яблоками. Яблоки отичаются от слив, значит, сливы надо выбросить. Это идологически вредные плоды и должны быть "испавлены".

Вот об этом я и написал. Прежде чем сравнивать символьные строки (не важно, каким способом) их надо "перевести" в одинаковые "сущности". Либо мы сравниваем ТЕКСТ (нечто видимое и печатное), либо мы сравниваем бинарный код (нечто, не обязательно видимое). Выбирая конкретную "сущность" мы выбираем и способы сравнения.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34089245
ORAselect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aijik[quot автор]Человек хочет на нас денег сделать?
Пусть автор прояснит свою позицию.

АВТОРУ БИБЛТОТЕКИ:

Спасибо, все работает. А на кой ляд объяснять людям, про С++ только в инете знающим не надо. и про то, что сишнику часто непривычно и неинтересно пользовать стандартные ф-ции фокса - им говорить бесполезно.

И про деньги - чушь собачья, когда человек предлагает халяву скачать.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34089792
MSDN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ORAselect, это не халява. Это просто "тренировочный полет маленького мальчика" в попытке быть оригинальным. Не для этого в фоксе сделана совмтестимость с С++. Совсем не для этого. Так мы скоро увидим Рашмора в натуре в реализации библиотеки на С++ :)) У команды .Net не "выходит каменный цветок", а тут такое... :))
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34089932
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To ВладимирМ
Что ж будем считать, что есть некоторое противоречие, функция ASORT() в неявном виде дополняет элементы при сравнении символом CHR(0),
тогда как при сравнении строки дополняются пробелом.
В документации об этом не слова. Можно на этом завершить обсуждение ASORT() .
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Rand(- 1 )
For pnI =  1  To  25 
   Dimension laArray(pnI)
   lnRand = Rand()
   Do Case
      Case lnRand  <  0 . 2 
         lcHasElem = ""
      Case lnRand  <  0 . 6 
         lcHasElem = Space( 1 )+Chr( 31 )
      Case lnRand  <  0 . 7 
         lcHasElem = Space( 1 )
      Case lnRand  <  0 . 8 
         lcHasElem = Space( 2 )
      Case lnRand  <  0 . 9 
         lcHasElem = Space( 3 )
      Otherwise
         lcHasElem = Chr( 31 )+Space( 1 )
   Endcase
   laArray(pnI) = lcHasElem
ENDFOR
?[до сортировки]
Display Memory Like laArray
=Asort(laArray)
?[после сортировки]
Display Memory Like laArray


To ORAselect
Спасибо на добром слове, по моему мнению библиотеки на C для FoxPro пишутся в двух случаях
1) когда что-то принципиально нельзя реализовать на FoxPro, типа проверки наличия дискеты в дисководе, я еще помню написал программу для FoxPro For DOS, которая загружалась вместе с АРМом, программа каждые пять секунд проверяла наличие определенного файла, если мне надо было послать пользователям сообщения или выкинуть их из АРМа
я создавал файл и писал определенные строки в него.
2) когда требуется высокая скорость работы, например, вытащить в массив все слова из строки, особенно из большой строки.
Время от времени возникают задачи построения таблицы ключевых слов из memo полей.
Таблицу ключевых слова из memo полей 14 записей программа строит за 0.05 секунды, представьте что у Вас 1 400 000 записей, то есть скорость имеет значение.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
Set Library To St_Denis Additive
Set Safety Off

Close Database
Open Database (Home( 2 ) + 'data\testdata') Noupdate
Use employee In  0  Noupdate


lnBegTime = Seconds()
lcMaxLenAllWord  = MakeKeyWordsFromAllMemoField([employee], [keywordsemployee])
* lcMaxLenAllWord  = MakeKeyWordsFromAllMemoField([employee], [keywordsemployee], '', [Between(Recno(), 5 , 10 )])
?[Maximal lenght of all words is ], lcMaxLenAllWord
?[performance is ],  Seconds() - lnBegTime, [ seconds ]

Release Library St_Denis



Function MakeKeyWordsFromAllMemoField
   Lparameters tcInputTableName,  tcOutputTableName, tcMemoFieldName, tcForClause
   Create Table (tcOutputTableName) Free  (nRecno N( 12 ), WORDNUM N( 6 ), Word C( 50 ), STARTWORD N( 6 ))
   Select (tcInputTableName)
   If Empty(tcForClause) Or Type('tcForClause') <> 'C'
      tcForClause = '.T.'
   Endif
   Local All
   If Empty(tcMemoFieldName) Or Type('tcMemoFieldName') <> 'C'
      Afields(laFields)
      * if this parameter is not valid
      * we are looking for a first memo field in the table
      For lnI =  1  To Alen(laFields, 1 )
         If laFields(lnI,  2 ) = [M]
            tcMemoFieldName = laFields(lnI,  1 )
            Exit
         Endif
      Endfor
   Endif
   If Empty(tcMemoFieldName) Or Type('tcMemoFieldName') <> 'C'
      Return 'Memo field does not exists !'
   Endif
   tcMemoFieldName = '@'+tcMemoFieldName
   lcUniqArrayName = Sys( 2015 )
   lcDelimiters = [ ,.:;<>|+-_-*&^$%#@~!?"'(){}/]+Chr( 10 )+Chr( 13 )+Chr( 9 )
   lcMaxLenAllWord  =  0 
   Scan For Evaluate(tcForClause)
      lcMaxLenWord  = GETALLWORDS(lcUniqArrayName, &tcMemoFieldName, lcDelimiters)
      If lcMaxLenWord >  0 
         lcMaxLenAllWord  = Max(lcMaxLenAllWord, lcMaxLenWord)
         m->nRecno = Recno()
         Select (tcOutputTableName)
         Append From Array (lcUniqArrayName) Fields WORDNUM, Word, STARTWORD
         Go (Reccount() - Alen((lcUniqArrayName), 1 ) +  1 )
         Replace nRecno With m->nRecno Rest
      Endif
   Endscan
   Release (lcUniqArrayName)
   Return lcMaxLenAllWord

To MSDN
авторУ команды .Net не "выходит каменный цветок", а тут такое... :))К сожалению, я не понял, потрудитесь излагать свои мысли яснее.
Я сначала испугался, что Вы увидели мой ужасный код и Вам стало плохо, но нет, все обошлось. Вы снова здесь, Вы снова готовы поделиться своими дельными соображениями.
У такого мастера, коим, несомненно, Вы являетесь, есть, наверняка есть, великолепные образцы кода, красивого и без ошибок, которыми Вы могли бы поделиться.
Ибо кто, как не Мастер написания кода, может научить, как нужно писать код? Код Мастера в студию!
А то Вы как-то остаетесь неизвестным, а вдруг это сам Уолтер Кеннамер выучил русский язык и издевается надо мной?
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34101864
MSDN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорь2004, дельными соображениями на тему того, что не нужно изобретать велосипед ? Или соображениями на тему того, что ВладимирМ Вам разжевал разницу с таким усердием, что ни на 1 лекции не увидишь ? Какие еще дельные соображения Вам нужны, если вы уперлись со своими самоалгоритмами, кои никому не нужны. О чем может быть вообще разговор ?
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34102150
Равиль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MSDNИгорь2004, дельными соображениями на тему того, что не нужно изобретать велосипед ? Или соображениями на тему того, что ВладимирМ Вам разжевал разницу с таким усердием, что ни на 1 лекции не увидишь ? Какие еще дельные соображения Вам нужны, если вы уперлись со своими самоалгоритмами, кои никому не нужны. О чем может быть вообще разговор ?
:) Всем привет.

2Игорь2004 Почему Ваша публикация вдруг вызвала раздражение? Вижу 3 причины:

1) Вы нарушили сложившийся порядок - когда в основном задаются вопросы типа "Помогите!", а Вы не попросили помощи, а наоборот ее без спроса предложили.

2) Вы несколько поспешили с этим - подвел счетчик сообщений, а именно он и есть уровень профессионализма, а Вы вдруг с алгоритмами

3) Как Вы правильно заметили и это было очевидно, что реакция последовала еще до скачивания и просмотра - потому что осудить легче, чем понять.

Конечно я не имею ввиду посты Владимира Максимова - они как раз были традиционно аргументированы :)

2MSDN Надеюсь, что полемика закончится извинениями с Вашей стороны.
С уважением :)
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34102172
MSDN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Равиль, надейся мой маленький друг :)
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34102183
MSDN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И оправдываю надежды :)
Простите меня, что я вас так жестко пресанул.
Так устроит ?
Или есть еще варианты ?
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34102208
Равиль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MSDN... Простите меня, что я вас так жестко пресанул ... Вам показалось
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34102223
MSDN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Равиль, "....кто знает Ватсон, кто знает".
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34102230
Равиль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MSDNРавиль, "....кто знает Ватсон, кто знает". ... разьве что Админ ... который прикроет нашу переписку
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34102468
MSDN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как на каком-то форуме SQL.RU было замечено:
> Лучше тебя потом простят чем сейчас не заметят.
Вот Вы со своим товарищем, которого оправдываешь, именно так и поступаете :)) Джалабь ;)
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34102546
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Равиль
Спасибо на добром слове, реакция нормальная, то есть такая, какая мной и ожидалась,кстати на англоговорящем форуме была однажды такая же реакция.
Чем ценен русскоговорящий форум, там обольют помоями,
но в них что-то можно найти полезное, мне это как раз и нужно.
Нужен критический взгляд, но конечно ценна конкретная аргументированная критика.
автора Вы не попросили помощи, а наоборот ее без спроса предложили.
Надеюсь, что действительно кому нибудь поможет, на англоговорящем форуме, когда была резко отрицательная реакция со стороны «профессионалов», я спросил, есть ли те, кому мои функции помогли, и попросил их ответить, одни человек написал, что ему мои функции помогли сэкономить время, и поддержал простую идею о том, что не нужно – не скачивай. Поэтому все просто – кому нужно, тот скачивает, кому не нужно, не скачивает, есть выбор. Из тех, кто скачал, кому нужно - использует, кому не нужно - не использует.

авторВы несколько поспешили с этим - подвел счетчик сообщений, а именно он и есть уровень профессионализма
Это шутка, конечно, уровень профессионализма, наверное, скорее код, который человек пишет, насколько он понятен, насколько он задокументирован.

to MSDN Я снова был обеспокоен, не случилось ли с Вами чего-нибудь плохого, нет, вижу все в порядке.
Насколько я понял, Вы обеспокоены тем, что та небольшая часть программистов,
автор«если вы уперлись со своими самоалгоритмами, кои никому не нужны.» , пострадает от использования моих функций. Я могу опубликовать Ваш авторитетный отзыв в описании моих функций, в разделе отзывы, но желательно, чтобы было упомянуто Ваше имя, адрес электронной почты, сайт, ссылка на Ваши публикации. Согласитесь, если я в раздел отзывы и мнения вставлю следующее :
«Эти функции полная дрянь, абыр, абыр» и подпись MSDN, то это будет выглядеть смешно.
гораздно солиднее, к примеру,
«На счет кода - это полный "АХТУНГ".
Это просто "тренировочный полет маленького мальчика" в попытке быть оригинальным.»
Шариков П.П. sharikov@balalayka.ru, http://]www.bomg.ru
MVP по удавливанию кошек
Публикации
«Я их давил, давил, давил, давил»
«Светит месяц, свети ясный»
«Да не согласен я»
Берегите себя, но желательно все таки раскрыть свое инкогнито, привести примеры своего кода.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34102833
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Равильразьве что Админ ... который прикроет нашу переписку
Модератор: Пока вроде не за что закрывать...
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34104279
Фотография ГенГрум
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да пойду скачаю.
Есть функции которые необходимы.
Кто нибудь побовал case в case-е ?
DANSLISTE() определяет находится ли число в списке значений типа «1,5,13-18»
тоже неплох.
Набросились на человека. Лишь бы поругать.
To Игорь2004.
Те кто сможет похвалить прийдут позже т.к. они сначала поработают с библиотекой.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34104394
Полуюзверь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Игорь2004
Закинь ссылку туда
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34104867
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To Admin
авторМодератор: Пока вроде не за что закрывать...
Допускается ли употребление неприличных выражений , абсолютно не относящихся к предмету спора, ведь внутренние самоограничения у ряда посетителей форума не работают.
Слово “джелаб” в ряде языков тюркской языковой группы означает «продажную женщину», то есть, попросту, в русском языке есть аналогичное слово на букву б.
Я уверен, что каждый из посетителей и участников знает нецензурные выражения, но большинство воздерживается от их употребления на данном форуме.
Насколько целесообразно разрешать незарегистрированным участникам оставлять свои сообщения ?
to ГенГрум функция icase() встроена в 9 версию, в более ранних версия ее нет, поэтому я вставил ее в библиотеку, естественно, можно вкладывать одну функцию icase() в другую icase(), просто выражение получается громоздким.
авторТе кто сможет похвалить прийдут позже т.к. они сначала поработают с библиотекой.
Замечательно, но таких будет меньшинство, ибо мои функции мало кому (практически никому) не нужны.
to Полуюзверь
так и сделаю впоследствии, и еще предложу мои функции на другие форумы по FoxPro, пусть мои функции будут никому не нужны еще и на других форумах.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34104999
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь2004 Слово “джелаб” в ряде языков тюркской языковой группы означает «продажную женщину», то есть, попросту, в русском языке есть аналогичное слово на букву б.
Модератор: Языками форума являются русский и английский. Я не знаю других языков, так что оценить нанесенный Вам моральный вред не могу. Если Вы желаете, то могу просто закрыть данный топик...
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34105175
Равиль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MSDNКак на каком-то форуме SQL.RU было замечено:
> Лучше тебя потом простят чем сейчас не заметят.
Вот Вы со своим товарищем, которого оправдываешь, именно так и поступаете :)) Джалабь ;)

:) Всем привет
2MSDN Наличие дружелюбных смайлов располагает к общению,
но к сожалению нет времени (да и желание не велико)

ps а Ваша подпись в конце сообщения - неожиданна и оригинальна
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34105354
MSDN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Ch, нет. Это не переводится. Это транскрипт. И означает просто связку слов в в зависимости от эмоциональной окраски в Азии.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34107479
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если Вы поработали с библиотекой, она хоть в чем-то оказалось полезной, пишите мне по адресу udfunctions(at)gmail.com, я опубликую Ваши отзывы и комментарии в соответствующем разделе файла описания библиотеки.
Если посчитаете целесообразным, укажите в письме Ваше имя и компанию.
Какие еще форумы кроме данного и foxclub, Вы могли бы порекомендовать мне для опубликования объявления о данной библиотеке функций?

Вы можете загрузить русскую версию данной библиотеки по адресу
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.zip .

В файл архива входят:
1) St_Denis.fll библиотека для VFP 8.0 и ниже
2) St_Denis.fll библиотека для VFP 9.0
3) St_Denis.plb библиотека для FoxPro 2.6 for DOS
4) St_Denis.c исходный текст библиотеки
5) St_Denis_Russian.chm подробное описание функций библиотеки, с примерами их использования, дополнительные материалы, среди которых пошаговое описание того, как компилировать библиотеку в Visual Studio .NET 2005 (2003).
6) St_Denis.prg реализация некоторых функций библиотеки на FoxPro.
7) test_perf.prg тесты, позволяющие наглядно получить преставление о быстродействии некоторых функций библиотеки, сравнение быстродействия функций библиотеки со встроенными функциями и командами FoxPro.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34107793
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не качается... :-(
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34107875
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Redrik
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.zip
там стояла маленькая точка, может быть поэтому не качалось, ссылка работает.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34108123
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кхм... Уж точно - не комплимент... :-(

У меня хватило соображения насчет "маленькой точки"... :-)

Не качает... :-(

А файл большой? В почту можно кинуть? Например, в 'stalker1968@list.ru'...
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34108714
Crispy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Redrik :
А вполне возможно это ограничения по локалке - от админа. На размер или иногда на расширение файла. У меня та же история.
Зайди на ftp://ftp-developpez.com/nikiforov/udfs/ - увидишь список файлов и их размер. Кажется у этого около 580 к.

2Игорь2004:
(Как предположение и пожелание:)
Может быть, если бы архив лежал несколькими меньшими "частями", это упростило бы дело. Например английский файл (153 к) у меня всё-таки скачался.


А вообще, по-моему, всегда можно только приветствовать любые разработки кем-то в приложении к фоксу. И человек, создающий что-то новое, заслуживает только уважения. Особенно, если после тестирования окажется, что это вещь, работающая безупречно и на порядки быстрее стандартных функций. А использование-неиспользование - всегда личное дело каждого.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34110090
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за отклики и предложения, здесь в Монреале, примерно за 1500 рублей в месяц (65 канадских долларов) имеешь телефон, и безлимитный DSL интернет со скоростью 5 мегабит в секунду, поэтому о реальных проблемах с интернетом, к сожалению, существующих в странах бывшего СССР, быстро забываешь.

Если есть проблемы с загрузкой файла st_denis_russian.zip (его размер более 500 килобайт из-за рисунков, вcтавленных в описание и детально показывающих как собирать библиотеку в Visual Studio .Net 2005), используйте что-нибудь типа ReGet, либо можно загрузить 5 файлов меньшего размера в формате 7z

ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.7z.001
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.7z.002
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.7z.003
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.7z.004
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.7z.005

Совершенно бесплатный и отличный архиватор 7z, поддерживающий множество форматов, можно взять здесь http://www.7-zip.org/


Михаил Дроздов любезно разместил ссылку на библиотеку на своем сайте http://vfpdev.narod.ru/util_r.html#vc_utils,
таким образом, библиотека St_Denis начинает свое шествие по России :-),
некоторые корчатся при этом в муках, ведь функции оказываются кому то нужны :-),
Saint Denis это просто название одной из больших улиц Монреаля, улица Святого Дениса, наверное, одна треть монреальских улиц носит имена святых)


авторОсобенно, если после тестирования окажется, что это вещь, работающая безупречно и на порядки быстрее стандартных функций.
На это у меня и ушли основные усилия, большинство из этих функций работают в реальных приложениях. Есть экзотические случаи например функция GETALLWORDS() , так же как и встроенные функции VFP GETWORDNUM( ) , GETWORDCOUNT( ) , не работает со строкам содержащими символ с кодом нуль. Зачем мне делать возможность для функции GETALLWORDS работать, со строками содержащими символ с кодом нуль, если встроенные функции такой возможности не имеют?
Код: plaintext
?GETWORDCOUNT([abc]+CHR( 0 )+[  123 ]) && возвращает  1 , но там два слова
Все это оговорено в описании.
Выполнив программу test_perf.prg вы получите представление о скорости работы.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34110441
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Crispy:
У меня нет ограничений... никаких... ;-)

Игорь! Большое спасибо за "мыло"!
Почему-то закачка никак не хотела работать - ни менеджерами, ни из IE...

P.S. Дорогой инет в Монреале... Тут у нас в странах бывшего СССР есть практически безлимитка (15 ГБ/месяц) с такой же скоростью за $25! :-)
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34110471
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Redrik
пожалуйста
Интернет + телефон 65 канадских $ ~ 58 USD
Отдельно Интернет примерно стоит ~ 32 USD
15 ГБ/месяц и без ограничений это две большие разницы,
я закачиваю в месяц больше сотни ГБ (фильмы, DVD)
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34110549
MSDN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Интересно, когда закончится этот онанизм...
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34110606
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To MSDN
С Вами по прежнему все в порядке, что замечательно.
Но к чему Ваша последняя реплика, не перепутали ли Вы адрес сайта, может быть с подобными репликами лучше сюда http://www.individualki.ru/ ?

Цветет урюк под грохот дней,
Дрожит зарей кишлак.
А средь арыков и аллей
Идет гулять MSDN.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34461994
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добавлена новая функция:
GETNUMWORD() Возвращает порядковый номер заданного слова в строке, memo поле , либо возвращает ноль, если слово в строке не найдено. В некотором смысле данная функция является обратной встроенной функции FoxPro GETWORDNUM().
Может быть использована для определения того, имеется данное слово в строке либо нет. Оператор $ определяет вхождение подстроки в строку и не может быть использован для проверки вхождения слова в строку. Может быть также использована для определения того, встречается данное слово в строке более одного или нескольких раз.

GETNUMWORD(cString, cWord[, cDelimiters] [, nOccurrence] [, nFlags])
Тип возвращаемого значения числовой

Параметры
cString - строка, в которой будет разыскиваться слово.
cWord - слово, которое будет разыскиваться в строке cString и номер которого нужно определить.
cDelimiters - символьный тип, наибольшая длина 256 символов, определяет те символы, которые будут служить разделителями слов в строке cString. Разделителями по умолчанию являются пробелы, символы табуляции, возврата каретки и перевода строки.
GETNUMWORD() считает каждый символ из строки cDelimiters как отдельный разделитель, а не всю строку cDelimiters как единый разделитель.
nOccurrence - необязательный числовой параметр, определяет какое именно вхождение слова в строку нужно искать, по умолчанию разыскивается первое вхождение слова в строку.
nFlags - необязательный параметр, определяет критерии поиска в соответствии со следующими значениями
0 Поиск чувствителен к регистру
1 Поиск нечувствителен к регистру

Примечания:
Передайте –1 для необязательных параметров, если, скажем, нужно всего лишь передать параметр nFlags, не указывая явно предыдущие необязательные параметры.
Функция GETNUMWORD() по умолчанию считает, что слова разделены пробелами, символами табуляции, возврата каретки и перевода строки. Если передан параметр cDelimiters, функция игнорирует пробелы, символы табуляции, возврата каретки и перевода строки.

Примеры:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
Set Library To St_Denis Additive

Local  lcString
lcString = 'Не желала бы я встретиться с вами, когда у вас в руках револьвер, ;
кокетливо поглядывая на Азазелло, сказала Маргарита. У нее  была страсть  ко всем людям, которые делают что-либо первоклассно.'
?GETNUMWORD(lcString, 'Азазелло', ',. '+Chr( 10 )+Chr( 13 ))  && возвращает  17 

** во втором примере memo  поле  notes таблицы Employee передается по ссылке, поэтому перед именем стоит значок  @, только для функции LCK !
?'2 example work with memo field'

Close Database
Open Database (Home( 2 ) + 'data\testdata') Noupdate
Use employee Noupdate In  0 
Select employee
Go  1 
?GETNUMWORD(@employee.notes, "Telemarketing")  && возвращает  62 
?GETNUMWORD(@employee.notes, "Buchanan" )  && возвращает  2  
** разыскивается второе вхождение слова в memo поле и возвращается его номер
?GETNUMWORD(@employee.notes, "Buchanan", - 1 ,  2 )  && возвращает  56 
** поиск слова, чувствительный к регистру
?GETNUMWORD(@employee.notes, "french", ',. '+Chr( 10 )+Chr( 13 ))  && возвращает  0 
** поиск слова,  НЕчувствительный к регистру
?GETNUMWORD(@employee.notes, "french", ',. '+Chr( 10 )+Chr( 13 ), - 1 ,  1 )  && возвращает  71 

?'3 example '
** имеется строка с различными кодами, разделенными запятыми
Local  lcAdmissibleCodes, lcCodeforChecking
lcAdmissibleCodes = "W,WN,IR,IU"

lcCodeforChecking = "I"
?lcCodeforChecking $ lcAdmissibleCodes   && возвращает .T.
?GETNUMWORD(lcAdmissibleCodes , lcCodeforChecking, ","+Space( 1 ) ) && возвращает  0 

lcCodeforChecking = "IR,"
?lcCodeforChecking $ lcAdmissibleCodes   && возвращает .T.
?GETNUMWORD(lcAdmissibleCodes , lcCodeforChecking, ","+Space( 1 ) ) && возвращает  0 

lcAdmissibleCodes = "W,WN,IR,IU,WN,DS"
lcCodeforChecking = "WN"
** определим встречается ли код "WN" дважды в строке lcAdmissibleCodes 
?GETNUMWORD(lcAdmissibleCodes , lcCodeforChecking, ","+Space( 1 ),   2  )  && возвращает  5 , то есть код встречается дважды, поскольку результат не нулевой

Release Library St_Denis

Вы можете загрузить русскую версию данной библиотеки по адресу
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.zip
размер ~600 килобайт
Либо по частям ~120 килобайт каждая часть
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.7z.001
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.7z.002
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.7z.003
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.7z.004
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.7z.005

В файл архива входят :
1) St_Denis.fll библиотека для VFP 8.0 и ниже
2) St_Denis.fll библиотека для VFP 9.0
3) St_Denis.plb библиотека для FoxPro 2.6 for DOS
4) St_Denis.c исходный текст библиотеки
5) St_Denis_Russian.chm подробное описание функций библиотеки, с примерами их использования, дополнительные материалы, среди которых пошаговое описание того, как компилировать библиотеку в
Visual Studio .NET 2005 (2003).
6) St_Denis.prg реализация некоторых функций библиотеки на FoxPro.
7) test_perf.prg тесты, позволяющие наглядно получить преставление о быстродействии некоторых функций библиотеки, сравнение быстродействия функций библиотеки со встроенными функциями и командами FoxPro.
8) mkeywords.prg построение таблицы ключевых слов из memo поля.

Никифоров Игорь
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34462077
foxovik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь2004...здесь в Монреале, примерно за 1500 рублей в месяц (65 канадских долларов) имеешь телефон, и безлимитный DSL интернет со скоростью 5 мегабит в секунду, поэтому о реальных проблемах с интернетом, к сожалению, существующих в странах бывшего СССР, быстро забываешь.

Да, тот кто был Канарах, то знает, что такое "хорошая погода".

Оч поддерживаю вашу идею и вополщение циклов, операторов ветления и прочего подобного, в виде функций на "С".
Я так думаю, что г-да Кёрниган, Ричи, Никлаус Вирт (прости господи) сущие ламеры в области парадигм программирования. Брант, Фаулер, ... давлюсь от смеха... Всем понятно, куда как проще сделать функцию цикл, функцию присвания,... да что я говорю, Вы и так всё знеете. Зачем вообще нужны языки программирования, если достаточно написать функцию, которая принимает последовательность операторов разделённых точкой с запятой и выполняет их?!
Кстати, а давайте такую библиотеку зафигачим под Яву! А что? Быстрее же будет работать, чем родные конструкции!

Надеюсь и жду, что в ближайшее время Hello Word на этой самой Яве будет выглядеть так:

EXECUTE("public class Main {;public static void main(String[] args) {;System.out.println("Хаюшки!");};})

Да и вообще, мало ли языков итерпретирующего типа, нам есть где развернуться! Слушайте, а возьмите меня маркетологом? А?
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34462158
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To foxovik
Если Вы прочитаете описание, то увидите следующие фразы
IFOR() «непосредственный» FOR цикл
IWHILE() «непосредственный» WHILE цикл
ICASE() «непосредственный» CASE условный переход
IEXECCASE() «непосредственный» CASE условный переход, с выполнением одной или нескольких команд после условий
IEXECIF() «непосредственный» IF условный переход, с выполнением одной или нескольких команд после условий
EXECUTE() выполняет строку команд, разделенных символом “;”, подобно макроподстановке
Вышеприведенные функции можно реализовать с использованием встроенной функции EXECSCRIPT().
(Плюс пример для каждой функции с использованием EXECSCRIPT()
Вышеупомянутые функции имеются для следующих версий FoxPro (VFP 9.0, 8.0, 7.0 и т.д., FoxPro 2.6 for DOS)
... возможное полезное применение, например, в отчетах.
Для FoxPro 2.6 for DOS, который еще применяется, можно использовать мои фунции, для Windows можно обойтись EXECSCRIPT()

Есть исходный текст библиотеки, ненужное можно убрать свое добавить и пересобрать. Но Вы, безусловно, можете предложить свои решения.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34463232
asp_mail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорю2004:
В свете решений партии и правительства Microsoft относительно генеральной линии продвижения к NET - достаточно полезная библиотека и особенно исходники к ней!
А те кто ёрничает по поводу полезности Ваших разработок, ну чтож таков их удел. Я помню как один разработчик создал библиотеку битовых функциий для 5-й версии, так сколько насмешек было от "корифеев". А сейчас они включены в состав стандартных функций. Зачем сейчас по этому поводу бисер метать? Есть достаточно много функций в любом языке, которые для одних мусор, а для других незаменимый инструмент.
И вообще, симбиоз из языков высокого и низкого уровней создает мощнейшую платформу для реализации любой задачи. Сам Фокс был написан на Watcom С (на то время наилучший компилятор), не надо об этом забывать, а лучше это использовать.
А по поводу переписки с программистом из Индии. Замечательные парни - пишут очень быстро и весело, но ошибок уйма. Исправление своих ошибок, для них, уже другая работа. Пинать его надо почаще - не обидится!
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34464095
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to asp_mail
авторА по поводу переписки с программистом из Индии. Замечательные парни - пишут очень быстро и весело, но ошибок уйма. Исправление своих ошибок, для них, уже другая работа. Пинать его надо почаще - не обидится!

Он, американец, индус по происхождению.
http://www.kamalpatel.net/Default.htm
Речь не идет о тривиальных ошибках, некоторые ошибки очень трудно обнаружить, речь шла о том, что написать без ошибок очень сложно, и о психологии индусов - в ответ молчание, и нежелание исправлять свои ошибки. Когда Вы что-то публикуете, то Вы в некотором роде ставите на кон свою профессиональную репутацию.
Вот в моих функциях Вы не найдете ошибок, и знаете почему. Потому что их там нет.
Pulp fiction- Когда ты подъзжал к дому, ты видел у меня вывеску "склад мертвых негров"?
- Ты же знаешь...
- Ты видел у меня вывеску "склад мертвых негров"?
- Нет.
- А знаешь, почему ты ее не видел?
- Почему?
- Потому-что ее там нет.Cами ссылки здесь на его функции здесь
http://msdn2.microsoft.com/en-us/vfoxpro/default.aspx
http://foxcentral.net/microsoft/vfptoolkitnet.htm
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34464176
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь2004Вот в моих функциях Вы не найдете ошибок, и знаете почему. Потому что их там нет.
Я бы сказал, потому, что все возможные не стыковки считаются не ошибками, а особенностями реализации. Не "бага", а "фича"!

1. Начальник всегда прав!
2. Если начальник не прав, смотри п.1
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34464275
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to ВладимирМ
если все работает в соответствии с описанием, то багов нет
?getwordcount("a b c"+CHR(13)+"d") && Displays 3 this is error, must be 4
** The default delimiters are space, tab, carriage return, and line feed.
** это баг , работает не в соответствии с описанием
** my function
?getnumword("a b c"+CHR(13)+"d","d") && Displays 4
getnumword, а также getallwords, getallwords2, getwordcount, getwordnum
не работает со строкой содержащей символ chr(0), но об этом я упоминаю в описании
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34464627
asp_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть два небольших пожелания:
1. Раз уж взялись оптимизировать функции с выделением слов из текста, то неплохо бы иметь еще одну специфическую, которую когда-то сам делал - но без использования Си . Она выдает массив слов и частоту их повторения в тексте. Минмальная длина слова (по умолчанию 2 символа, но может и задваться). Данный массив может сортироваться по частоте и по длине слов. Отдельный параметр означает режимы разбора: простой текст; HTML код(+ Параметр языка: кодировка страницы) Для чего это нужно? Например: быстрый набор словаря для синтаксического анализатора, который "питается" текстами из интернет-контента. Дальнейшая область применения данной информации - достаточно разнообразная ;-), но здесь важна и скорость.

2. Пример GETALLWORDS(), чтобы не выглядел так громоздко предлагаю заменить
строку формирования переменной lcString на TEXT..

Код: plaintext
1.
2.
3.
4.
5.
SET TEXTMERGE ON 
TEXT TO lcString  NOSHOW 
 Французский язык знаете, надеюсь?
  ...
ENDTEXT 
SET TEXTMERGE Off
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34464695
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to asp_fox
Спасибо за предложения.
2) я так и сделаю, заменю свой пример
1) в файле mkeywords.prg есть пример построения таблицы из слов, содержащихся в заданном memo поле заданное таблицы.
На мой взгляд гораздно проще собрать все слова в таблицу и делать с ней что угодно, определять частоту появления слов и т.д. нежели реализовывать это внутри функции.
Select .. from ... group by .. значительно проще, не так ли ?
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34464883
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь, когда кто-то, где-то, заявляет, что "у нас секса нет!", почему-то, хочется воскликнуть "Не верю!"

Если настаиваете, то вот, на вскидку

Какое количество элементов вернет Ваша функция GETALLWORDS() если два символа-разделителя идут подряд? Пропустит "не существующий" элемент.

Хорошо, допустим, так и должно быть. Однако в Вашей документации об этой "тонкости" нет ни слова. Это баг или фича?

Разработчки FoxPro поступили мудрее. В функции ALINES() Они добавили дополнительный параметр (в старших версиях - один бит флага), который собственно и определяет надо учитывать такие "не существующие" (пустые) слова или не надо. Иногда их просто необходимо учитывать.

Заявлять, что программа не содержит ошибок - слишком самонадеяно, поскольку немедленно возникает желание в этом убедится

Такие "жучки" ЕСТЬ в Ваших функциях. Проверено!
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34465053
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to ВладимирМ
авторЭто баг или фича?Это можно расценить как небольшой недостаток описания, уже впрочем исправленный, поскольку специально сделана функция GETALLWORDS(), в некотором роде похожая на встроенные функции GETWORDNUM() , GETWORDCOUNT(), и предполагалось что это подразумевается . У функции ALINES( ) несомненно больше возможностей, но она несколько сложнее в использовании, скажем, для того чтобы она не учитывала пустые слова, что нужно чаще всего, требуется установить флаг 4.
авторТакие "жучки" ЕСТЬ в Ваших функциях. Проверено!Описание может также содержать орфографические и грамматические ошибки, но расценивать это как баги функций нельзя.

Кстати, о фразе, в оригинале звучавшей "В СССР секса нет!"; женщина, выкрикнувшая ее в время телемоста подразумевала массовую доступность порнографии и эротики, а не отсутствие сексуальных отношение, просто фразу вывернули по другому. В то время в СССР действительно порнография и эротика широко распространены не были, просто ей нужно было выражать свою мысль так, чтобы исключить двоякие толкования, но в общем-то она была права.
Итак, в библиотеке St_Denis ошибок нет!
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34465116
Cyv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЗаявлять, что программа не содержит ошибок - слишком самонадеяно
Кажись единственная цель такого заявления - провокация на бесплатный тестинг.
На дурака вроде не похож.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34465772
asp_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорь2004
Код: plaintext
1.
2.
в файле mkeywords.prg есть пример построения таблицы из слов, содержащихся в заданном memo поле заданное таблицы.
На мой взгляд гораздо проще собрать все слова в таблицу и делать с ней что угодно, определять частоту появления слов и т.д. нежели реализовывать это внутри функции.
Select .. from ... group by .. значительно проще, не так ли ?
Согласен, в принципе, я так и делал.
А что относительно разделителей HTML? (Кстати, может Вы знаете, как использовать парсер для "чистки" текста?)

А по поводу ошибок, на мой взляд, корректней писать:
"Работа такой-то библиотеки(программы и т.д.) полностью соответствует ее заявленным функциональным требованиям (назначению)" -
и всем будет спокойно и радостно
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34465892
asp_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорь2004Кстати, о фразе, в оригинале звучавшей "В СССР секса нет!"; женщина, выкрикнувшая ее в время телемоста подразумевала массовую доступность порнографии и эротики, а не отсутствие сексуальных отношение, просто фразу вывернули по другому. В то время в СССР действительно порнография и эротика широко распространены не были, просто ей нужно было выражать свою мысль так, чтобы исключить двоякие толкования, но в общем-то она была права.
Добавлю, про бедную женщину... и чтобы не повторять эти глупые фразы ;-)
Женщина тогда (именно на то время) выразилась правильно. В то время существовала расхожая фраза о том, что в капстранах существует пропаганда секса и насилия. Пропаганда секса, секс - синоним пропаганда порнографии и т.п.. Просто известный коньюктурщик, который вел ту передачу перевел ее буквально для американцев и первыми засмеялись они. Вместо того чтобы затем извиниться за перевод он опозорил женщину. Есть достаточно много английских выражений,если их перевести буквально на русский, то они поставят нас в тупик и наоборот.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34466974
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To asp_fox
авторА что относительно разделителей HTML? (Кстати, может Вы знаете, как использовать парсер для "чистки" текста?)Я не понял вопрос, речь идет о том чтобы заменить одни разделители слов другими, либо часть из них удалить, либо речь идет о том чтобы из «слов» удалять некоторые символы ?
авторРабота такой-то библиотеки(программы и т.д.) полностью соответствует ее заявленным функциональным требованиям (назначению)можно сказать и так
Работа библиотеки St_Denis полностью соответствует ее заявленным функциональным требованиям, либо, другими словами, в библиотеке St_Denis ошибок нет.
Да, безусловно, речь никогда не шла о том, что код безупречный и примеры к функциям красивые.
to Cyv
авторКажись единственная цель такого заявления - провокация на бесплатный тестинг.Все уже протестировано.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34467368
asp_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорь2004Я не понял вопрос, речь идет о том чтобы заменить одни разделители слов другими, либо часть из них удалить, либо речь идет о том чтобы из «слов» удалять некоторые символы
Речь шла о выделении текста из обычной HTML странички. Раз не понятен вопрос, то лучше не заморачиваться с моей просьбой, спасибо. :)
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34467404
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Ну, Вы, блин, даете!" Неужели жизнь в Канаде настолько юмор отбивает? Я же смайлики поставил! Специально для тех, кто сразу "не въезжает"!

Что там та женщина имела в виду, кто и как ее перевел, сейчас уже не имеет никакого значения. Эта фраза сейчас однозначно воспринимается как заявление не соответствующее действительности. Причем настолько не соответствующее, что это понимают все и сразу.

Я ее привел чтобы показать насколько это нелепо звучит заменив фразу "Вот в моих функциях Вы не найдете ошибок, и знаете почему. Потому что их там нет." Заменил сознательно, поскольку считаю подобные фразы не соответсвующие действительности. На примере показав, что фраза действительно ошибочная.

Проблема здесь вовсе не в том, что есть в описании, а чего нет. А в том, что понимать под "правильным" функционированием.

Ведь Вы не явно делаете ряд допущений. Для Вас эти допущения совершенно очевидные. Очевидные настолько, что Вы не считаете нужным их хоть как-нибудь документировать (вспомните про ASCAN()).

Поэтому, когда другой человек начинает использовать Ваши функции, но делая другие не явные допущения, то он воспринимает такую работу как ошибку. С его точки зрения Ваши функции содержат ошибки. Все последующие объяснения уже воспринимаются, как неловкие попытки оправдаться.

И потом, брасаться "громкими" лозунгами в xUSSR я бы не стал. Лично у меня подобные заявляения вызывают сильную настороженность и недоверие. История, знаете ли...
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34468161
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to ВладимирМ
авторНеужели жизнь в Канаде настолько юмор отбивает?Усиливает многократно, иногда просто помираешь со смеху. Общепринятый смысл данной фразы мне безусловно известен, я просто привел предысторию. Но употребление данной фразы не свидетельствеут о наличии в моих функция ошибок.

авторВедь Вы не явно делаете ряд допущений. Для Вас эти допущения совершенно очевидные.
Всегда делаются некоторые разумные допущения, не описываемые явным образом, например, мои функции не работают со строками в формате Unicode, некоторые функции работающие с числовыми параметрами, не смогут распознать число в шестнадцатеричном формате, разве нужно об этом упоминать в описании. Но ведь кто-то может подумать что функции должны распознавать Unicode и т.д. и т.п., не так ли.
Безусловно все дельные советы будут с благодарностью приняты,
но по прежнему:
-Did you see a sign out in front of my house that said Dead Nigger Storage?
-No. I didn't.
-You know WHY you didn't see that sign?
- Why?
- 'Cause it ain't there, 'cause storing dead niggers ain't my fucking business, that's why!
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34468280
Cyv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторвсе дельные советы будут с благодарностью приняты
Какие советы, если всё отлажено и ошибок нет?
Следуя советам начнёшь что-нибудь "улучшать" (нет пределу совершенствования)
глядишь и ошибки новые появяться, или мирно спящие сейчас получат
возможность повылазить, гады. Будет конфуз...

А ты молодец. Так долбить из поста в пост одно и тоже. Несмотря на любые
контрдоводы. Это как предвыборная агитация. Я уже потихоньку начинаю верить.
Если бы сегодня мне предложили купить две программы, я бы наверное купил
- коню понятно - твою, "в которой ошибок нет".
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34470070
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Cyv
Любое изменение самой библиотеки, но не описания и примеров, влечет за собой длительное тестирование, поэтому я ничего менять в текстах не собираюсь, поскольку нет времени.
Если больше 20000 тысяч человек скачало (речь идет о других функциях, данные функции скачало пока больше 400 для английской версии) и ни у одного не было проблем из-за ошибок в функциях, это свидетельствует об отсутстии ошибок, если в процессе тестирования были найдены ошибки во встроенных функциях, это свидетельствует о качестве тестирования, а не какие-то авторконтрдоводы. Программы которые продаются являются значительно более сложными системами, пишутся коллективом разработчиков и не могут не содержать ошибок, например само FoxPro. Поэтому заниматься безответственной болтовней я бы не стал.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34470172
NSFuimus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
игорь, нижайше прошу прощения, но последний пост выглядит каким-то незавершенным ... наверна патамучта ты забыл закончить его словами
- Итак, в библиотеке St_Denis ошибок нет!
думаю нада эта в подписи засунуть
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34473395
asp_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
АКСИОМА
В любой программе есть ошибки.

ЗАКОН ПPОПОPЦИОНАЛЬНОСТИ
Чем более программа необходима, тем больше в ней ошибок.

СЛЕДСТВИЕ
Ошибок не содержит лишь совершенно ненужная пpогpамма .

ФУНДАМЕНТАЛЬНЫЙ ЗАКОН ТЕОPИИ ОШИБОК
На ошибках учатся.


и.т.д.
(http://www.rabota.su/extra/humour/index.php?id=158)
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34822998
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Библиотека St_Denis обновлена, появилась версия для FoxPro 2.6 for Windows.
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.zip
Таким образом, теперь есть версии библиотеки St_Denis для любого FoxPro (кроме 2.0 и более ранних версий, вряд ли кто-нибудь их сейчас использует). В общем, есть все кроме ошибок.

BTW
Я задавал это вопрос на форуме по , никто не ответил, поэтому повторю его здесь вдруг у кого-нибудь завалялось.
Где можно скачать компилятор Microsoft's C/C++ 7.0 (1992 года), это была первая версия с MFC .
http://en.wikipedia.org/wiki/Microsoft_Foundation_Class_Library
MFC was introduced in 1992 with Microsoft's C/C++ 7.0 compiler for use with 16-bit versions of Windows. C++ was just beginning to replace C for development of commercial application software and C/C++ 7.0 was the first of Microsoft's compilers to add C++ support.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34825326
есть такой:
может он?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
Packing List for Microsoft Visual C++, Version  1 . 0 
        Copyright (C) Microsoft Corp.  1986 - 1993 .  All rights reserved.
 
 
DISK  1 
 
Files                         Description
-----                         --------------
\PRO\STFSETUP.INF             File information list
\PRO\STFSETUP.EXE             Setup workhorse executable
\PRO\SETUP.EXE                Setup bootstrapper executable
\PRO\WSETUP.HLP               Setup Help File
\PRO\PACKING.TXT              Packing List
\HELP\ERRATA.WRI              Changes to manuals after printing
\HELP\README.WRI              Visual C++ Readme
\BIN\TLD1LOC.DLL              MS-DOS Local transport layer  
\MFC\LIB\lafxcwd.lib          WIN large model debug
 
DISK  2 
 
Files                         Description
-----                         --------------
\INCLUDE\FLOAT.H              Floating-point constants
\HELP\WIN31WH.HLP             Windows  3 . 1  SDK help
\REDIST\penwin.dll            Redistributable file
 
DISK  3 
 
Files                         Description
-----                         --------------
\BIN\STRESS.DLL               DLL used by STRESS.EXE
\BIN\mfcappwz.exe             MFC Application Wizard
 
DISK  4 
....................

DISK  20 
....................
всего 20*1,5Мб
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34825429
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Александр Овчинников
Спасибо, это в точности последующая, той которая мне нужна, версия.
Я ищу Microsoft C/C++ 7.0 (это еще не Visual C++ ), я хочу ее попробовать для компиляции библиотек для FoxPro 2.6 for DOS.
Versions
Product version MFC version
Microsoft C/C++ 7.0 MFC 1.0
Visual C++ 1.0 MFC 2.0
Visual C++ 1.5 MFC 2.5
Visual C++ 2.0 MFC 3.0
Visual C++ 2.1 MFC 3.1
Visual C++ 2.2 MFC 3.2
Visual C++ 4.0 MFC 4.0 (mfc40.dll included with Windows 95)
Visual C++ 4.1 MFC 4.1
Visual C++ 4.2 MFC 4.2 (mfc42.dll included with Windows 98-First Edition)
Pocket PC Embedded 3.0 MFC 4.2 (mfc42.dll)
Visual C++ 5.0 MFC 4.21 (mfc42.dll)
Visual C++ 6.0 MFC 6.0 (mfc42.dll)
Pocket PC Embedded 4.0
Visual C++ .NET 2002 MFC 7.0 (mfc70.dll)
Visual C++ .NET 2003 MFC 7.1 (mfc71.dll)
Visual C++ 2005 MFC 8.0 (mfc80.dll)
Visual C++ 2005 Express None
Visual C++ 2008 MFC 9.0 (mfc90.dll)
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34826774
Al_fa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня есть минимальный пакет WATCOM C 11 (в архиве ~5 мег), которым я делал сборку plb для fpd26.
Если надо , то пиши.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34828135
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Al_fa
У меня тоже есть watcom, его можно скачать с http://www.openwatcom.org/index.php/Main_Page,
http://ftp.openwatcom.org/ftp/
старые версии находятся в архиве.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #34828639
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модератор: Давайте не будем нарушать правил форума - распространять лицензионные продукты нелегальным путем... Все ссылки после изучения будут удалены...
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #35038989
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Версию 1.2 библиотеки St_Denis можно загрузить
по адресу
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.zip
либо, если есть проблемы при закачке большого файла
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.7z.001
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.7z.002
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.7z.003
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.7z.004
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.7z.005


Добавлены несколько функций для работы со словами
WORDTRAN() возвращает строку символов, полученную из первой строки, в которой одно или несколько вхождений первого слова будут заменены вторым словом
GETOCCURSWORD() подсчитывает количество вхождений слова в строке
GETATWORD() выполняет поиск позиции, с которой n-е вхождение слова начинается в строке и возвращает номер позиции
GETRATWORD() выполняет поиск позиции, с которой n-е вхождение слова начинается в строке и возвращает номер позиции, но в отличии от GETATWORD() осуществляет поиск справа

Полный список функций выглядит так
Функции для работы со словами
GETALLWORDS() помещает в глобальный массив все слова из строки или memo поля, похожа на встроенную функцию ALINES()
WORDTRAN() возвращает строку символов, полученную из первой строки, в которой одно или несколько вхождений первого слова будут заменены вторым словом
GETNUMWORD() возвращает порядковый номер заданного слова в строке
GETOCCURSWORD() подсчитывает количество вхождений слова в строке
GETATWORD() выполняет поиск позиции, с которой n-е вхождение слова начинается в строке и возвращает номер позиции
GETRATWORD() выполняет поиск позиции, с которой n-е вхождение слова начинается в строке и возвращает номер позиции, но в отличии от GETATWORD() осуществляет поиск справа

Функции для работы с массивами
ARRAYSUM() возвращает сумму числовых элементов заданного столбца массива
ARRAYAVG() возвращает среднее значение числовых элементов заданного столбца массива
ARRAYMIN() возвращает минимальное значение элементов заданного столбца массива
ARRAYMAX() возвращает максимальное значение элементов заданного столбца массива
ARRAYCNT() возвращает количество числовых элементов заданного столбца массива
ASCANQUICK() аналогична встроенной функции ASCAN(), за исключением того, что осуществляет бинарный поиск по столбцу в заранее отсортированном массиве
VITESCAN() осуществляет бинарный поиск по столбцу в отсортированном массиве

Прочие функции
NPRECISION() возвращает количество знаков после десятичной точки в числовом выражении
FIELDNUM() возвращает порядковый номер поля в таблице по имени поля
DANSLISTE() определяет находится ли число в списке значений типа «1,5,13-18»
INCREMENT() увеличивает переменную на 1 и возвращает результат
STRFILTER() удаляет все символы из первой строки, за исключением символов, содержащихся во второй строке
REVERSE() возвращает строку в обратном порядке
VST_DENIS() версия библиотеки

IFOR() «непосредственный» FOR цикл
IWHILE() «непосредственный» WHILE цикл
ICASE() «непосредственный» CASE условный переход
IEXECCASE() «непосредственный» CASE условный переход, с выполнением одной или нескольких команд после условий
IEXECIF() «непосредственный» IF условный переход, с выполнением одной или нескольких команд после условий
EXECUTE() выполняет строку команд, разделенных символом “;”, подобно макроподстановке
Вышеприведенные функции можно реализовать с использованием встроенной функции EXECSCRIPT().

Функции конвертации арабских чисел в римские и наоборот
ARABTOROMAN() преобразует обычное число в римское число (от 1 до 3999)
ROMANTOARAB() преобразует римское число в обычное число (от I до MMMCMXCIX)

Более 25 000 человек во всем мире уже загрузили мои функции, надеюсь, что и данные функции будут полезными и для Вас.

Вышеупомянутые функции имеются для следующих версий FoxPro (VFP 9.0, 8.0, 7.0 и т.д., FoxPro 2.6 for DOS и Windows).
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
[Объявление] Библиотека пользовательских функции FoxPro на C
    #35940486
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Версию 2.0 библиотеки St_Denis можно загрузить
по адресу
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.zip
либо, если есть проблемы при закачке большого файла
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.7z.001
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.7z.002
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.7z.003
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.7z.004
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.7z.005


Добавлены две суперфункции

STRTRANEX() Функция, определенная пользователем, обладает очень большими возможностями по поиску и замене строк, по сравнению со встроенной функцией FoxPro STRTRAN().

STRTRANEX() возвращает строку символов, полученную из первой строки, в которой одно или несколько вхождений каждого элемента второго параметра массива строк, заменены соответствующим элементом третьего параметра массива строк.

STRTRANEX (cSearched, cArExpressionSought | cExpressionSough, [cArReplacement | cReplacement][, nArStartOccurrence | nStartOccurrence] [, nArNumberOfOccurrences | nNumberOfOccurrences] [, nArFlags | nFlags], [ArReport])
Тип возвращаемого значения символьный

WORDTRANEX() Функция, определенная пользователем, обладает большими возможностями по поиску и замене слов, по сравнению с функцией WORDTRAN().

WORDTRANEX() возвращает строку символов, полученную из первой строки, в которой одно или несколько вхождений каждого элемента второго параметра массива слов, заменены соответствующим элементом третьего параметра массива слов.

WORDTRANEX (cSearched, cArExpressionSought | cExpressionSough, [cArReplacement | cReplacement] [, cDelimiters] [, nArStartOccurrence | nStartOccurrence] [, nArNumberOfOccurrences | nNumberOfOccurrences] [, nArFlags | nFlags], [ArReport])
Тип возвращаемого значения символьный

Функции STRTRANEX() и WORDTRANEX() различаются тем, что WORDTRANEX() разыскивает слова, а не строки, и соответственно, функция WORDTRANEX() имеет дополнительный параметр строку, состоящую из разделителей слов.

Параметры
cSearched исходная строка, в которой функция STRTRANEX() или WORDTRANEX() будет заменять найденные строки.
cArExpressionSought массив строк или cExpressionSought строка, каждая из строк будет разыскиваться, и заменяться в cSearched.
Если вторым параметром является не массив, а строка cExpressionSought, то данная функция будет работать так же, как встроенная функция STRTRAN().

cArReplacement массив строк или cReplacement строка, каждая из строк служит для замены соответствующей ей строки из массива cArExpressionSought в строке cSearched.
Если данный параметр не передан, каждое вхождение строки массива cArExpressionSought будет заменено пустой строкой.
Если количество строк в массиве cArReplacement превышает количество строк в массиве cArExpressionSought , то лишние строки массива cArReplacement игнорируются.
Если количество строк в массиве cArReplacement меньше количества строк в массиве cArExpressionSought, то лишние строки из массива cArExpressionSought будут заменяться пустой строкой.
Если третьим параметром является не массив, а строка cReplacement, то каждое вхождение строки массива cArExpressionSought будет заменено строкой cReplacement.

cDelimiters (только для функции WORDTRANEX) символьный тип, наибольшая длина 256 символов - необязательный параметр, определяет те символы, которые будут служить разделителями слов в строке cSearched.
Разделителями по умолчанию являются пробелы, символы табуляции, возврата каретки и перевода строки.
WORDTRANEX() считает каждый символ из строки cDelimiters как отдельный разделитель, а не всю строку cDelimiters как единый разделитель.

nArStartOccurrence числовой массив или nStartOccurrence число, данный параметр определяет, с какого вхождения соответствующей строки массива cArExpressionSought в cSearched будет начата замена.
Если количество строк в массиве nArStartOccurrence превышает количество строк в массиве cArExpressionSought , то лишние строки массива nArStartOccurrence игнорируются.
Если количество строк в массиве nArStartOccurrence меньше количества строк в массиве cArExpressionSought, то лишние строки из массива cArExpressionSought будут заменяться, начиная с первого вхождения каждой строки.
Например, если nStartOccurrence равно 4, замена начнется с четвертого вхождения каждой строки массива cArExpressionSought в строке cSearched, а первые три вхождения строк останутся на своем месте.
Другой пример, если первая строка массива nArStartOccurrence равна 4, замена начнется с четвертого вхождения первой строки массива cArExpressionSought в строке cSearched, а первые три вхождения первой строки массива cArExpressionSought останутся на своем месте.
По умолчанию замена начинается с первого вхождения каждой строки, если параметр nStartOccurrence не был указан, либо равен -1.
Если четвертым (пятым для функции WORDTRANEX()) параметром является не массив, а число nStartOccurrence, то каждое вхождение каждой строки массива cArExpressionSought будет заменяться, начиная с вхождения номер nStartOccurrence.
.
nArNumberOfOccurrences числовой массив или nNumberOfOccurrences число, данный параметр определяет количество вхождений каждой строки массива cArExpressionSought в строке cSearched, которое будет заменено. Если параметр не был указан, то все вхождения каждой строки из массива cArExpressionSought в строке cSearched, начиная с соответствующего вхождения, будут заменены.
Если количество строк в массиве nArNumberOfOccurrences превышает количество строк в массиве cArExpressionSought , то лишние строки массива nArNumberOfOccurrences игнорируются.
Если количество строк в массиве nArNumberOfOccurrences меньше количества строк в массиве cArExpressionSought, то лишние строки из массива cArExpressionSought будут заменены все, начиная с соответствующего вхождения каждой строки.
Рассмотрим случай, когда пятым (шестым для функции WORDTRANEX()) параметром является не массив, а число nNumberOfOccurrences. В таком случае, каждое вхождение строки массива cArExpressionSought будет заменяться nNumberOfOccurrences раз, начиная с соответствующего вхождения.

nArFlags числовой массив или nFlags число Определяет поиск и замену в соответствии со следующими значениями:
‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘-
nFlags, либо строка из массива nArFlags Описание
0 (по умолчанию) Поиск чувствителен к регистру, найденная строка заменяется на соответствующую строку.
1 Поиск НЕ чувствителен к регистру, найденная строка заменяется на соответствующую строку.
2 Поиск чувствителен к регистру, регистр буквенных символов в соответствующей строке замены будет изменен в соответствии с регистром буквенных символов найденной строки. Регистр буквенных символов строки замены меняется только в случае, если найденная строка соответствует верхнему регистру, нижнему регистру или регистру заголовка (то есть первая буква найденной строки прописная, а остальные строчные).
3 Поиск НЕ чувствителен к регистру, регистр буквенных символов в соответствующей строке замены будет изменен в соответствии с регистром буквенных символов найденной строки. Регистр буквенных символов соответствующей строки меняется только в случае, если найденная строка соответствует верхнему регистру, нижнему регистру или регистру заголовка (то есть первая буква найденной строки прописная, а остальные строчные).
‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘-
Если количество строк в массиве nArFlags превышает количество строк в массиве cArExpressionSought , то лишние строки массива nArFlags игнорируются.
Если количество строк в массиве nArFlags меньше количества строк в массиве cArExpressionSought, то лишние строки из массива cArExpressionSought будут заменяться в соответствии со значением 0 по умолчанию.
Если шестым (седьмым для функции WORDTRANEX()) параметром является не массив, а число nFlags, то каждое вхождение строки массива cArExpressionSought будет заменяться в соответствии с флагом nFlags.

ArReport – символьный тип – имя создаваемого функцией глобального двумерного массива, содержащего следующие значения
первый столбец, числовой тип – позиция в строке cSearched, с которой начиналась замененная функцией строка
второй столбец, числовой тип – какая именно строка из массива cArExpressionSought была найдена
третий столбец, числовой тип – как именно был изменен регистр вставленной строки
0 регистр не был изменен, то есть соответствующий элемент из строки массива был вставлен без изменений
1 регистр был преобразован в прописные буквы
2 регистр был преобразован в строчные буквы
3 регистр был преобразован в регистр заголовка, то есть первая буква прописная, а остальные строчные.
Таким образом, массив ArReport содержит отчет о проделанной функцией STRTRANEX() или WORDTRANEX() работе.
Общее количество строк в массиве ArReport равно общему количеству найденных и замененных строк.
Если ничего не было найдено, массив ArReport не будет создан.

Примечания:
Замена начинается с nStartOccurrence -ой по счету реализации и производится nNumberOfOccurrences раз. Если cReplacement отсутствует, cExpressionSought заменяется пустой строкой (удаляется). Если не задано nStartOccurrence,
подразумевается замена с первой реализации. Отсутствие nNumberOfOccurrences подразумевает замену всех реализаций.
Передайте -1 для необязательных параметров, если, скажем, нужно всего лишь передать параметр nFlags, не указывая явно предыдущие необязательные параметры.

STRTRANEX (cSearched, cExpressionSough, cReplacement, nStartOccurrence, nNumberOfOccurrences, nFlags) вернет тот же результат что и функция
STRTRAN (cSearched, cExpressionSough, cReplacement, nStartOccurrence, nNumberOfOccurrences, nFlags)

Данная функция позволяет, к примеру, заменять в строке строку A на строку B и, в свою очередь, заменять строку B на строку A, то есть менять местами строки в исходной стоке.
Можно заменять (удалять) несколько строк за один проход.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #35941185
piva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь, дело возможно нужное, но за 20 лет работы на фоксе, мне НИЧЕГО из этого не понадобилось, ну да ладно это в конце концов мое ИМНО, но с другой строны посудить - вот половина функций просто стырена с FoxTools - зачем дублирование ?
Ну так из интереса покопал, и у меня просто волосы на голове зашевелились от такого когда на сях ! Возможно другого выхода не было, но даже если goto не отменяли в каком-то языке, я просто забыл о его существовании ! А тут ...
Код: plaintext
1.
2.
3.
goto SORTIR ;
...
goto IFORSORTIR ;
Аж жуть берет !

Ладно черт с ним с сишным кодом, хотя такое ощущение что писалось на коленке, да так на коленке и осталось, вобщем "не айс" , меня общение на форуме как-то по жизни заставило делать код более читаемым если он публикуется публично.

про это я тоже умолчу
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
#define  ENGLISHLANGUAGE   0   // если  1  то сообщения выводятся по английски, иначе по русски
...
#if ENGLISHLANGUAGE
#define  ERRMSGMAXARRSIZE  "The second parameter contains more than 65000 words!"
#else
#define  ERRMSGMAXARRSIZE  "Второй параметр содержит более 65000 слов!"
#endif
и далее
Код: plaintext
1.
2.
3.
4.
5.
6.
            if (memsize <  0 )
                _UserError("Invalid memo size\n");
#if VERSION != VFP
            if (memsize > 0x7FFFL)
                _UserError("Memo is too large -- 32K limit");
#endif

Как говорится - сказал А, скажи и Бе. Не забывайте, Вы выкладываете свой код ПУБЛИЧНО.
Это я еще фукнции тестить не начал
Увидел функцию nprecision и вспомнил как народ спрашивал, "А как узнать количество ЗНАЧАЩИХ симоволов после запятой" - вот это была бы фукнция а то что у Вас, простите - фигня полная
Код: plaintext
1.
2.
3.
4.
5.
set decimal to  2 
? nprecision( 1 / 3 ) &&  2 

set decimal to  8 
? nprecision( 1 / 2 ) &&  8  !!!
Ну очень нужная фукнция в хозяйстве

Вот на кой черт нужна функция INCREMENT я так и не понял если она работает только со ссылкой ? Это я на фоксе ее напишу и будет гораздо меньше кода чем написани на Сях
Код: plaintext
1.
2.
3.
Procedure Increment 
LPARAMETERS trVal, trInc
RETURN trVal+IIF(vartype(trInc)="N",trInc, 1 )
Только ИМХО название у такой фукции надо бы сделать короче, а то написать lnVar++ и нажать пробел быстрее чем "вчепятывать" такое название фукнции.

Все - я спать - а то утром на дежурство, а у меня уже третий час ночи :)
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #35941255
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторвот половина функций просто стырена с FoxTools
речь идет о функции strfilter - это разумеется не половина, часть кода заимствована с FoxTools и переделана.
автор - зачем дублирование
для strfilter я применил алгоритм, требующий меньше памяти, то же самое про функцию reverse (она из примера Microsoft)

авторНу так из интереса покопал, и у меня просто волосы на голове зашевелились от такого когда на сях !
Код нормальный.

Код: plaintext
1.
2.
goto SORTIR ;
...
goto IFORSORTIR ;
можно обойтись и без goto, просто код функций сравнительно небольшой и с goto получается покомпактней.


авторпро это я тоже умолчу
Код: plaintext
1.
2.
3.
4.
5.
6.
#define  ENGLISHLANGUAGE   0   // если  1  то сообщения выводятся по английски, иначе по русски
...
#if ENGLISHLANGUAGE
#define  ERRMSGMAXARRSIZE  "The second parameter contains more than 65000 words!"
#else
#define  ERRMSGMAXARRSIZE  "Второй параметр содержит более 65000 слов!"
#endif

Непонятно, чем вызвано неудовольствие ?


Код: plaintext
1.
2.
3.
4.
5.
 if (memsize <  0 )
                _UserError("Invalid memo size\n");
#if VERSION != VFP
            if (memsize > 0x7FFFL)
                _UserError("Memo is too large -- 32K limit");
#endif
код заимствован из FoxTools, автор Walter J. Kennamer, условно компилируемый фрагмент нужен только для DOS версии.


авторЭто я еще фукнции тестить не начал
Ошибок там нет.

авторУвидел функцию nprecision и вспомнил как народ спрашивал, "А как узнать количество ЗНАЧАЩИХ симоволов после запятой" - вот это была бы фукнция а то что у Вас, простите - фигня полная

Код: plaintext
1.
2.
3.
4.
set decimal to  2 
? nprecision( 1 / 3 ) &&  2 

set decimal to  8 
? nprecision( 1 / 2 ) &&  8  !!!
Ну очень нужная фукнция в хозяйстве
запросите данную функцию для 1.23, 5.345 или 6.45984590 результат будет правильным,
в приведенных Вами примерах количество знаков после запятой будет определятся установкой set decimal to



авторВот на кой черт нужна функция INCREMENT я так и не понял если она работает только со ссылкой ?
Она увеличивает значение переменной переданной по ссылке и возвращет результат
Я ее применял в отчетах для подсчитывания, скажем количества групп,
она увеличивает значение, переданное по ссылке.
INCREMENT(@p) в каждой строке отчета , где данная функция вставлена, отображается число и увеличивается счетчик.
Код на FoxPro упомянут как комментарий к функции INCREMENT
Большинсво данных функций можно написать на FoxPro, тексты многих прилагаются в файле St_denis.prg , но скорость работы конечно отличается в сотни раз.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #35941312
piva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь2004
можно обойтись и без goto, просто код функций сравнительно небольшой и с goto получается покомпактней.

Ну да бог с ним, если так надо, то пусть будет. Работает - не трож

Игорь2004Непонятно, чем вызвано неудовольствие ?
Тем что декларируется вывод сообщений на русском - а он реализован, мягко говоря, не до конца

Игорь2004Ошибок там нет.

Код: plaintext
1.
set decimal to  8 
? nprecision( 1 / 2 ) &&  8  !!!

Игорь2004в приведенных Вами примерах количество знаков после запятой будет определятся установкой set decimal to
А смысл ?

Игорь, я не в упрек, только вот сделали бы проги какие-нить более нужные что ли. Сетевые фукции для FPD, FPW из числа пингов компов, мапления дисков, опроса NetFileEnum, NetSessionEnum, NetFileClose.
Сканирования изображений из-под висты, запись Сидюков подней же, а то приходится пользоватся сторонними фукнциями, к примеру запись болванки из под фоксе не фурычит, а под VBS на ура. Чтение серйниых номеров процессора, винта, флешек - без админских прав, да малил ли чего еще, потому как вижу, что Ваша неуёмная энерия в части переписывания функций на Сях, есть, тольо ее направить в нужное русло. Ну вот хотя бы для FPD, FPW выкидаывание списка Browse, в Excel и OO - с миниамальным форматированием, с учетом заголовков полей и форматов. Для Visual не очень актуально, но тоже было бы не плохо, если бы экспорт шел с учетом спецификафии Biff8 хотя бы. Вот это было бы дело ! А так же отправки мыла прямо из FPD(W), формирования PDF с русскими нормальными буквами без использвания PDF Creator.

ЗЫ. Мне собсно все равно, от фокса я ушел и не пишу на нем, так что мне это не актуально, но помню основные вопросы и потребности народа на форумах !
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #35941578
reware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
piva
Игорь, я не в упрек, только вот сделали бы проги какие-нить более нужные что ли. Сетевые фукции для FPD, FPW из числа пингов компов, мапления дисков, опроса NetFileEnum, NetSessionEnum, NetFileClose.
Сканирования изображений из-под висты, запись Сидюков подней же, а то приходится пользоватся сторонними фукнциями, к примеру запись болванки из под фоксе не фурычит, а под VBS на ура. Чтение серйниых номеров процессора, винта, флешек - без админских прав, да малил ли чего еще, потому как вижу, что Ваша неуёмная энерия в части переписывания функций на Сях, есть, тольо ее направить в нужное русло. Ну вот хотя бы для FPD, FPW выкидаывание списка Browse, в Excel и OO - с миниамальным форматированием, с учетом заголовков полей и форматов. Для Visual не очень актуально, но тоже было бы не плохо, если бы экспорт шел с учетом спецификафии Biff8 хотя бы. Вот это было бы дело ! А так же отправки мыла прямо из FPD(W), формирования PDF с русскими нормальными буквами без использвания PDF Creator.

ЗЫ. Мне собсно все равно, от фокса я ушел и не пишу на нем, так что мне это не актуально, но помню основные вопросы и потребности народа на форумах !

Piva на 1С ушел, ему теперь фокс нужен, как забавная игрушка. А мне лично очень импонирует библиотека Игоря. И не степенью необходимости её компонентов (а что понадобится завтра ?), а желанием сделать некоторые вещи _как надо_, а не как в фоксе сделано. К примеру, функции работы с массивами в фоксе выглядят бледно даже на фоне аналогичных старинных библ времен DOS. Да и для работы с текстовыми данными инструментов явно не хватает. Приходится на коленке лепить фоксовые UDF, быстродействие которых смехотворно. Давно уже руки чешутся взяться за С, но руки связаны (фоксом, работой).
И, по-моему, глупо ставить автору в упрек то, что он сделал не совсем то, что надо на потребу широкой публике (болванки писать, диски мапить etc.). Вы-же не будете ему предлагать переписывать половину фокса (или другого инструмента) на С.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #35941718
piva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
reware
А мне лично очень импонирует библиотека Игоря. И не степенью необходимости её компонентов (а что понадобится завтра ?), а желанием сделать некоторые вещи _как надо_, а не как в фоксе сделано.
rewareВы-же не будете ему предлагать переписывать половину фокса (или другого инструмента) на С.
Очень последовательно

Если вещь нужная, то кто спорит-то ? Ну нужна и нужна, больше программ нужных и не очень.
Возможно Вы и правы. Значит с этими проблемами я так и не столнулся
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #35941728
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Игорь2004, 20.04.2009, 06:59 [7085346]
Интересный подход. Право здорово. Жаль что не знал ранее, очень бы пригодились для написания хранимых процедур.
С уважением, Владимир.
p.s. для того, чтобы "выжать" из 1Сv7.7 все, пришлось перейти к 1С++ (OLEDB FoxPro Provider), и далее - к хранимым процедурам.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #35942661
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По поводу Set Decimals и моей функции nprecision
В документации сказано
авторSpecifies the number of decimal places displayed in numeric expressions.фактически же FoxPro сохраняет в момент вычисления количество знаков, после запятой, в соответсвии с установкой Set Decimals действующей в момент вычисления.
Моя функция абсолютно корректна и не бесполезна, она возвращает количество знаков после запятой которое хранится в выражении
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Set Library To st_denis

Set Decimals To  8 
x1 =  1 / 3 
?x1, [ Set Decimals To  ], Set("DECIMALS"), [ nprecision returns ], nprecision(x1)
Set Decimals To  2 
?x1, [ Set Decimals To  ], Set("DECIMALS"), [ nprecision returns ], nprecision(x1)
Set Decimals To  8 
?x1, [ Set Decimals To  ], Set("DECIMALS"), [ nprecision returns ], nprecision(x1)

Set Decimals To  2 
x2 =  1 / 3 
?x2 , [ Set Decimals To  ], Set("DECIMALS"), [ nprecision returns ], nprecision(x2)
Set Decimals To  4 
?x2 , [ Set Decimals To  ], Set("DECIMALS"), [ nprecision returns ], nprecision(x2)
Set Decimals To  8 
?x2 , [ Set Decimals To  ], Set("DECIMALS"), [ nprecision returns ], nprecision(x2)


авторТем что декларируется вывод сообщений на русском - а он реализован, мягко говоря, не до концаЯ оставил без изменения те сообщения, которые присутствуют в заимствованном из FoxTools коде.

авторСетевые фукции для FPD, FPW из числа пингов компов, мапления дисков, опроса NetFileEnum, NetSessionEnum, NetFileClose.
Я делаю кое-что из данного списка (ping, map drive), но только для VFP.
Не думаю, что стоит тратить время на работу из под FPD, FPW.

авторСканирования изображений из-под висты, запись Сидюков подней же, а то приходится пользоватся сторонними фукнциями, к примеру запись болванки из под фоксе не фурычит, а под VBS на ура.
Чтение серйниых номеров процессора, винта, флешек - без админских прав, да малил ли чего еще, потому как вижу, что Ваша неуёмная энерия в части переписывания функций на Сях, есть, тольо ее направить в нужное русло. Ну вот хотя бы для FPD, FPW выкидаывание списка Browse, в Excel и OO - с миниамальным форматированием, с учетом заголовков полей и форматов. Для Visual не очень актуально, но тоже было бы не плохо, если бы экспорт шел с учетом спецификафии Biff8 хотя бы. Вот это было бы дело !
, формирования PDF с русскими нормальными буквами без использвания PDF Creator.
До этого у меня руки никогда не дойдут

авторА так же отправки мыла прямо из FPD(W)

Я делал трюк, позволяющий отправить EMAil из FPD, но он довольно сложный.

авторИгорь, я не в упрек, только вот сделали бы проги какие-нить более нужные что ли.
Я попытался как-то структурировать функции, они работают с массивами, словами, кому-то может и окажется полезным именно то, что я сделал. Все это требует значительных усилий. Как я уже упоминал, функции не содержат ошибок.
Достаточно сказать, что те две функции, который я только что добавил, на два порядка сложнее любой встроенной функции FoxPro.
Скажем только тестирование по граничным условиям требуeт 50 000 000 вызовов с разными сочетаниями параметров и значениями параметров.
Я думаю, что это последнее, что я напишу для FoxPro.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #35942743
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Небольшое замечание.

SET DECIMALS - это настройка отображения количества знаков после запятой. А сколько в числе будет хранится значащих цифр этой настройкой не контролируется. Именно это и сказано в документации!

SET DECIMALS - это настройка интерфейса, а не рассчета. На точность расчета никак, никоим образом, не влияет. Хотя, при определенных условиях, результат расчета может отображаться как округление результирующего значения. Но, опять же, это вопрос отображения, а не хранения.

Более того, SET DECIMALS даже не гарантирует, что именно указанное количество знаков и будет отображаться. Есть куча условий, когда эта настройка игнорируется.

Т.е. SET DECIMALS что-то, как-то преобразует только и исключительно в момент отображения этого чего-то. При этом никак не изменяя сохраненное значение. Некий специфический способ форматирования данных. Ну, как отображение ведущих нулей.


PS:

В версии FP2.x была такая настройка SET PRECISION. Вот она как раз и задавала точность расчета. Но в старших версиях FoxPro - игнорируется. Оставлена для совместимости. А точность расчета всегда 16 значащих цифр.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #35942748
piva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь2004
Моя функция абсолютно корректна и не бесполезна, она возвращает количество знаков после запятой которое хранится в выражении
Игорь я не спорю - если в этом есть именно НЕОБХОДИМАЯ инфорамция, но как-то приянто устнанавливать Set Decimals в начале проги и его не дергать, а если передергивание Set deciamls идет по ходу программы, то или в программе что-то не то или правильного результатата не будет, хотя тестить чес слово лениво

авторСетевые фукции для FPD, FPW из числа пингов компов, мапления дисков, опроса NetFileEnum, NetSessionEnum, NetFileClose.
авторЯ делаю кое-что из данного списка (ping, map drive), но только для VFP.
Не думаю, что стоит тратить время на работу из под FPD, FPW.
А вот это как раз зря, потому что для FPW еще можно как-то через зад использовать Win16Api то для FPD ваще тока через NET функции DOS я когда-то это делал- но это все кануло в прошлое а FPD прог про стране и по миру еще очень много, для FPW возможно но сложнее не все делкарации есть в Win16, для VFP это только pure winapi - единственно возможно более корректное выделение памяти и читабельное чтение получаемых структур. для UrlDownloadToFile можно было бы указать объект кторый может отработать таймаут или прервать функцию - тоже знаете ли востребованная функция :)


Игорь2004Я делал трюк, позволяющий отправить EMAil из FPD, но он довольно сложный.
Дык никто и не торопит - что бы сделать нормально !

Игорь2004 Как я уже упоминал, функции не содержат ошибок. Ошибок - может быть и нет - (но я до сих пор боюсь такой формулировки или это самонаденянность или это осуществиом с рядом допущений и не иначе)

Игорь2004 Скажем только тестирование по граничным условиям требуeт 50 000 000 вызовов с разными сочетаниями параметров и значениями параметров.

Это или алогрим кривой или его можно оптимизировать по другому, или это тот крайний случай когда только так и не иначе - хотя в последнем сомневаюсь.

Я даже из 1С - выжимаю все что ОНО(ОНА-ОН ) может. Да щас пишу медленне чем мой нач, но работает в 10-ки раз быстре его кода. Так что на оптимизацию у меня порой уходит до 2/3 времени на разработку - можно конечно подставить костыли на Сях и Асме - но пока не понадобилось - вечные тормоза не мои а сторонних сикульных серверов типа MySQL или MSSQL с такими проектированиями баз (жаль прихдилось юзать чужие а не свои ) как вропчем и тормоза фоксовского репорта, потому что даже в 2.6 FPW он достаточно медленный и костыли ему не помогут не говоря уже о ReportListener да его с графичесокой обработкой в самом Listener c вращениями и извращениями

В остальном больше спорить не в моготу, если началь проявляться народ кому это надо, дай им бог в помщь вашии фунцкии, а дальше что ? с 2006 года перелопачивать одну и ту же библу ? Да я бы с тоски подох от такого саппорта Может все-таки отвелечетесь от ваших жизенных пролем и воспарите над собой ? Я пытался, тока денег захотелось больше чем свободы творчества, голод знаете ли не тетка А если есть время и желание, почему нужно стоять на одном месте ? а новые подходы, а новые знания ? ...
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #35942793
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to ВладимирМ
Вы правы, более точно, FoxPro запоминает, сколько знаков отоображать для переменной в соответствии с SET DECIMALS в момент присвоения.
Моя функция это и покажет.

to piva
авторЭто или алогрим кривой или его можно оптимизировать по другому, или это тот крайний случай когда только так и не иначе - хотя в последнем сомневаюсь.О каком алгоритме идет речь, об алгоритме тестирования ?
Как можно провести тестирование по граничным условия не вызывая все возможные комбинации параметров и значений параметров?
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #35942812
piva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь2004О каком алгоритме идет речь, об алгоритме тестирования ? всякое тестирование относится к уже полученному, пусть и горькому опыту, если это просто тестирование быстродействия, то опять же в любых боевых условиях все может поменяться вплоть до наоборот, когда тривиальный код на фоксе будет быстрее функций на сях ;)

ЗЫ - использование массиов в итерациях по 50 млн записей - это нонсенс или я не о том ?
А если это "большие" куски текста то тем более

Игорь - давай не будем цапаться. Если есть желание пнуть меня последним, то пусть это право останется за тобой, я могу тут же покаяться и принести извинения если это нанесло тебе какой-то ущерб, я думал тебя сподвигнуть на более интересные фунции ... видимо я ошибся, извини.
Далее продолжать дискуссию не вижу смысла, это как слепой с глухим
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #35942838
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторЗЫ - использование массиов в итерациях по 50 млн записей - это нонсенс или я не о том ?
А если это "большие" куски текста то тем более
Вам знакомо понятие тестирование по граничным условиям "Boundary testing" ?
http://en.wikipedia.org/wiki/Boundary_testing
это значит, например, для строковых параметров, передача пустого параметра,
для необязательного параметра нужно тестировать случай когда параметр не передан и т.д.
В моем случае перебор всех возможных вариантов это около 50 миллионов вызовов.
Речь идет о двух вновь добавленных функциях.
1 параметр может передаваться как по ссылке так и по значению
2 параметр может передаваться как массив по ссылке так и по значению строковая переменная
3 параметр может передаваться как массив по ссылке так и по значению строковая переменная (причем параметр необязателный)
и так далее, каждую возможную ситуацию нужно вызвать с разными значениями ( пустой, непустой, значение по умолчанию)
При большом количестве параметров тестирование по граничным условиям чрезвычайно усложняется.
Я думаю, что в конце концов, Вы станете евангелистом моей библиотеки.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #35942850
piva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь2004Я думаю, что в конце концов, Вы станете евангелистом моей библиотеки.
Побойтесь бога, да никогда в жизни Для решения работы с текстами мне хватило ATC\RATC + STUFF причем на это уходило 5% времены выполнения, остальное падало на ввод\вывод который мне не подконтролен (в том числе и на UrlDownloadToFile) + закидоны IE7 по сравнению с IE6 (о чем я упоминал на Foxclub) +косяки мемо полей от которых пришлось срочно избавлятся переводя все во внешние файлы и причем это работало ГОРАЗДО быстрее даже с IE7

Бог в помощь, как говорится !
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #35942900
reware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pivaДля решения работы с текстами мне хватило ATC\RATC + STUFF причем на это уходило 5% времены выполнения, остальное падало на ввод\вывод который мне не подконтролен (в том числе и на UrlDownloadToFile) + закидоны IE7 по сравнению с IE6 (о чем я упоминал на Foxclub) +косяки мемо полей от которых пришлось срочно избавлятся переводя все во внешние файлы и причем это работало ГОРАЗДО быстрее даже с IE7


Не знаю, как вам хватало ATC и STUFF (и SUBSTR, и STRTRAN иже с ними). Это дикие торомоза на больших обьемах текста. И не надо лукавить, именно из-за этих "косяков мемо-полей" вы и перешли от работы со строкой в памяти к работе с перемещением указателя по файлу, что действительно реализовано в VFP гораздо грамотнее и быстрее.
И, по-моему, автору не следует ударяться в бесчисленные ответвления, куда можно направить расширение библиотеки. Не надо сюда до кучи лепить различные UrlDownload, DiskMapper, CDWriter, DVDViewer и прочую ерунду. Достаточно уже выбранного направления, чтобы получить полноценный продукт, которого, по большому счету, так и нет в природе - библиотеки доп.функций работы с массивами и строками на С. Я, конечно, извиняюсь, но по набору строковых функций (а уж тем более фукнций обработки массивов) фокс сильно уступает даже досовским ветеранам семейства Clipper, с которого я начинал до его кончины. Это уже не говоря о фоксовской трактовке массива, как такового.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #35942927
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, в общем, я больше не собираюсь писать для FoxPro,
осталось только опубликовать изменения на UniversalThread и CodePlex.
Я немного возился c Clipper, но особенного внимания не обращал на такие детали.
Каждый элемент массива может хранить любой тип данных, что увеличивает гибкость и усложняет обработку.
Но как правило не нужно хранить разные типы данных в одном столбце.
В Clipper вроде как существует еще большая гибкость, и можно хранить другой массив в элементе массива.
Какие функции для работы с массивами были в Clipper, причем аналога нет в FoxPro ?
Какие функции для работы со строками были в в Clipper, причем аналога нет в FoxPro ?
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #35942936
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Piva
Совершенно напрасно Вы не хотите быть евангелистом моей библиотеки.
Вы могли бы оставить о себе запись в http://fox.wikis.com/wc.dll?Wiki~VisualFoxProWiki в раздел Персоналии. Я там к примеру есть.
Я рекомендовал бы вставить в автоописание следующую строку.
Piva is a well-known evangelist of the St_denis library.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #35942943
piva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь2004Piva is a well-known evangelist of the St_denis library.
Луше я останусь ортодоксальным атеистом, который ничего не принимает на веру, а все перепроверяет и переписывает под себя Так было, так есть и так, надеюсь, будет в т.ч. и на 1С
Хотя начиналось с EXEC2, REXX, NETURAL, PL1, DBASE ....
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #35942997
reware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь2004
Какие функции для работы с массивами были в Clipper, причем аналога нет в FoxPro ?
Какие функции для работы со строками были в в Clipper, причем аналога нет в FoxPro ?

Думаю, это не для данного форума. Если хотите, я могу кинуть вам на e-mail Norton Guide с описанием стандартных функций Clipper 5.01, его официальной библиотеки доп. функций Clipper Tools II и одной из многих доп. библиотек Nanfor.lib (она даже с исходниками на MS C 5.0, ASM и PRG). Выберете сами, там уж больно много.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #36390978
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Библиотека St_Denis продолжает свое победное шествие по миру, включая Россию.
В версии 2.1 добавленa функция STRFILTEREX()

STRFILTEREX() Удаляет все символы из первой строки или memo поля, за исключением строк, содержащихся во втором параметре массиве строк
Обладает очень большими возможностями по сравнению с функцией STRFILTER().

STRFILTEREX (cSearched, cArExpressionSought | cExpressionSough [, nArStartOccurrence | nStartOccurrence] [, nArNumberOfOccurrences | nNumberOfOccurrences] [, nArFlags | nFlags], [ArReport])
Тип возвращаемого значения символьный


Параметры
cSearched исходная строка, в которой функция STRFILTEREX() будет оставлять найденные строки, удаляя остальные символы.
cArExpressionSought массив строк или cExpressionSought строка, каждая из строк будет разыскиваться и, впоследствие, оставляться в cSearched.
Если вторым параметром является не массив, а строка cExpressionSought, то данная функция НЕ будет работать так же, как функция STRFILTER(), она будет разыскивать, для того чтобы затем оставить, строку cExpressionSought целиком,
а не каждый символ из строки cExpressionSought в отдельности как STRFILTER().

nArStartOccurrence числовой массив или nStartOccurrence число, данный параметр определяет, с какого вхождения соответствующей строки массива cArExpressionSought в cSearched будет начато сохранение найденной строки.
Если количество строк в массиве nArStartOccurrence превышает количество строк в массиве cArExpressionSought , то лишние строки массива nArStartOccurrence игнорируются.
Если количество строк в массиве nArStartOccurrence меньше количества строк в массиве cArExpressionSought, то лишние строки из массива cArExpressionSought будут оставляться, начиная с первого вхождения каждой строки.
Например, если nStartOccurrence равно 4, сохранение начнется с четвертого вхождения каждой строки массива cArExpressionSought в строке cSearched, а первые три вхождения строк будут удалены.
Другой пример, если первая строка массива nArStartOccurrence равна 4, сохранение начнется с четвертого вхождения первой строки массива cArExpressionSought в строке cSearched, а первые три вхождения первой строки массива cArExpressionSought будут удалены.
По умолчанию сохранение начинается с первого вхождения каждой строки, если параметр nStartOccurrence не был указан, либо равен -1.
Если третьим параметром является не массив, а число nStartOccurrence, то каждое вхождение каждой строки массива cArExpressionSought будет оставляться, начиная с вхождения номер nStartOccurrence.
.
nArNumberOfOccurrences числовой массив или nNumberOfOccurrences число, данный параметр определяет количество вхождений каждой строки массива cArExpressionSought в строке cSearched, которое будет оставлено. Если параметр не был указан, то все вхождения каждой строки из массива cArExpressionSought в строке cSearched, начиная с соответствующего вхождения, будут оставлены.
Если количество строк в массиве nArNumberOfOccurrences превышает количество строк в массиве cArExpressionSought , то лишние строки массива nArNumberOfOccurrences игнорируются.
Если количество строк в массиве nArNumberOfOccurrences меньше количества строк в массиве cArExpressionSought, то лишние строки из массива cArExpressionSought будут оставлены все, начиная с соответствующего вхождения каждой строки.
Рассмотрим случай, когда четвертым параметром является не массив, а число nNumberOfOccurrences. В таком случае, каждое вхождение строки массива cArExpressionSought будет сохраняться nNumberOfOccurrences раз, начиная с соответствующего вхождения.

nArFlags числовой массив или nFlags число Определяет поиск для последующего сохранения в соответствии со следующими значениями:
‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘-
nFlags, либо строка из массива nArFlags Описание
0 (по умолчанию) Поиск чувствителен к регистру
1 Поиск НЕ чувствителен к регистру
‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘-
Если количество строк в массиве nArFlags превышает количество строк в массиве cArExpressionSought , то лишние строки массива nArFlags игнорируются.
Если количество строк в массиве nArFlags меньше количества строк в массиве cArExpressionSought, то лишние строки из массива cArExpressionSought будут разыскиваться в соответствии со значением 0 по умолчанию.
Если пятым параметром является не массив, а число nFlags, то каждое вхождение строки массива cArExpressionSought будет разыскиваться в соответствии с флагом nFlags.

ArReport – символьный тип – имя создаваемого функцией глобального двумерного массива, содержащего следующие значения
первый столбец, числовой тип – позиция в строке cSearched, с которой начиналась оставленная функцией строка
второй столбец, числовой тип – какая именно строка из массива cArExpressionSought была найдена
Таким образом, массив ArReport содержит отчет о проделанной функцией STRFILTEREX() работе.
Общее количество строк в массиве ArReport равно общему количеству найденных и замененных строк.
Если ничего не было найдено, массив ArReport не будет создан.

Примечания:
Сохранение начинается с nStartOccurrence -ой по счету реализации и производится nNumberOfOccurrences раз. Если не задано nStartOccurrence,
подразумевается сохранение с первой реализации. Отсутствие nNumberOfOccurrences подразумевает сохранение всех реализаций.
Передайте -1 для необязательных параметров, если, скажем, нужно всего лишь передать параметр nFlags, не указывая явно предыдущие необязательные параметры.


Примеры:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
Set Library To St_Denis Additive

Clear
Local lcStr1, lcStr2, lcStr3
Local Array ArExpressionSought( 1 ), ArStartOccurrence( 1 ), ArNumberOfOccurrences( 1 ), ArFlags( 1 )

Dimension ArExpressionSought( 2 ), ArStartOccurrence( 2 ), ArNumberOfOccurrences( 2 ), ArFlags( 2 )

ArExpressionSought( 1 ) = "a"
ArExpressionSought( 2 ) = "b"

*** в данном примере функция StrfilterEx делает то же самое, что и функция Strfilter, но вдобавок создает отчет о проделанной функцией работе
lcStr1 = "The fifth of the Twelve Labours set to Heracles was to clean the Augean stables in a single day."
?Strfilter(lcStr1, "ab")
?StrfilterEx(lcStr1, @ArExpressionSought, - 1 , - 1 ,  0 , "gArRapp")
Display Memory Like gArRapp  && displays the status information about the work done by the function StrfilterEx
Wait

Dimension ArExpressionSought( 4 )
ArExpressionSought( 1 ) = "ab"
ArExpressionSought( 2 ) = "ly"
ArExpressionSought( 3 ) = "ea"
ArExpressionSought( 4 ) = "as"

lcStr2 = "The reasoning behind this being set as a labour was twofold: firstly, all the previous labours exalted Heracles in the eyes of the people and this one would surely degrade him;"+;
   " secondly, as the livestock were a divine gift to Augeas they were immune from disease and thus the amount of dirt and filth amassed in the uncleaned stables made the task surely impossible."
*** в данном примере функция StrfilterEx удаляет все из строки  все символы, за исключением подстрок из массива ArExpressionSought
?StrfilterEx(lcStr2, @ArExpressionSought)
Wait

*** в данном примере функция удаляет все из строки  все символы, за исключением подстрок из массива ArExpressionSought, причем поиск  подстрок из массива ArExpressionSought нечувствительный к регистру
?StrfilterEx(lcStr2, @ArExpressionSought,  - 1 , - 1 ,  1 )
Wait

** в данном примере функция StrfilterEx работает как фильтр, оставляя только одно вхождение каждого слова из массива ArExpressionSought, причем поиск  чувствительный к регистру
?StrfilterEx(lcStr2, @ArExpressionSought,   1 ,  1 )
** сравните предыдущий пример с тем, что делает функция StrtranEx, она также убирает все вхождения строк массива ArExpressionSought кроме первого вхождения,  но не трогает, в отличии от StrfilterEx,  остальные символы строки lcStr2
?StrtranEx(lcStr2, @ArExpressionSought,  "",   2 , - 1 )

Wait

*** в данном примере создается ошибочный параметр ArExpressionSought в котором пятый элемент не является строкой, вызов функции порождает ошибку "Function argument value, type, or count is invalid (Error 11)"
Local lcSaveError
lcSaveError = On("error")
On Error Messagebox([ArExpressionSought( 5 ) is not of character type !],  0 + 48 , [This is an error "Function argument value, type, or count is invalid (Error 11)"],  10000 )
Dimension ArExpressionSought( 5 )
?StrfilterEx(lcStr2, @ArExpressionSought,  - 1 , - 1 ,  1 ) && error "Function argument value, type, or count is invalid (Error 11)" because ArExpressionSought( 5 ) is not of character type !
On Error &lcSaveError
Wait

Dimension ArExpressionSought( 4 ), ArStartOccurrence( 4 ), ArNumberOfOccurrences( 4 ), ArFlags( 4 )

ArStartOccurrence( 1 ) = - 1 
ArStartOccurrence( 2 ) =  1 
ArStartOccurrence( 3 ) =  2 
ArStartOccurrence( 4 ) =  3 

ArNumberOfOccurrences( 1 ) = - 1 
ArNumberOfOccurrences( 2 ) =  1 
ArNumberOfOccurrences( 3 ) =  2 
ArNumberOfOccurrences( 4 ) =  3 

ArFlags( 1 ) =  0 
ArFlags( 2 ) =  1 
ArFlags( 3 ) =  1 
ArFlags( 4 ) =  0 

*** данный пример показывает использование индивидуальных критериев  для каждой строки массива ArExpressionSought, служащего фильтром
?StrfilterEx(lcStr2, @ArExpressionSought,  @ArStartOccurrence, @ArNumberOfOccurrences, @ArFlags, "gArRapp")
Display Memory Like gArRapp  && displays the status information about the work done by the function StrfilterEx

Wait

Dimension ArExpressionSought( 6 )
ArExpressionSought( 1 ) = "B"
ArExpressionSought( 2 ) = "THIS"
ArExpressionSought( 3 ) = "to"
ArExpressionSought( 4 ) = "As"
ArExpressionSought( 5 ) = "Augeas"
ArExpressionSought( 6 ) = "was"


*** данный пример также показывает использование индивидуальных критериев  для каждой строки массива ArExpressionSought, служащего фильтром
?StrfilterEx(lcStr2, @ArExpressionSought,  @ArStartOccurrence, @ArNumberOfOccurrences, @ArFlags, "gArRapp")
Display Memory Like gArRapp  && displays the status information about the work done by the function StrfilterEx
Wait

Иногда функция StrfilterEx работает быстрее, чем функция Strfilter
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Local lnS, lcStrT
lcStrT = Replicate(  Replicate("abcd",  2 ** 7 ),  2 ** 12 )+"1"
lnS = Seconds()
r1=Strfilter(lcStrT , "1")
?[ Strfilter], Len(lcStrT ),  Seconds() - lnS, [ seconds]

lnS = Seconds()
r2=StrfilterEx(lcStrT , "1")
?[ StrfilterEx], Len(lcStrT ),  Seconds() - lnS, [ seconds]
?Len(r1), Len(r2)



Вы можете загрузить обновленную русскую версию данной библиотеки по адресу
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.zip

либо можно загрузить 5 файлов меньшего размера в формате 7z

ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.7z.001
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.7z.002
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.7z.003
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.7z.004
ftp://ftp-developpez.com/nikiforov/udfs/st_denis_russian.7z.005

Поздравляю всех с Новым годом !
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #36391030
reware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь2004Библиотека St_Denis продолжает свое победное шествие по миру, включая Россию.


Отличная библиотека, Игорь. Однако недавно не смог полноценно воспользоваться ее функций GETALLWORDS().

авторGETALLWORDS() Помещает в глобальный массив все слова из строки или memo поля, возвращает максимальную длину слова из строки, если в строке нет слов, возвращает 0.
Во многом похожа на встроенную функцию Visual FoxPro ALINES(), но в отличие от нее возвращает массив другой структуры

Все так и есть, но в отличии от ALINES() эта функция не снабжена флагами для версии VFP 9. Т.е. нет возможности разобрать строку по словам, включая или не включая разделители слов из строки lcDelimiters :( Было бы здорово добавить такую возможность в GETALLWORDS(). Тогда ALINES() уже совсем отдыхает :)
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #36392939
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторТ.е. нет возможности разобрать строку по словам, включая или не включая разделители слов из строки lcDelimiters
Это можно сделать по другому
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
Open Database (Home( 2 ) + "data\testdata")
Select employee
Go  1 
lcUniqArrayName = Sys( 2015 )
lcMaxLenWord = GETALLWORDS(lcUniqArrayName, @employee.notes, "S")
lcStrOrig = employee.notes
=Acopy(&lcUniqArrayName, aMyArray1)
Release (lcUniqArrayName)


Dimension aMyArray(Alen(aMyArray1, 1 )+Iif( aMyArray1( 1 , 3 ) >  1 ,  1 ,  0 ), Alen(aMyArray1, 2 ))

If aMyArray1( 1 , 3 ) >  1 
   aMyArray( 1 , 1 ) =  0 
   aMyArray( 1 , 2 ) = Left(lcStrOrig,   aMyArray1( 1 , 3 ) -  1 )
   aMyArray( 1 , 3 ) =  1 
   aMyArray( 1 , 4 ) = aMyArray1( 1 , 3 ) -  1 
   lnS =  1 
Else
   lnS =  0 
Endif

For lnI =  1  To Alen(aMyArray1,  1 )
   aMyArray(lnI + lnS,  1 ) = aMyArray1(lnI ,  1 )
   If lnI < Alen(aMyArray1,  1 )
      aMyArray(lnI + lnS,  2 ) = aMyArray1(lnI ,  2 ) + Substr(lcStrOrig,   aMyArray1(lnI ,  3 ) + aMyArray1(lnI ,  4 ), aMyArray1(lnI+ 1 ,  3 ) - (aMyArray1(lnI ,  3 ) + aMyArray1(lnI ,  4 )))
   Else
      aMyArray(lnI + lnS,  2 ) = aMyArray1(lnI ,  2 ) + Substr(lcStrOrig,   aMyArray1(lnI ,  3 ) + aMyArray1(lnI ,  4 ))
   Endif
   aMyArray(lnI + lnS,  3 ) = aMyArray1(lnI ,  3 )
   aMyArray(lnI + lnS,  4 ) = Len(aMyArray1(lnI ,  2 ))
Endfor

Display Memory Like aMyArray

Написать функцию подобную Alines(), но с большими возможностями, разумеется, можно, но потребует немало времени (для меня примерно месяц).
Мало кто может писать быстро и без ошибок. Я знаю только одного такого человека.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #36392981
guest12345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь2004,

У меня вопрос, вот скачал
st_denis_russian.7z.001
st_denis_russian.7z.002
st_denis_russian.7z.003
st_denis_russian.7z.004
st_denis_russian.7z.005

распаковал
st_denis_russian.zip

а он при проверке Winrar или 7zip без разницы
битый.

И где можно прочитать как самостоятельно скомпилировать вашу FLL.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #36392997
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторУ меня вопрос, вот скачал
st_denis_russian.7z.001
st_denis_russian.7z.002
st_denis_russian.7z.003
st_denis_russian.7z.004
st_denis_russian.7z.005

распаковал
st_denis_russian.zip

а он при проверке Winrar или 7zip без разницы
битый.
Только что сам скачал, распаковал с помощью 7zip , получил st_denis_russian.zip, распаковал st_denis_russian.zip (архивировал также с помощью 7zip версия 4.65) - все абсолютно нормально.

Код: plaintext
И где можно прочитать как самостоятельно скомпилировать вашу FLL.
В файле St_Denis_Russian.chm в разделе "Прочее" есть топик "как самому сделать FLL библиотеку в .NET ?"
Там пошагово с картинками описывается как самому сделать любую FLL библиотеку.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #36393606
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можете добавить в библу функции RCUT()/LCUT() которые, как видно из названия, будут отрезать слева или справа указанное кол-во символов и возвращать получаемую строку (т.е. без отрезанного, т.е. это не LEFT/RIGHT - они отрезанное возвращают).
Да, это можно сделать стандартными функциями LEFT/RIGHT/SUBSTR/LEN, я создал себе такие функции - так бывает в ряде случаев удобнее, чем каждый раз ваять через несколько функций. Вот пример:
Код: plaintext
1.
2.
3.
FUNCTION RCUT
LPARAMETERS tcString, tnCutCharsN
RETURN LEFT(m.tcString,LEN(m.tcString)-m.tnCutCharsN)
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #36394253
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторА можете добавить в библу функции RCUT()/LCUT()
Могу, но не буду, это очень простые функции, Вы их сами можете добавить, поскольку исходный код есть.
Вероятно, Вы подразумевали ?
Код: plaintext
1.
2.
3.
FUNCTION RCUT
LPARAMETERS tcString, tnCutCharsN
RETURN IIF(LEN(m.tcString)>m.tnCutCharsN, LEFT(m.tcString,LEN(m.tcString)-m.tnCutCharsN), "")
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #36467209
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я подумал раз Вы хотите популяризировать свою библу, так надо добавить в нее по-больше полезных функций, которых в вфп нет и которые будут в ней работать быстрее чем UDF-аналог.

В том числе предложил RCUT, могу предложить еще несколько, например, можно добавить ряд функций для работы со временем. К примеру: EXTRACTTIME(п1,п2) функция выделения времени из DateTime-параметра, по п2 решается в каком виде - string ("08:15") или int в секундах от полуночи. TIMEADDS(п1,п2) принимающая DateTime или стринговое время и параметр в секундах, который надо добавить и аналог TIMEADDМ(п1,п2) для добавления минут, MIXDATETIME(п1,п2) которая будет выдавать на выходе DateTime, полученный из даты от первого параметра(DateTime,Date) и времени из второго (DateTime, string ("8:15"), int в секундах от полуночи)...

Кстати по работе с полями в вфп ощущается нехватка некоторых функций, например функции FNUMBER(п1,п2) принимающая 2 параметра - имя искомого поля и опционально алиас таблицы в которой поле ищется. Результат - номер поля в текущей или в указанной таблице или 0 - если не найдено.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #36470935
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторВ том числе предложил RCUT, могу предложить еще несколько, например, можно добавить ряд функций для работы со временем. К примеру: EXTRACTTIME(п1,п2) функция выделения времени из DateTime-параметра, по п2 решается в каком виде - string ("08:15") или int в секундах от полуночи. TIMEADDS(п1,п2) принимающая DateTime или стринговое время и параметр в секундах, который надо добавить и аналог TIMEADDМ(п1,п2) для добавления минут, MIXDATETIME(п1,п2) которая будет выдавать на выходе DateTime, полученный из даты от первого параметра(DateTime,Date) и времени из второго (DateTime, string ("8:15"), int в секундах от полуночи)...
Я подозреваю, что большинство из вышеописанного можно сделать с помощью встроенных функций FoxPro.

авторКстати по работе с полями в вфп ощущается нехватка некоторых функций, например функции FNUMBER(п1,п2) принимающая 2 параметра - имя искомого поля и опционально алиас таблицы в которой поле ищется. Результат - номер поля в текущей или в указанной таблице или 0 - если не найдено.
Смотрите FIELDNUM()
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
FIELDNUM()  Функция определенная пользователем, возвращает порядковый номер поля в таблице по имени поля.

FIELDNUM (tcFieldName[,  tcAlias | nWorkArea])
Тип возвращаемого значения числовой
Параметры
Первый параметр tcFieldName символьный тип  имя поля, порядковый номер которого будет возвращен,
если такого поля не существует, функция возвратит  0 .
Второй  (необязательный) параметр 
tcAlias символьный тип  псевдоним таблицы, 
-или-
nWorkArea числовой тип номер рабочей области FIELDNUM( ), 
если псевдоним таблицы или номер рабочей области не передан, либо номер рабочей области равен  0 ,
то используется таблица открытая в текущей рабочей области,
если в текущей рабочей области ни одна таблица не открыта, функция возвратит  0 .
Если  такого псевдонима таблицы не существует или в рабочей области, соответствующей переданному номеру,
ни одна таблица не открыта, функция возвратит  0 .

Пример:

Set Library To St_Denis Additive

Clear
Close Database
Open Database (Home( 2 ) + 'data\testdata') Noupdate
Use customer Noupdate && Opens Customer table

* нам нужно упорядочить результирующую выборку по полям city и phone из таблицы customer
* в запросе используется UNION, поэтому мы не можем использовать имена полей после ORDER BY,
* нам необходимо знать порядковые номера полей, по которым необходимо  упорядочить результат запроса
pcOrderBy = Str(FieldNum([city],[ customer]))+[,]+Str(FieldNum([phone],[customer]))
Select customer.*, orders.order_id, orders.emp_id ;
   From customer, orders  Where customer.cust_id = orders.cust_id ;
   Union  Select customer.*, Space(Len(orders.order_id)), Space(Len(orders.emp_id)) ;
   From customer  Where customer.cust_id Not In ;
   (Select orders.cust_id From orders) Order By &pcOrderBy Into Cursor CurTest

For gnCount =  1  To Fcount( )  && Loop for number of fields
   ? FIELDNUM (Field(gnCount)), Field(gnCount)   && Display each number of field and field
Endfor

Release Library  St_Denis


Сейчас меня больше заботит преобразование SQL запросов Visual FoxPro , (поскольку я переношу приложение в котором вместо базы данных Visual FoxPro будет использована база данных SQL Server, имеются сотни SQL запросов Visual FoxPro ) в SQL запросы SQL Server, я многое могу сделать в том числе с помощью своей библиотеки, но скажем автоматически конвертировать
iif( ... , ..., ...) в case when ... then ... else ... end
я не могу, нужно писать специальный скрипт.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
[Объявление] Библиотека пользовательских функции FoxPro на C
    #37953664
Фотография MaestroEv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скачал, хотел попробовать. У меня VFP 9.0 а там нету.. тока 8 и ниже.. Или я не туда смотрю?
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #37953775
Boban5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaestroEv, лежит просто в корневой папке.
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #37965680
Игорь2004,

ничего себе
...
Рейтинг: 0 / 0
[Объявление] Библиотека пользовательских функции FoxPro на C
    #37974046
Фотография MaestroEv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Boban5,

Неизвестный метод.. Попробовал на 3 компах.. Поддиректории могу вытащить, а с корня нет, хотя их видно.
...
Рейтинг: 0 / 0
116 сообщений из 116, показаны все 5 страниц
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / [Объявление] Библиотека пользовательских функции FoxPro на C
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]