powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / [Объявление] Библиотека пользовательских функции FoxPro на C
16 сообщений из 116, страница 5 из 5
[Объявление] Библиотека пользовательских функции 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
16 сообщений из 116, страница 5 из 5
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / [Объявление] Библиотека пользовательских функции FoxPro на C
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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