powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Не работает LEFT(<Поле>,AT(".",<Поле>))
9 сообщений из 9, страница 1 из 1
Не работает LEFT(<Поле>,AT(".",<Поле>))
    #37935321
SAS_Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Необходимо в запросе из данных, типа 123.456.7 выбрать только то, что находится до первой точки. Конструкции могут быть очень разного типа и без точек и с одной точкой
Конструкция типа
Left(alltrim(docs_1.doc_num),(AT('.',alltrim(docs_1.doc_num))-1)) ;
не работает, выдает только первый символ.
Хотя AT('.',alltrim(docs_1.doc_num)) выдает правильное значение и Left(alltrim(docs_1.doc_num),3) тоже выдает правильно.
В чем проблема или как решить по другому может быть
...
Рейтинг: 0 / 0
Не работает LEFT(<Поле>,AT(".",<Поле>))
    #37935339
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня все работает
Код: sql
1.
2.
docs_1_doc_num = '123.456.7'
? Left(alltrim(docs_1_doc_num),(AT('.',alltrim(docs_1_doc_num))-1))


ищи в окружающем коде ошибку.

Cкобок зачем столько? Так читабельнее
Код: sql
1.
? alltrim(Left(docs_1_doc_num, AT('.', docs_1_doc_num) - 1))
...
Рейтинг: 0 / 0
Не работает LEFT(<Поле>,AT(".",<Поле>))
    #37935372
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SAS_Z(AT('.',alltrim(docs_1.doc_num))Fox лишние скобки воспринимает как макроподстановку. И что там он себе навоспринимал - фиг его знает :)
...
Рейтинг: 0 / 0
Не работает LEFT(<Поле>,AT(".",<Поле>))
    #37935377
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonny540Fox лишние скобки воспринимает как макроподстановку. И что там он себе навоспринимал - фиг его знает :)
С чего это вдруг скобки макроподстановкой стали?

В примере ТС все работает с лишними скобками, читать только такой код тяжело.
...
Рейтинг: 0 / 0
Не работает LEFT(<Поле>,AT(".",<Поле>))
    #37935434
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начиная с VFP7 введена функция GetWordNum(), которая ищет "слова" по указанным "разделителям". По умолчанию, разделителем "слов" считается пробел. Но вполне можно указать в качестве разделителя и точку

Код: sql
1.
?GetWordNum("123.456.7", 1, ".")
...
Рейтинг: 0 / 0
Не работает LEFT(<Поле>,AT(".",<Поле>))
    #37935557
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ,
Dima TС чего это вдруг скобки макроподстановкой стали?Если можно, проясните ситуацию. У меня работают как &, так и скобки.
...
Рейтинг: 0 / 0
Не работает LEFT(<Поле>,AT(".",<Поле>))
    #37935650
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ
Код: sql
1.
?GetWordNum("123.456.7", 1, ".")


GetWordNum() нездоровая функция для разбора строки с разделителями. Несколько разделителей подряд она считает одним, разделитель на первом месте игнорирует:
Код: sql
1.
2.
3.
docs_1_doc_num = '.123.45.67'
? Left(alltrim(docs_1_doc_num),(AT('.',alltrim(docs_1_doc_num))-1))
? GetWordNum(docs_1_doc_num, 1, '.')


Jonny540Dima TС чего это вдруг скобки макроподстановкой стали?Если можно, проясните ситуацию. У меня работают как &, так и скобки.
Я так подозреваю что замена в коде макроподстановки на переменную в скобках в некоторых случаях у тебя отложилось как "скобки это макроподстановка". Это не так.
Наиболее частое использование это в командах с файлами. Там изначально синтаксис нездоровый. Например
Код: sql
1.
2.
3.
4.
lcFile = 'c:\text.txt'
delete file lcFile && 1. Удаление файла с именем lcfile
delete file &lcFile && 2. будет выполнено delete file c:\text.txt т.е. сначала подставится значение переменной в текст команды
delete file (lcFile) && 3. Имя файла будет взято из содержимого переменной lcFile


т.е. в третьем варианте скобки указывают фоксу взять содержимое переменной, но это не макроподстановка. Там где изначально предусмотрено брать содержимое переменной без разницы возьмешь ты ее в скобки или нет.
Макроподстановка - это когда сначала в текст команды вставляется содержимое переменной а потом то что получилось выполняется.
Скобки во всех выражениях выполняют такую же роль как и в других языках - определение порядка выполнения команд. И лишние скобки никак не влияют на результат.
...
Рейтинг: 0 / 0
Не работает LEFT(<Поле>,AT(".",<Поле>))
    #37936062
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, выкрутиться всегда можно. Например, добавив ведущий пробел перед выделением "слова".

Код: sql
1.
2.
?GetWordNum(".123.456.7", 1, ".")
?GetWordNum(" " + ".123.456.7", 1, ".")


А в данном случае я подозреваю проблема в том, что конструкция с AT() была использована в Select-SQL. А для Select-SQL размерность полей будущей выборки определяется по первой попавшейся записи. Вот видимо в первой записи либо вообще не оказалось значения, либо оказалось значение из одного символа. Для исправления проблемы надо явным образом указать итоговую размерность либо через CAST(), либо через PADR()

Код: sql
1.
2.
select PADR(Left(alltrim(docs_1.doc_num), AT('.',alltrim(docs_1.doc_num))-1), 10) ;
from docs_1


Разумеется, здесь 10 - это условная величина. Вместо нее надо поставить максимально возможную размерность для определяемого значения. Вероятно, это будет размерность самого поля docs_1.doc_num
...
Рейтинг: 0 / 0
Не работает LEFT(<Поле>,AT(".",<Поле>))
    #37937451
SAS_Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем.
У меня достаточно жесткий формат строк, поэтому и GetWordNum также решает задачу.
И проблема действительно было в этом
select PADR(Left(alltrim(docs_1.doc_num), AT('.',alltrim(docs_1.doc_num))-1), 10) ;
выбирает правильно поля.
Еще раз всем спасибо, особенно Владимиру.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Не работает LEFT(<Поле>,AT(".",<Поле>))
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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