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

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

Почему?

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

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

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


Поиск, осуществляемый функцией AT( ), ведется с учетом регистра. Чтобы выполнить поиск без учета регистра, воспользуйтесь функцией ATC( ).
...
Рейтинг: 0 / 0
07.07.2008, 16:21
    #35415562
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
Лично предпочитаю ATC()
...
Рейтинг: 0 / 0
09.07.2008, 15:11
    #35420641
CTAC-KO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
Раз получается так, что функция $ не поддается RushMore Optimization, чего про AT()/ATC() не сказано, то скорее всего в вфп это совершенно отдельные подпрограммы, поэтому, думаю, позиция там специально не вычисляется. Разве что чисто как переменная цикла, в котором просматриваются данные...
RushMore Optimization я всегда думал касается только работы с бд. При чем здесь, интересно работа функции и почему про AT()/ATC() не сказано, что они таки поддаются RushMore-у? Типа по-умолчанию поддается? Или имеется ввиду работа с бд с использованием $, когда, к примеру, накладывается фильтр?
...
Рейтинг: 0 / 0
09.07.2008, 16:11
    #35420900
CTAC-KO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
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
09.07.2008, 17:08
    #35421156
GoshaS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
Я конечно сильно извратился, прошу не пинать, однако вот результат:
Код: 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
09.07.2008, 17:18
    #35421197
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
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
09.07.2008, 17:37
    #35421282
GoshaS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
Еще поизвращался:
Код: 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
09.07.2008, 17:45
    #35421319
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
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
09.07.2008, 17:58
    #35421390
CTAC-KO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
итак, по приведенному коду, ($ at 15984/18238), результаты такие:
Код: plaintext
1.
2.
AT() -  1315 . 472 
ATC() -  3026 . 011 
$ -  1222 . 698 
тест шел как видите полтора часа....
...
Рейтинг: 0 / 0
09.07.2008, 18:08
    #35421431
CTAC-KO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
Dima TЗЫ Вот это зачем в цикл воткнул?
Код: plaintext
  _VFP.StatusBar = 'AT: ' + TRANSFORM( 10000000 -m.lnF)+SPACE( 3 )
На эту строчку у тебя 2/3 времени работы цикла идет.поздно прочитал :) Тыкнул чтобы процесс видеть, но потом запустил на изолированном компе, без монитора, подключений к инету/сети вообще без всяких доп. прог, потому в принципе оно не надо было. Ну запущу еще для прикола без трейсинга в статус. Действительно, команда мешала процессу, однако, думаю, на чистоту эксперимента не повлияла.
...
Рейтинг: 0 / 0
09.07.2008, 18:10
    #35421437
GoshaS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
Код: 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
09.07.2008, 18:37
    #35421528
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
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
09.07.2008, 20:10
    #35421663
CTAC-KO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
без статусбара получилось:
Код: plaintext
1.
2.
АТ -  612 , 1 
АТС -  1654 , 47 
$ -  607 , 343 
...
Рейтинг: 0 / 0
09.07.2008, 20:20
    #35421676
CTAC-KO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
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
09.07.2008, 20:26
    #35421684
CTAC-KO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
да, забыл отметить, что прошлый раз я запустил ехе-шнег прямо с флешки, а этот раз скопировал все в корень С: и уже оттедова... возможно это тоже повлияло....
...
Рейтинг: 0 / 0
09.07.2008, 20:37
    #35421693
CTAC-KO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
Dima T
Еще одно маленькое открытие сделал: AT(lower(lcC),lower(m.lsString)) равнозначно по времени AT(lcC,m.lsString)надо будет проверить сие относительно $.
Но вообще, если говорить о регистрозависимых функциях, то следует, сравнивать именно $ и ATC() - и тут-то, конечно, сравнение далеко не в пользу последнего... Странно, если позиция в подпрограмме ф-ции $ действительно вычисляется, но не возвращается, то чего такая разница, ведь АТС() = $ + возврат позиции? Тут же как в инвайте - просто добавь воды
...
Рейтинг: 0 / 0
09.07.2008, 20:39
    #35421698
CTAC-KO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
ой, блин, перепутал все. АТ - регистрозависимая как и $, так что их и надо было сравнивать, что мы и сделали...
...
Рейтинг: 0 / 0
09.07.2008, 20:50
    #35421703
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
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
10.07.2008, 13:57
    #35422932
CTAC-KO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
Так точно, ЧТД!

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

Всегда, когда необходимо узнать есть ли в строке тот или иной символ, программеры прибегают к
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
15.07.2008, 02:10
    #35429984
CTAC-KO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
GlybaЭто делают те же самые индусы, которые могут написать alltrim(str(m.lN)) ну такю конструкцию я и сам долго использовал, а затем перешел на LTrim(str(m.lN)), а соврешенно недавно перешел на TRANSFORM(m.lN)
честно признаюс_
ребята, я - индус!
к сожалению наше текущее поколение цивилизации лишено возможности рождаться сразу со знаниями, или нести опыт предыдущих жизней, мы знания и опыт вынуждены обретать по жизни каждое рождение с нуля.
...
Рейтинг: 0 / 0
15.07.2008, 08:57
    #35430113
Glyba
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
автормы знания и опыт вынуждены обретать по жизни каждое рождение с нуля.
Это так, но кто-то в самом деле обретает знания и опыт (кто-то даже хороший вкус!), а "индусов", видимо, можно определить как тех, кого ничто не побуждает развиваться. Вроде бы не заслуживает внимания, правда: alltrim(str(m.lN)) или trim(str(m.lN)), $ или at(). Или даже atcline() используют, чтобы определить, входит ли одна строка в другую (сам видел).
Но! Такой код создает впечатление, что писавший его не слишком задумывался о том, что он пишет. Локально, правда. Но в таких случаях оказывается, что и глобально там не все хорошо, в этом проекте.
Так что с точки зрения "работает / не работает" все равно, использовать $ или at(). Но это симптом. Всякого я насмотрелся, поэтому считаю себя вправе так говорить.
...
Рейтинг: 0 / 0
15.07.2008, 09:10
    #35430134
Glyba
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn
2 СТАС-КО: я, собственно, что сказать-то хотел всем этим? Если кто-то использует at() вместо $, вы не обязаны думать, что в этом есть смысл. Всего-то.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Интересно, а почему используют AT(SearchFor,SearchIn) а не SearchFor$SearchIn / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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