powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
25 сообщений из 25, страница 1 из 1
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
    #35415517
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет!

Всегда, когда необходимо узнать есть ли в строке тот или иной символ, программеры прибегают к
AT(SearchFor,SearchIn) =/<>/> 0 и практически никогда не видел SearchFor $ SearchIn.

Почему?

По-моему второй вариант предпочтительнее, т.к. во-первых производится 1 действие, во-вторых не вычисляется позиция вхождения искомого в искомом, соотв. он в разы быстрее, хотя это и не важно.
...
Рейтинг: 0 / 0
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
    #35415551
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AT() читабельнее и более функциональный. Зачем использовать две конструкции если возможности одной полностью содержат вторую?

CTAC-KOво-вторых не вычисляется позиция вхождения искомого в искомом, соотв. он в разы быстрее, хотя это и не важно.
Вычисляется, только не возвращается, раз найдено вхождение значит и положение его известно. Насчет "в разы" тоже загнул, померил бы предварительно прежде чем писать :), основные затраты времени на поиск уходят, а не на сравнение с нулем. Думаю разница по времени незначительна.

Я лично обычно предпочитаю такую конструкцию:
Код: plaintext
1.
2.
3.
lnPos = at(...)
if lnPos !=  0 
    ... что делаем со строкой с учетом lnPos
endif
...
Рейтинг: 0 / 0
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
    #35415554
GoshaS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Функция $ ведет поиск с учетом регистра (прописные и строчные символы различаются) и не допускает оптимизацию по технологии Rushmore .


Поиск, осуществляемый функцией AT( ), ведется с учетом регистра. Чтобы выполнить поиск без учета регистра, воспользуйтесь функцией ATC( ).
...
Рейтинг: 0 / 0
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
    #35415562
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лично предпочитаю ATC()
...
Рейтинг: 0 / 0
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
    #35420641
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Раз получается так, что функция $ не поддается RushMore Optimization, чего про AT()/ATC() не сказано, то скорее всего в вфп это совершенно отдельные подпрограммы, поэтому, думаю, позиция там специально не вычисляется. Разве что чисто как переменная цикла, в котором просматриваются данные...
RushMore Optimization я всегда думал касается только работы с бд. При чем здесь, интересно работа функции и почему про AT()/ATC() не сказано, что они таки поддаются RushMore-у? Типа по-умолчанию поддается? Или имеется ввиду работа с бд с использованием $, когда, к примеру, накладывается фильтр?
...
Рейтинг: 0 / 0
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
    #35420900
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TНасчет "в разы" тоже загнул, померил бы предварительно прежде чем писать :) по предварительном тестам $ самая быстрая, незначительно, правда, опережая АТ, а вот ATC - самая медленная.
При этом я рассматриваю случай, когда необходимо просто установить - есть ли искомое в искомом, т.е. для задач когда не важно где оно находится. Искал не букву и не слово, а символ $, т.е. регистр ни при чем.
Сейчас провожу тест по-дольше, чтобы разница была по-ощутимее, текст теста такой:
Код: 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.
LOCAL lsString, lcTimeAT, lcTimeATC, lcTimeS

CLEAR 

lsString = FILETOSTR('attest.txt')

lnStartSex = SECONDS()
FOR lnF= 1  TO  10000000 
   _VFP.StatusBar = 'AT: ' + TRANSFORM( 10000000 -m.lnF)+SPACE( 3 )
   IF AT('$',m.lsString)# 0 
   ENDIF
ENDFOR
lcTimeAT = 'AT() - ' + TRANSFORM(SECONDS()-m.lnStartSex)

lnStartSex = SECONDS()
FOR lnF= 1  TO  10000000 
   _VFP.StatusBar = 'ATC: ' + TRANSFORM( 10000000 -m.lnF)+SPACE( 3 )
   IF ATC('$',m.lsString)# 0 
   ENDIF
ENDFOR
lcTimeATC = 'ATC() - ' + TRANSFORM(SECONDS()-m.lnStartSex)

lnStartSex = SECONDS()
FOR lnF= 1  TO  10000000 
   _VFP.StatusBar = '$: ' + TRANSFORM( 10000000 -m.lnF)+SPACE( 3 )
   IF '$' $ m.lsString
   ENDIF
ENDFOR
lcTimeS = '$ - ' + TRANSFORM(SECONDS()-m.lnStartSex)

MESSAGEBOX(;
  m.lcTimeAT +CHR( 13 );
+ m.lcTimeATC +CHR( 13 );
+ m.lcTimeS +CHR( 13 ))
...
Рейтинг: 0 / 0
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
    #35421156
GoshaS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я конечно сильно извратился, прошу не пинать, однако вот результат:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE CURSOR cTmp (a1 char( 10 ))
FOR i= 0  TO  100000000 
	INSERT INTO cTmp (a1) VALUES (cast(TIME() as char( 8 ))+'^$')
ENDFOR 
lt1=DATETIME()
SELECT COUNT(*) FROM cTmp WHERE a1 like '%15^%' INTO ARRAY aTemp
lt2=DATETIME()
SELECT COUNT(*) FROM cTmp WHERE '15^' $ a1 INTO ARRAY aTemp
lt3=DATETIME()
SELECT COUNT(*) FROM cTmp WHERE AT('15^',a1)> 0  INTO ARRAY aTemp
lt4=DATETIME()
SELECT COUNT(*) FROM cTmp WHERE ATC('15^',a1)> 0  INTO ARRAY aTemp
lt5=DATETIME()
? lt2-lt1 &&  117 
? lt3-lt2 &&   63 
? lt4-lt3 &&   73 
? lt5-lt4 &&   75 
Длм меня он оказался слегка неожиданным.
...
Рейтинг: 0 / 0
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
    #35421197
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CTAC-KO Dima TНасчет "в разы" тоже загнул, померил бы предварительно прежде чем писать :) по предварительном тестам $ самая быстрая, незначительно, правда, опережая АТ, а вот ATC - самая медленная.
Погонял твой тест (один миллион только в цикл поставил, файл 30 кб, символ "$" 1905-й):
AT() - 10.10 сек
ATC() - 68 сек
$ - 10.05 сек

Т.е. $ на 0,5% быстрее AT(), и в 7 раз быстрее ATC()
Еще одно маленькое открытие сделал: AT(lower(lcC),lower(m.lsString)) равнозначно по времени AT(lcC,m.lsString)

Вывод: 0,5% (точнее 50000 мксек / 1000000 = 0,05 микросекунды) очень незначительная величина. На самом деле чуть больше в % и чуть меньше в мсек, т.к. на остальные операторы тоже время тратилось.

ЗЫ Вот это зачем в цикл воткнул?
Код: plaintext
  _VFP.StatusBar = 'AT: ' + TRANSFORM( 10000000 -m.lnF)+SPACE( 3 )
На эту строчку у тебя 2/3 времени работы цикла идет.
Если уж сильно надо вывод, то тогда так примерно вставляй:
Код: plaintext
1.
2.
3.
	if lnF %  10000  =  0 
   		_VFP.StatusBar = 'AT: ' + TRANSFORM( 1000000 -m.lnF)+SPACE( 3 )
   	endif
...
Рейтинг: 0 / 0
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
    #35421282
GoshaS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще поизвращался:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
CLEAR 
FOR i= 1  TO  3 
	lt1=DATETIME()
	SELECT COUNT(*) FROM cTmp WHERE a1 like '%15^%' INTO ARRAY aTemp
	lt2=DATETIME()
	SELECT COUNT(*) FROM cTmp WHERE '15^' $ a1 INTO ARRAY aTemp
	lt3=DATETIME()
	SELECT COUNT(*) FROM cTmp WHERE AT('15^',a1)> 0  INTO ARRAY aTemp
	lt4=DATETIME()
	SELECT COUNT(*) FROM cTmp WHERE ATC('15^',a1)> 0  INTO ARRAY aTemp
	lt5=DATETIME()
	? lt2-lt1
	? lt3-lt2
	? lt4-lt3
	? lt5-lt4
	?'-----------------'	
ENDFOR 
Результат:

like___86, 87, 76
$_____56, 58, 56
AT()__65, 65, 68
ATC()_73, 75, 73
...
Рейтинг: 0 / 0
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
    #35421319
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GoshaSЯ конечно сильно извратился, прошу не пинать, однако вот результат:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE CURSOR cTmp (a1 char( 10 ))
FOR i= 0  TO  100000000 
	INSERT INTO cTmp (a1) VALUES (cast(TIME() as char( 8 ))+'^$')
ENDFOR 
lt1=DATETIME()
SELECT COUNT(*) FROM cTmp WHERE a1 like '%15^%' INTO ARRAY aTemp
lt2=DATETIME()
SELECT COUNT(*) FROM cTmp WHERE '15^' $ a1 INTO ARRAY aTemp
lt3=DATETIME()
SELECT COUNT(*) FROM cTmp WHERE AT('15^',a1)> 0  INTO ARRAY aTemp
lt4=DATETIME()
SELECT COUNT(*) FROM cTmp WHERE ATC('15^',a1)> 0  INTO ARRAY aTemp
lt5=DATETIME()
? lt2-lt1 &&  117 
? lt3-lt2 &&   63 
? lt4-lt3 &&   73 
? lt5-lt4 &&   75 
Длм меня он оказался слегка неожиданным.
А что неожиданного увидел? Помоему закономерно что $ быстрее AT(), тот быстрее ATC() и LIKE самый медленный. Сложность возрастает (функционал команд) - время увеличивается.
Неожиданно что like('*15^*', a1) чуть быстрее like '%15^%'

Если неожиданность в GoshaSФункция $ ведет поиск с учетом регистра (прописные и строчные символы различаются) и не допускает оптимизацию по технологии Rushmore .
То все перечисленные команды не допускают оптимизации. Оптимизация возможна только при наличии индекса (у тебя его нет кстати) и только тогда когда этим индексом можно воспользоваться. Для приведенных конструкций нет такого алгоритма чтобы индекс применить можно было, поэтому везде идет простой скан таблицы.
Если бы был индекс по a1 и выражение "WHERE a1 like '15^%'" тогда бы оптимизатор подключился.

DATETIME() на SECONDS() замени, точнее будет.
...
Рейтинг: 0 / 0
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
    #35421390
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
итак, по приведенному коду, ($ at 15984/18238), результаты такие:
Код: plaintext
1.
2.
AT() -  1315 . 472 
ATC() -  3026 . 011 
$ -  1222 . 698 
тест шел как видите полтора часа....
...
Рейтинг: 0 / 0
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
    #35421431
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЗЫ Вот это зачем в цикл воткнул?
Код: plaintext
  _VFP.StatusBar = 'AT: ' + TRANSFORM( 10000000 -m.lnF)+SPACE( 3 )
На эту строчку у тебя 2/3 времени работы цикла идет.поздно прочитал :) Тыкнул чтобы процесс видеть, но потом запустил на изолированном компе, без монитора, подключений к инету/сети вообще без всяких доп. прог, потому в принципе оно не надо было. Ну запущу еще для прикола без трейсинга в статус. Действительно, команда мешала процессу, однако, думаю, на чистоту эксперимента не повлияла.
...
Рейтинг: 0 / 0
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
    #35421437
GoshaS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
CREATE CURSOR cTmp (a1 char( 10 ) ) 
FOR i= 0  TO  1000000 
	INSERT INTO cTmp (a1) VALUES (cast(TIME() as char( 8 ))+'^$')
ENDFOR 
SELECT cTmp
INDEX on a1 TAG a1
CLEAR 
FOR i= 1  TO  3 
	lt1=SECONDS()
	SELECT COUNT(*) FROM cTmp WHERE a1 like '%15^%' INTO ARRAY aTemp
	lt2=SECONDS()
	SELECT COUNT(*) FROM cTmp WHERE '15^' $ a1 INTO ARRAY aTemp
	lt3=SECONDS()
	SELECT COUNT(*) FROM cTmp WHERE AT('15^',a1)> 0  INTO ARRAY aTemp
	lt4=SECONDS()
	SELECT COUNT(*) FROM cTmp WHERE ATC('15^',a1)> 0  INTO ARRAY aTemp
	lt5=SECONDS()
	? lt2-lt1
	? lt3-lt2
	? lt4-lt3
	? lt5-lt4
	?'-----------------'	
ENDFOR 
Все равно $ впереди всех и разброс результатов почти тот же, Т.е. на 36% 'like' медленнее '$' как и все прочее.
...
Рейтинг: 0 / 0
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
    #35421528
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GoshaSВсе равно $ впереди всех
Это изначально и предполагалось, вопрос был насколько впереди.
CTAC-KOитак, по приведенному коду, ($ at 15984/18238), результаты такие:
Код: plaintext
1.
2.
AT() -  1315 . 472 
ATC() -  3026 . 011 
$ -  1222 . 698 
тест шел как видите полтора часа....
Чтобы вывод статуса проигнорировать мерим разницу в секундах:
(1315.472 - 1222.698) / 10000000 = 9,2774 микросекунды
Значительная разница получилась с моими данными (0,05 микросекунды). Передвинул у себя '$' почти в конец файла, несоклько раз запускал - молотит дольше, но разница такая же ~0,05 мксек.

Подождем что у тебя без статусбара получится.
...
Рейтинг: 0 / 0
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
    #35421663
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
без статусбара получилось:
Код: plaintext
1.
2.
АТ -  612 , 1 
АТС -  1654 , 47 
$ -  607 , 343 
...
Рейтинг: 0 / 0
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
    #35421676
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Код: plaintext
  _VFP.StatusBar = 'AT: ' + TRANSFORM( 10000000 -m.lnF)+SPACE( 3 )
На эту строчку у тебя 2/3 времени работы цикла идет.получилось что 1/2, а не 2/3 :)
а разница получилась ~5 вместо 93, как в предидущем случае. однако это на 1^10 меньше, т.е. вместо 9.3 мксек, вышло 0,5 мксек, но не 0,05. Мож с порядком де-то что-то?
...
Рейтинг: 0 / 0
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
    #35421684
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, забыл отметить, что прошлый раз я запустил ехе-шнег прямо с флешки, а этот раз скопировал все в корень С: и уже оттедова... возможно это тоже повлияло....
...
Рейтинг: 0 / 0
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
    #35421693
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Еще одно маленькое открытие сделал: AT(lower(lcC),lower(m.lsString)) равнозначно по времени AT(lcC,m.lsString)надо будет проверить сие относительно $.
Но вообще, если говорить о регистрозависимых функциях, то следует, сравнивать именно $ и ATC() - и тут-то, конечно, сравнение далеко не в пользу последнего... Странно, если позиция в подпрограмме ф-ции $ действительно вычисляется, но не возвращается, то чего такая разница, ведь АТС() = $ + возврат позиции? Тут же как в инвайте - просто добавь воды
...
Рейтинг: 0 / 0
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
    #35421698
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ой, блин, перепутал все. АТ - регистрозависимая как и $, так что их и надо было сравнивать, что мы и сделали...
...
Рейтинг: 0 / 0
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
    #35421703
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CTAC-KO Dima T
Код: plaintext
  _VFP.StatusBar = 'AT: ' + TRANSFORM( 10000000 -m.lnF)+SPACE( 3 )
На эту строчку у тебя 2/3 времени работы цикла идет.получилось что 1/2, а не 2/3 :)
а разница получилась ~5 вместо 93, как в предидущем случае. однако это на 1^10 меньше, т.е. вместо 9.3 мксек, вышло 0,5 мксек, но не 0,05. Мож с порядком де-то что-то?
Это больше на правду похоже :)
Насчет порядка: у меня 0.05 сек разницы на миллион операций
Вполне возможно что 0.5-0.05 из-за разных процессоров и погрешностей измерения.
Даже при 0.5 чтобы одну секунду выиграть должно быть менее 2 млн. расчетов, а это очень много, потеряется эта секунда во всем остальном в таком большом расчете. Что и требовалось доказать.
...
Рейтинг: 0 / 0
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
    #35422932
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так точно, ЧТД!

Стало быть на строковых операциях, где важно узнать о факте вхождения икомого в искомом, критерием выбора может служить лишь личное предпочтение (по-мне лучше бакс :) - т.к. ён короче), а если необходима дальнейшая обработка учитывая позицию вхождения, то конечно же АТ() (+, по необходимости, LOWER/UPPER), вместо ATC(), причем в конструкции с переменной, дабы не выполнять один и тот же АТ дважды.
А вот судя по тестам GoshaS, на SQL-выборках отставание АТ от $ более заметно, так что ежели нет индексов, могущих это дело RushMore-ить, то по скорости предпочтительнее всего будет все-таки $.
...
Рейтинг: 0 / 0
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
    #35429470
Glyba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПривет!

Всегда, когда необходимо узнать есть ли в строке тот или иной символ, программеры прибегают к
AT(SearchFor,SearchIn) =/<>/> 0 и практически никогда не видел SearchFor $ SearchIn.

Почему?

По-моему второй вариант предпочтительнее, т.к. во-первых производится 1 действие, во-вторых не вычисляется позиция вхождения искомого в искомом, соотв. он в разы быстрее, хотя это и не важно.
Это делают те же самые индусы, которые могут написать alltrim(str(m.lN)) вместо trim(str(m.lN)), или даже alltrim("Константа") (видел и такое)! Они же пишут, например:
if m.lN=1
...
endif
if m.ln=2
...
endif
- это, как вы поняли, вместо case. (Не стоит думать, что это редкая патология).
Они же пишут "where lfield=.T.", (вариант: "where not lfield==.F.").
Они же пишут... э-э... сейчас открою один из проектов, которые приходится сопровождать...
вот, долго искать не пришлось:
if !found()
return
endif
if found()
... && еще кучка повидла
endif
и т.д.
...
Рейтинг: 0 / 0
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
    #35429984
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GlybaЭто делают те же самые индусы, которые могут написать alltrim(str(m.lN)) ну такю конструкцию я и сам долго использовал, а затем перешел на LTrim(str(m.lN)), а соврешенно недавно перешел на TRANSFORM(m.lN)
честно признаюс_
ребята, я - индус!
к сожалению наше текущее поколение цивилизации лишено возможности рождаться сразу со знаниями, или нести опыт предыдущих жизней, мы знания и опыт вынуждены обретать по жизни каждое рождение с нуля.
...
Рейтинг: 0 / 0
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
    #35430113
Glyba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автормы знания и опыт вынуждены обретать по жизни каждое рождение с нуля.
Это так, но кто-то в самом деле обретает знания и опыт (кто-то даже хороший вкус!), а "индусов", видимо, можно определить как тех, кого ничто не побуждает развиваться. Вроде бы не заслуживает внимания, правда: alltrim(str(m.lN)) или trim(str(m.lN)), $ или at(). Или даже atcline() используют, чтобы определить, входит ли одна строка в другую (сам видел).
Но! Такой код создает впечатление, что писавший его не слишком задумывался о том, что он пишет. Локально, правда. Но в таких случаях оказывается, что и глобально там не все хорошо, в этом проекте.
Так что с точки зрения "работает / не работает" все равно, использовать $ или at(). Но это симптом. Всякого я насмотрелся, поэтому считаю себя вправе так говорить.
...
Рейтинг: 0 / 0
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
    #35430134
Glyba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 СТАС-КО: я, собственно, что сказать-то хотел всем этим? Если кто-то использует at() вместо $, вы не обязаны думать, что в этом есть смысл. Всего-то.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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