powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Text...Endtext
14 сообщений из 14, страница 1 из 1
Text...Endtext
    #38208273
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никогда не пользовался этой конструкцией. Вот потребовалось.
Нужно, в зависимости от условия, вставить строку, примерно так:
text ...
...
If uclovie
<<вставляемая строка>>
endi
....
endtext

те, при выполнении uclovie в выходной строке должна появиться строка <<...>>, иначе ее не должно быть.

Или как-то иначе?
...
Рейтинг: 0 / 0
Text...Endtext
    #38208281
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
text to lcText textmerge noshow
Какой-то текст <<iif(uclovie, 'текст по условию', '')>> Какой-то текст
endtext
...
Рейтинг: 0 / 0
Text...Endtext
    #38208297
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

это-то понятно, но возникают проблемы преобразований и опять же пустая строка в полученном тексте
...
Рейтинг: 0 / 0
Text...Endtext
    #38208355
Дед Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно такой кострукцией воспользоваться:

SET TEXTMERGE ON TO MEMVAR sqlReq NOSHOW
\BEGIN TRANSACTION
\UPDATE contract SET
\ ContractNumber = <<m.ContractNumber>>
\ , ContractDate = <<m.ContractDate>>
\WHERE id = <<m.idCntr>>
\ BEGIN
\ INSERT Contract
\ (<<IIF(m.memberType = "1","idBank","idClientInk")>>, idContract)
\ VALUES
\ (<<IIF(m.memberType = "1", m.idBnk_, m.idClient)>>, <<(m.idCntr>>)
\ END
\ COMMIT TRANSACTION
SET TEXTMERGE TO
...
Рейтинг: 0 / 0
Text...Endtext
    #38208361
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glamisDima T,

это-то понятно, но возникают проблемы преобразований и опять же пустая строка в полученном тексте
Какие проблемы? Откуда пустая строка?

Покажи на конкретном примере что тебя не устраивает.
...
Рейтинг: 0 / 0
Text...Endtext
    #38208539
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дед Евгений,

да, пожалуй так луче
...
Рейтинг: 0 / 0
Text...Endtext
    #38208560
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

1. Если условие .f., то будет строка в которой ничего не написано.
2. По преобразованиям: нать каждый раз помнить какого типа элементы выражения и преобразовыввать. Хорошо, если всегда одна переменная, а если разные, и с разными типами? например: дата-время-датавремя-строка? Кончно преобразовать не проблема, но зачем лишние напряги?
...
Рейтинг: 0 / 0
Text...Endtext
    #38208615
Дед Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в чем проблема, можно и так:

SET TEXTMERGE ON TO MEMVAR sqlReq NOSHOW
\SELECT curValue, type AS tp
\FROM Globals
\WHERE UPPER(name) = '<<UPPER(varName)>>'
IF m.actidData = 1
\ORDER BY <<VarDateTime>>
ELSE
\ORDER BY <<VarDate>>
ENDIF
SET TEXTMERGE TO

Здесь в переменную попадают только те строчки, которые обозначены слешем, а между ними любые проверки и контролы можешь писать.
...
Рейтинг: 0 / 0
Text...Endtext
    #38208821
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glamisDima T,

1. Если условие .f., то будет строка в которой ничего не написано.
Перевод строки надо делать внутри вставляемой строки
lcEnter = chr(13) + chr(10)
Код: sql
1.
2.
3.
4.
text to lcText textmerge noshow
Какой-то текст <<iif(uclovie, lcEnter + 'текст по условию', '')>> 
Какой-то текст
endtext


glamis2. По преобразованиям: нать каждый раз помнить какого типа элементы выражения и преобразовыввать. Хорошо, если всегда одна переменная, а если разные, и с разными типами? например: дата-время-датавремя-строка? Кончно преобразовать не проблема, но зачем лишние напряги?
Тип поля/переменной надо знать всегда, иначе проблемы могут вылезти где угодно и решать их будет достаточно сложно. Для облегчения жизни придумана венгерская нотация.
Преобразовывать обычно все равно надо, например строка может быть полем таблицы и будет с кучей пробелов. С числами еще интереснее. Запусти
Код: sql
1.
2.
3.
4.
5.
6.
7.
a =12
b =3
c = a/b
text to lcText textmerge noshow
<<c>>
endtext
? lcText



PS Как вариант, можно один раз написать функцию преобразования, которая определит тип исходного значения и преобразует в строку. В коде использовать эту функцию не вспоминая о типах.
...
Рейтинг: 0 / 0
Text...Endtext
    #38208840
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

Да все это понятно. Вопрос был в ветвлении внутри text. Все решилось set textmerge
...
Рейтинг: 0 / 0
Text...Endtext
    #38209260
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем писать условие внутри? У text..endtext есть ключевое слов Additive позволяющее писать текст в конец ранее созданной переменной

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
lcText = ''
text to lcText additive
one
endtext

if (...)
text to lcText additive PRETEXT Chr(13)+Chr(10)
two
endtext
endif

* Смотрим, что получилось
?lcText



Кроме того, можно в опции PRETEXT указать параметр 4, который автоматически исключит все пустые строки из переменной

Код: sql
1.
2.
3.
4.
5.
6.
Text to t2 pretext 4 noshow
123

456
endtext
?t2
...
Рейтинг: 0 / 0
Text...Endtext
    #38209681
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ,

pretext - понятно, я применяю 7
additive - понятно, но на мой взгляд, для ветвления стройнее смотрится set textmerge
...
Рейтинг: 0 / 0
Text...Endtext
    #38209796
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glamisadditive - понятно, но на мой взгляд, для ветвления стройнее смотрится set textmerge
На мой взгляд - нет. Использование в коде программы символов для печати/вывода, с моей точки зрения, дурной стиль программирования. Процесс подготовки данных, по возможности, не стоит смешивать с процессом вывода/отображения данных.

Собственно, лично я вообще сформировал бы итоговую переменную из кусков прямым сложением.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
text to var1
начало текста
endtext

if (...)
    var2 = '...'
else
    var2 = ''
endif

text to var3
окончание текста
endtext

* Итог
varTotal = m.var1 + m.var2 + m.var3
...
Рейтинг: 0 / 0
Text...Endtext
    #38210592
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ,

На самом деле первоначально это и было сложение строк, но в больших кусках формируемого текста не всегда видны проблемные места, да и приходится поддерживать структурированность текста. В конструкциях text и \ вроде лучше видно.
Ну а что касается того что лучше: text, \, = или Store - дело вкуса. Я обычно стараюсь, чтоб было 1- компактно, 2 - наглядно и 3- чтоб законченный блок влезал на экран. В каждом случае есть свои преимущества.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Text...Endtext
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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