powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Сравнение по включению!
25 сообщений из 31, страница 1 из 2
Сравнение по включению!
    #32692411
Alex Is
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня вопрос!

Есть курсор Y с полем ХХХ(тип char) и таблица Z c полем AAA(тип varchar)

мне надо сравнить эти 2 поля, но данные поля ХХХ это всегда одно значение(если убрать все пробелы), а вот данные поля ААА это допустим значения
1 2 23 44 и т д которые разделяют фиксированное число пробелов!
Как мне сделать сравнение??
Большое спасибо!
...
Рейтинг: 0 / 0
Сравнение по включению!
    #32692494
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или я не совсем понял, или надо убрать пробелы из "ААА"? Тогда - STRTRAN... Sorry, но все-таки не совсем понял суть вопроса :-(
...
Рейтинг: 0 / 0
Сравнение по включению!
    #32692525
Alex Is
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пробелы надо убрать только слева! это понятно как!!!
Вопрос в другом! Как сравнить значение в поле ХХХ допустим 1
с значениями в поле ААА 1 2 23 44 поле типа varchar !
Значения в поле ААА разделяют фиксированное число пробелов и их убирать не надо!
...
Рейтинг: 0 / 0
Сравнение по включению!
    #32692625
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если посмотреть на сочетание GetWordCount & GetWordNum?
...
Рейтинг: 0 / 0
Сравнение по включению!
    #32692766
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понял, что ты хочешь получить в результате? Какие правила сравнения? Что должно вернуть, например, такие сравнение:

"1" = "22 21 33"
"1" = "22 1 33"
"1" = "12 33"
"1" = "1 22"

Какие из них вернут .T., а какие .F.
...
Рейтинг: 0 / 0
Сравнение по включению!
    #32692818
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex сегодня уже ушел... Рискну предположить :-)
.F. "1" = "22 21 33"
.T. "1" = "22 1 33"
.F. "1" = "12 33"
.T. "1" = "1 22"
Т.е. нужно точное сравнение одного слова ALLTRIM(y.xxx) со слова ми , содержащимися в z.aaa. Угадал? ;-) Ну, а то, что оно там varchar ... Ну и на здоровье! Плюс ко всему, конечно, EXACT и т.п. Вот я и предлагаю GetWordCount & GetWordNum... Конечно, цикл - не есть хорошо...
...
Рейтинг: 0 / 0
Сравнение по включению!
    #32692821
Гость_xxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ага, с дуру можно и Х сломать, особенно когда сама структурура данных один большой мусор.
...
Рейтинг: 0 / 0
Сравнение по включению!
    #32692836
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если...

Код: plaintext
ATCC(Y.XXX,Z.AAA)> 0 

?
...
Рейтинг: 0 / 0
Сравнение по включению!
    #32692955
MarinaVP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насколько поняла - поле с пробелами - поле фокс таблицы - поле varchar - поле SQL сервера. В самом простом случае RTRIM(X.AAA)==Z.AAA или RTRIM(X.AAA)==RTRIM(Z.AAA)

Ну или см. SET VARCHARMAPPING ON|OFF в VFP9

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

Код: plaintext
?AT(" "+ALLTRIM(Y.XXX)+" "," "+ALLTRIM(Z.AAA)+" ")> 0 

Т.е. я окружаю искомый символ пробелами и ищу не сам символ, а символ окруженный пробелами, предварительно добавив ведущий и концевой пробел в строке для поиска.

Впрочем, надо уточнить у автора, что же он в дейстивтельности хочет получить и в каком синтаксисе: FoxPro или MS SQL
...
Рейтинг: 0 / 0
Сравнение по включению!
    #32692997
MarinaVP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир , уже если окружать чем-то, то по-моему лучше было использовать что-то вроде CHR(1), так уж точно определите что надо, ибо и в VarChar могут быть значимые пробелы
...
Рейтинг: 0 / 0
Сравнение по включению!
    #32693010
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, CHR(1) не подходит. Я ведь использую не первый попавшийся символ, а символ-разделитель внутри строки Z.AAA

По условию задачи слова в этой строке окружены именно пробелами. Начальный и концевой пробел я вынужден добавить для того, чтобы окружить еще и первое и последнее слово.

Впрочем, если слова внутри строки Z.AAA разделены символом CHR(1), то именно его и надо будет добавлять в сравниваемые строки вместо ведущего и концевого пробела.
...
Рейтинг: 0 / 0
Сравнение по включению!
    #32693024
MarinaVP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну что ж, возможно Вы и правы
...
Рейтинг: 0 / 0
Сравнение по включению!
    #32693139
Alex Is
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор
"1" = "22 21 33"
"1" = "22 1 33"
"1" = "12 33"
"1" = "1 22"

Какие из них вернут .T., а какие .F.


Да именно это мне и надо!!

И ещё... значение в поле ХХХ может быть не одно!!! Их может быть несколько так же как и в поле AAA!
...
Рейтинг: 0 / 0
Сравнение по включению!
    #32693155
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex Is автор
"1" = "22 21 33"
"1" = "22 1 33"
"1" = "12 33"
"1" = "1 22"

Какие из них вернут .T., а какие .F.


Да именно это мне и надо!!

И ещё... значение в поле ХХХ может быть не одно!!! Их может быть несколько так же как и в поле AAA!
Алекс, так что же именно Вам надо? Я задал вопрос в надежде, что Вы на него ответите. А содержимое вопроса я и так знаю, ведь сам его и задавал

Приведите примеры значений полей XXX и AAA и какие из них должны дать .T., а какие .F. Кроме того, в каком синтаксисе надо писать сравнение: MS SQL или FoxPro?
...
Рейтинг: 0 / 0
Сравнение по включению!
    #32693203
Alex Is
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу прощения ещё не проснулся! :)

Синтаксис Fox Pro!

Значение поля ХХХ может быть только цифра, т. е. только одно значение!

Значения поля AAA это несколько значений(может быть очень много поле varchar 8000)! Все значения в поле ААА разделены фиксированным количеством пробелов(5 при условии что это значения (допустим)1 2, если же значения 1 23 то пробелов становится четыре).

Мне надо сравнить ХХХ с ААА и возвращать совпавшие значения!
...
Рейтинг: 0 / 0
Сравнение по включению!
    #32693545
Maltsev Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Используй AT() !!!

?Iif(At(Padl(AllTrim(AAA),5," "),ZZZ)#0,.t.,.f.)

Я исходил из того, что длина слова у тебя фиксированная = 5 символов
...
Рейтинг: 0 / 0
Сравнение по включению!
    #32694628
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
данные поля ХХХ это всегда одно значение
И ещё... значение в поле ХХХ может быть не одно!!!
Еще вопросы есть???
Без циклов и GetWordCount & GetWordNum не обойдешься ;-)
P.S. Гость_ххх прав?
...
Рейтинг: 0 / 0
Сравнение по включению!
    #32694718
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения ещё не проснулся! :)
Синтаксис Fox Pro!
Значение поля ХХХ может быть только цифра, т. е. только одно значение!
Sorry, Alex! Недочитал...
Но все равно - без цикла по ААА не обойдешься! :-)
5 при условии что это значения (допустим) 1 2, если же значения 1 23 то пробелов становится четыре
А вот этой закономерности не понял :-(
...
Рейтинг: 0 / 0
Сравнение по включению!
    #32694733
Фотография neznajka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А че тут понимать - во втором случае следующе число (23) двузначное, поэтому его первый разряд занимает один из 5 фиксированных пробелов, таким образом, их остается всего четыре; а если бы это число было 3-значное (например, 323, то пробелов оставалось бы всего 3, и т.д.), т.е - начальная позиция очередной порции разделительных пробелов отсчитывается от последней цифры предыдущего числа. Я прав?
...
Рейтинг: 0 / 0
Сравнение по включению!
    #32694901
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если длина "слова" - это фиксированное количество символов (в данном случае - 6) причем недостающее дополняется пробелами слева , то можно так:

Код: plaintext
?AT(PADL(LTRIM(Y.XXX), 6 ),SPACE( 6 )+LTRIM(Z.AAA))> 0 

Если я правильно понял, то именно слева, а не справа.

Например, если у тебя исходная строка Z.AAA имеет значение:

"1"+SPACE(4)+"23"

то в данной формуле она преобразуется в вид

SPACE(6)+"1"+SPACE(4)+"23"

Теперь, если в поле Y.XXX записано значение

SPACE(k)+"2"+SPACE(n)

то в данной формуле оно преобразуется в значение

SPACE(5)+"2"

В результате, ищем вхождение строки SPACE(5)+"2" в строку SPACE(6)+"1"+SPACE(4)+"23" и разумеется ничего не находим.

Правда, если между словами в Z.AAA не будет вообще ни одного пробела, то такая функция не сработает. Точнее, она не гарантирует точного нахождения слов, поскольку может найти сочетание из 2 рядом стоящих слов слившихся в одно из-за отсутствия пробелов между ними.
...
Рейтинг: 0 / 0
Сравнение по включению!
    #32694906
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опечатка. Должно быть так:

Код: plaintext
1.
2.
SELECT Y.XXX, Z.AAA ;
FROM Y ;
INNER JOIN Z ON AT(PADL(ALLTRIM(Y.XXX), 6 ),SPACE( 6 )+LTRIM(Z.AAA))> 0 
...
Рейтинг: 0 / 0
Сравнение по включению!
    #32695035
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все значения в поле ААА разделены фиксированным количеством пробелов
Вроде бы между значениями должно стоять фиксированное кол-во пробелов. Я понял так...
to neznajka - не слишком ли умно для такой, мягко говоря, странной :-) структуры данных?
to ВладимирМ - Вам не начинает казаться, что мы тут зря тратим время?
to ALL - Ну, может я слегка слепой ;-( А где шла речь о фиксированной длине слова в ААА???
...
Рейтинг: 0 / 0
Сравнение по включению!
    #32695070
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Redrik
to ВладимирМ - Вам не начинает казаться, что мы тут зря тратим время?

Обычная ситуация, типичная для большинства новичков:

-) человек не может внятно сформулировать задачу, приходится "додумывать", что же именно он имел в виду
-) не может удержать в памяти все ответы на свой вопрос, поэтому отвечает только на один...два, самые запомнившиеся. Причем отвечает так, что опять-таки непонятно, о чем это он
-) мы тут стараемся, пишем, а спрашивающий уже ушел. Проблема была решена так или иначе или вообще отложена, но сказать об этом забыли.

Приходится писать максимально подробно и с кучей вариантов в надежде, что либо один из вариантов окажется решением именно того о чем спрашивали, или человек наконец-то поймет, что же именно он хотел спросить
...
Рейтинг: 0 / 0
Сравнение по включению!
    #32695124
Фотография neznajka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Redrik:
Согласен, с "умностью" может и перебор, в данном случае. Но (по своей работе знаю) зачастую бывает так, что мы не в состоянии повлиять на структуру поступающих в наше распоряжение данных, приходится извращаться над тем, что есть... Это, скорее всего, не вина Алекса, а его беда, даже если он действительно новичек.
...
Рейтинг: 0 / 0
25 сообщений из 31, страница 1 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Сравнение по включению!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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