powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Максимальная длина строки для & или EVALUATE( )
19 сообщений из 19, страница 1 из 1
Максимальная длина строки для & или EVALUATE( )
    #33071688
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В хелпе про ограничения че-то... ни че не нашел...
Лис 8-ой.

У меня собралась переменная:
Код: plaintext
1.
?LEN(a1) &&  13000 
&a1  && выдает ошибку  1252  - Compiled code for this line is to long

Можно ли это ограничение как-нить обойти не разбивая переменную...


Всем заранее сенкс...
...
Рейтинг: 0 / 0
Максимальная длина строки для & или EVALUATE( )
    #33071741
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
& MemVarName [.cExpression]
MemVarName - длинна не может превышать максимально допустимой длинны оператора в фокспро
.cExpression - необязательный параметр используется для присоединения дополнительных символов
...
Рейтинг: 0 / 0
Максимальная длина строки для & или EVALUATE( )
    #33071747
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EVALUATE(cExpression)
cExpression - максимальная дина 255 сиволов
вот так
...
Рейтинг: 0 / 0
Максимальная длина строки для & или EVALUATE( )
    #33071781
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
leaf EVALUATE(cExpression)
cExpression - максимальная дина 255 сиволов
вот так

Попробу так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
c = "'aaaaaaaaaaaaaaaaaaaaaaaaaaaaa'" +;
"+'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'"  +;
"+'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'"  +;
"+'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'"  +;
"+'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'"  +;
"+'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'"  +;
"+'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'"  +;
"+'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'"  +;
"+'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'"  +;
"+'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'"
?LEN(с)
?c
?EVALUATE(c)

Или так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
b = "a='aaaaaaaaaaaaaaaaaaaaaaaaaaaaa'"  +;
"+'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'"  +;
"+'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'"  +;
"+'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'"  +;
"+'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'"  +;
"+'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'"  +;
"+'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'"  +;
"+'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'"  +;
"+'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'"  +;
"+'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'"
?LEN(b)
&b
?a
...
Рейтинг: 0 / 0
Максимальная длина строки для & или EVALUATE( )
    #33071782
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для справки

VFP 8
Maximum # of characters per command line 8,192
Maximum # of characters per macro substituted line 8,192


Почитай еще описание функции

EXECSCRIPT( )
...
Рейтинг: 0 / 0
Максимальная длина строки для & или EVALUATE( )
    #33071818
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо таких подробностей не знал обычно пользуюсь рускоязычным хелпом естественно с 5.0
кажется в этом месте у фокса ничего не изменилось?
ну может за исключением максимально допустимой длинны оператора ?
...
Рейтинг: 0 / 0
Максимальная длина строки для & или EVALUATE( )
    #33071829
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2IgorProgrammer
к чему изобретать велосипед и гемор себе в зад если есть команда
repl('a',256) ?
...
Рейтинг: 0 / 0
Максимальная длина строки для & или EVALUATE( )
    #33071875
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
leafобычно пользуюсь рускоязычным хелпом естественно с 5.0
"Вас обманули! Это шанхайский барс!" (с)

Русский HELP существует только по версии VFP3. Это был официальный перевод MicroSoft. Был даже бумажный вариант перевода. Такой здоровенный "талмуд".

HELP для старших версий FoxPro официально не переводился. Я как-то сомневаюсь, что нашелся энтузиаст выполнить такую неблагодарную работу.

Например, создание COM-серверов появилось только в VFP5. Попробуйте найти в своем HELP команду

BUILD DLL
...
Рейтинг: 0 / 0
Максимальная длина строки для & или EVALUATE( )
    #33071899
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да похоже что так я как то не вдавался этой команды нет но хелп всё равно не плох есть тока app exe project
...
Рейтинг: 0 / 0
Максимальная длина строки для & или EVALUATE( )
    #33071908
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати насчет обманули я его не покупал
но человек который мне его "подарил" говорил что от 5.0 и он долго за ним гонялся так что может самопал т.к на стиль микрософта не похоже хотя кто его знает какой у них тогда стиль был когда 3.0 ходила
...
Рейтинг: 0 / 0
Максимальная длина строки для & или EVALUATE( )
    #33071911
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
leafк чему изобретать велосипед и гемор себе в зад если есть команда
repl('a',256) ?
Для Вас был пример как мона собрать строку более 256 символов и выполнить ее...
Читайте топик... тут идет речь о ограничении в выполняемой строке...


ВладимирММрак какой-то...
Дествительно огранка в 8,192 символов.

EXECSCRIPT( )
Та-же ошибка...
Не уж нельзя обойти 8,192

Не хочеться следить за размерами строки и разбивать ее...
...
Рейтинг: 0 / 0
Максимальная длина строки для & или EVALUATE( )
    #33071938
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то у Вас в самой строке неправильно. Для EXECSCRIPT() ограничением является предельное количество символов в переменной памяти, а это:

VFP8Maximum # of characters per character string or memory variable 16,777,184

Может, Вы сначала потренеруетесь на небольших командах?

Приведенный Вами пример некорректен. Вы хотите сказать, что забиваете кучу текста в переменную (более 8 тысяч символов) одной командой?

Попробуйте выполнить свой код напрямую. Без макроподстановки.
...
Рейтинг: 0 / 0
Максимальная длина строки для & или EVALUATE( )
    #33071986
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМПриведенный Вами пример некорректен. Вы хотите сказать, что забиваете кучу текста в переменную (более 8 тысяч символов) одной командой?
Не это собирается строка для стыковочного файла...

Может Вы мне предложите другой вариант решения моей проблемы...

Есть куча таблиц...
Нужно создать стыковочный фал с определенными разделителями...
сканю файл
бегу по полям и перевожу все в строку, а из строки разделитель меняю на CHR(его код) добавляя нужный разделитель...
все это собирается в одну строку и fputs вкладывается в файл.

но каждый раз при скане пробегать по полям замедляет работу...
Особенно если эт 40 таблиц... да еще и таблиц 10 по 200 полей...
Или я не прав...

Вот я и хочу собрать строку из всех полей и запихнуть в строку, а потом в скане выполнять...
На первой же таблице с 230 полями я застрял... так как выполняемая строка получилась более 13 000
...
Рейтинг: 0 / 0
Максимальная длина строки для & или EVALUATE( )
    #33072010
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМЧто-то у Вас в самой строке неправильно. Для EXECSCRIPT() ограничением является предельное количество символов в переменной памяти, а это:
Была строка (урезал)...
"'&VIDPROJECT&'+STRTRAN(ALLTRIM(STR(smeti.VIDPROJECT,20,8)),',','.')+;" +CHR(13)+"'&KOD&'+poluch_snach_str(ALLTRIM(smeti.KOD))"

Попробывал на:
bb="ss='&VIDPROJECT&'+STRTRAN(ALLTRIM(STR(smeti.VIDPROJECT,20,8)),',','.')+;" +CHR(13)+"'&KOD&'+poluch_snach_str(ALLTRIM(smeti.KOD))"+CHR(13)+"return ss"
?EXECSCRIPT(bb)
Работает....

к своей строке добавил:
вначале присвоение переменной ss=
после каждого поля кроме последнего '+;' + CHR(13)
и к последнеему +CHR(13)+"return ss"

Попробывал выполнить...
Та-же ошибка... 1252 - Compiled code for this line is to long
...
Рейтинг: 0 / 0
Максимальная длина строки для & или EVALUATE( )
    #33072049
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы можете объяснить, зачем внутри макроподстановки всталяете перенос команды (символ точки с запятой)?

Там нужен только и исключительно символ перевода строки (CHR(13)+CHR(10)) для отделения одной команды от другой.

Попробуйте скинуть вашу переменную в текстовый файл

Код: plaintext
1.
StrToFile(m.bb,"Test.prg")
MODIFY COMMAND test.prg

и посмотрите, что именно там получилось. Попробуйте откомпилировать полученный файл.

Сообщение типа "line is to long" не обязательно говорит о том, что превышен размер строки. Это может быть следствием синтаксической ошибки. Но такой ошибки в результате которой "склеились" несколько строк команд. Например, лишнюю кавычку поставили.
...
Рейтинг: 0 / 0
Максимальная длина строки для & или EVALUATE( )
    #33072101
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поробовал...
Он даже не компилется...

Говорит что длинная строка...
...
Рейтинг: 0 / 0
Максимальная длина строки для & или EVALUATE( )
    #33072117
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разбтл эту громадину
тип ss= 1 часть
ss1 = 2 часть
и т. д.

И все заработало
...
Рейтинг: 0 / 0
Максимальная длина строки для & или EVALUATE( )
    #33072249
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorProgrammerПоробовал...
Он даже не компилется...

Говорит что длинная строка...
Кто не компилиться? Файл PRG? Ну, так явно что-то в синтаксисе! Выложите сюда получившийся файл.
...
Рейтинг: 0 / 0
Максимальная длина строки для & или EVALUATE( )
    #33072310
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМКто не компилиться? Файл PRG? Ну, так явно что-то в синтаксисе! Выложите сюда получившийся файл.
С кодом все нормально...

Код: plaintext
1.
Если разбить исполняемую строку на более мелкие < 8000 
То prg работает как дети в школу...

Да и ладно... Пока я тута общался...
Так все забойдяшил через массив...
Код: plaintext
1.
2.
3.
4.
5.
DIMENSION my_mas_perem( 20 )
STORE '' TO my_mas_perem
*когда пробегаюсь по всем колонкам таблицы и собираю строку
IF LEN(my_mas_perem[my_nach_mas]) >  5000  && не более  5   000  символов
	my_nach_mas = my_nach_mas +  1 
ENDIF
в скане не бега по колонкам а только по масиву
Надеюсь 100 000 символов хватит для обработки строк...
Код: plaintext
1.
2.
3.
STORE '' TO my_all_pole_to_txt
FOR my_retur =  1  TO  20 
	my_all_pole_to_txt = my_all_pole_to_txt + IIF(!EMPTY(my_mas_perem[my_retur]),EVALUATE(my_mas_perem[my_retur]),'')
ENDFOR
И осталось только FPUTS...

Лады...
Теперь осталось тока написать функцию возврата и все...


Всем дискутирующим в этом топике Огромный СЕНКС...
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Максимальная длина строки для & или EVALUATE( )
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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