powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Поиск записей в базе по шаблону
7 сообщений из 7, страница 1 из 1
Поиск записей в базе по шаблону
    #33032335
рам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется DBF база с полем символьного типа A1
Необходимо отобрать из нее все записи соответствующие шаблону А9999АА,
где А-буквы,9-цифры
Подскажите пожалуйста как это сделать

Спасибо
...
Рейтинг: 0 / 0
Поиск записей в базе по шаблону
    #33032433
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. HELP IsAlpha(), IsDigit()
2. HELP CHRTRAN()
Например:
Код: plaintext
1.
select * from yourtable where ;
  chrtran(yourfield,'BCDEF...АБВГ...012...8','AAAAA...AAAA...999...9')='А9999АА'
...
Рейтинг: 0 / 0
Поиск записей в базе по шаблону
    #33032526
РАМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы наверное меня не поняли.
Вопрос такой.
Необходимо просмотреть всю базу по полю А1 и выбрать все записи по шаблону. Не лучще ли написать процедуру, поскольку шаблонов у меня будет несколько.

Спасибо
...
Рейтинг: 0 / 0
Поиск записей в базе по шаблону
    #33032567
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Процедуру написать лучше ;-)
Я Вас понял ;-)))
Просто я предполагаю, что полезнее предложить идею, а не готовое решение.
...
Рейтинг: 0 / 0
Поиск записей в базе по шаблону
    #33032594
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Urri видимо недостаточно внятно изложил идею.

Той функции, которая Вам нужна в FoxPro нет. Однако ее достаточно просто реализовать самому через функцию ChrTran().

Идея заключается в следующем: Все буквы и пробел заменяются на букву "A", а все цифры заменяются на символ "9". Далее полученный результат сравнивается с нужным шаблоном.

Если подробно, то это выглядит примерно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
* Список возможных символов
LOCAL lcBukva
lcBukva = "qwertyuiopasdfghjklzxcvbnm"+;
	"QWERTYUIOPASDFGHJKLZXCVBNM"+;
	"ёйцукенгшщзхъфывапролджэячсмитьбю"+;
	"ЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ"

* Строка из одинх букв A, длиной в столько символов, сколько в m.lcBukva
LOCAL lcZamena
lcZamena = REPLICATE("A",LEN(m.lcBukva))

* Теперь собственно сам запрос
SELECT * FROM MyTable WHERE ;
ChrTran(MyField,m.lcBukva+" "+"1234567890",m.lcZamena+"A"+"9999999999")="А9999АА"

Какой именно будет шаблон роли не играет. Вы получили универсальную функцию приведения к шаблону.
...
Рейтинг: 0 / 0
Поиск записей в базе по шаблону
    #33034021
Рам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FUNCTION shablon
PARAMETER ast
DIMENSION st(10)
PRIVATE i,st

FOR i=1 TO LEN(ALLTRIM(ast))
st(i)=SUBSTR(ast,i,1)
ENDFOR
DO CASE
CASE LEN(ast)=8
IF IsAlpha(st(1)) AND ISDIGIT(st(2)) AND ISDIGIT(st(3)) AND ISDIGIT(st(4));
AND IsAlpha(st(5)) AND IsAlpha(st(6))AND ISDIGIT(st(7))AND ISDIGIT(st(8))then
RETURN '01'
ENDIF
IF IsAlpha(st(1)) AND IsAlpha(st(2)) and ISDIGIT(st(3)) AND ISDIGIT(st(4)) AND ISDIGIT(st(5));
AND ISDIGIT(st(6)) AND ISDIGIT(st(7)) AND ISDIGIT(st(8)) then
RETURN '02'
ENDIF
IF ISDIGIT(st(1)) AND ISDIGIT(st(2)) AND ISDIGIT(st(3));
AND ISDIGIT(st(4)) AND IsAlpha(st(5)) AND IsAlpha(st(6)) AND iSDIGIT(st(7)) AND ISDIGIT(st(8))then
RETURN '002'
ENDIF

CASE LEN(ast)=6
IF IsAlpha(st(1)) AND ISDIGIT(st(2)) AND ISDIGIT(st(3)) AND ISDIGIT(st(4));
AND IsAlpha(st(5)) AND IsAlpha(st(6))then
RETURN '001'
ENDIF
IF IsAlpha(st(1)) AND IsAlpha(st(2)) and ISDIGIT(st(3)) AND ISDIGIT(st(4)) AND ISDIGIT(st(5));
AND ISDIGIT(st(6)) then
RETURN '020'
ENDIF
IF ISDIGIT(st(1)) AND ISDIGIT(st(2)) AND ISDIGIT(st(3));
AND ISDIGIT(st(4)) AND IsAlpha(st(5)) AND IsAlpha(st(6)) then
RETURN '24'
ENDIF

CASE LEN(ast)=7
IF IsAlpha(st(1)) AND IsAlpha(st(2)) AND ISDIGIT(st(3)) AND ISDIGIT(st(4));
AND ISDIGIT(st(5)) AND iSDIGIT(st(6)) AND ISDIGIT(st(7))then
RETURN '91'
ENDIF
IF ISDIGIT(st(1)) AND ISDIGIT(st(2));
AND ISDIGIT(st(3)) AND IsAlpha(st(4)) AND IsAlpha(st(5)) AND iSDIGIT(st(6)) AND ISDIGIT(st(7))then
RETURN '910'
ENDIF
IF IsAlpha(st(1)) AND ISDIGIT(st(2)) AND ISDIGIT(st(3)) AND ISDIGIT(st(4));
AND IsAlpha(st(5)) AND IsAlpha(st(6)) AND IsAlpha(st(6)) then
RETURN '22'
ENDIF
IF IsAlpha(st(1)) AND ISDIGIT(st(2)) AND ISDIGIT(st(3));
AND ISDIGIT(st(4)) AND ISDIGIT(st(5)) AND iSDIGIT(st(6)) AND ISDIGIT(st(7))then
RETURN '92'
ENDIF
IF ISDIGIT(st(1)) AND ISDIGIT(st(2));
AND ISDIGIT(st(3)) AND ISDIGIT(st(4)) AND IsAlpha(st(5)) AND iSDIGIT(st(6)) AND ISDIGIT(st(7))then
RETURN '92'
ENDIF
IF ISDIGIT(st(1)) AND ISDIGIT(st(2));
AND ISDIGIT(st(3)) AND ISDIGIT(st(4)) AND IsAlpha(st(5)) AND IsAlpha(st(6))AND IsAlpha(st(7))then
RETURN '21'
ENDIF

CASE LEN(ast)=5
IF ISDIGIT(st(1)) AND ISDIGIT(st(2));
AND ISDIGIT(st(3)) AND ISDIGIT(st(4)) AND IsAlpha(st(5)) then
RETURN '920'
ENDIF
IF ISDIGIT(st(1)) AND ISDIGIT(st(2));
AND ISDIGIT(st(3)) AND IsAlpha(st(4)) AND IsAlpha(st(5)) then
RETURN '911'
ENDIF

CASE LEN(ast)=9
IF IsAlpha(st(1)) AND ISDIGIT(st(2)) AND ISDIGIT(st(3));
AND ISDIGIT(st(4)) AND ISDIGIT(st(5)) AND IsAlpha(st(6)) AND IsAlpha(st(7))AND ISDIGIT(st(8)) AND ISDIGIT(st(9))then
RETURN '220'
ENDIF
OTHERWISE
RETURN ''
ENDCASE

Здесь указаны несколько шаблонов.
Когда в записях попадается строки неописанного в данной процедуре шаблона функция возвращает .Т., почему это происходит.
Вызов осуществляю так
SET PROCEDURE TO SHABLON

USE avto.dbf IN 0
GO TOP
DO WHILE .NOT. EOF()
IF shablon(st_num)='01' THEN
replace typ_num WITH '01'
ENDIF
IF shablon(st_num)='02' THEN
replace typ_num WITH '02'
ENDIF
IF shablon(st_num)='22' THEN
replace typ_num WITH '22'
ENDIF
IF shablon(st_num)='91' THEN
replace typ_num WITH '91'
ENDIF
IF shablon(st_num)='92' THEN
replace typ_num WITH '92'
ENDIF
ENDDO
...
Рейтинг: 0 / 0
Поиск записей в базе по шаблону
    #33034592
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Рам!

Какой кошмар... Может стоит всё-же подумать над вариантом Urri-Владимира? Тем паче что он значительно более универсальный.

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Поиск записей в базе по шаблону
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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