Сопоставление с образцом Язык программирования BASIC и база данных Universe

Мне нужно определить следующие шаблоны в строке. - "2Н':'2Н':'2Н" - "2Н'-'2Н'-'2Н" - "2Н'/'2Н'/'2Н" - "2Н'/'2Н'-'2Н" И ТАК. НА.....

в основном я хочу этот шаблон, если он написан простым языком 2 ЧИСЛА [: / -] 2 ЧИСЛА [: / -] 2 ЧИСЛА

Так есть ли в любом случае, с помощью которого я мог бы написать один шаблон, который будет охватывать все возможные сценарии? иначе я должен написать всего 9 шаблонов и должен сопоставить все 9 шаблонов со строкой.... и это не сценарий в моем коде, мне нужно сопоставить 4, 2 числовые цифры, разделенные [: / -] для строки для которого я должен написать всего 27 шаблонов. Итак, для понимания цели я взял 3,2-значный сценарий... Пожалуйста, помогите мне... Спасибо.


person Nitin Rathod    schedule 18.08.2016    source источник


Ответы (3)


Может быть, вы могли бы попробовать что-то вроде (выберите стиль R83)

OK = X ПОИСКПОЗ "2N1X2N1X2N" И X[3,1]=X[6,1] И ИНДЕКС(":/-",X[3,1],1) > 0

Где переменная X - это некоторая входная строка, например: 12-34-56.

Следует установить для переменной OK значение 1, если проверка прошла успешно, иначе 0 для любого недопустимого формата.

Кажется, что все ваши необходимые проверки в одном утверждении. Я предположил, что нечисловые символы должны быть одинаковыми. Если это не так, проверка может быть изменена на что-то вроде:

OK = X ПОИСКПОЗ "2N1X2N1X2N" И ИНДЕКС(":/-",X[3,1],1) > 0 И ИНДЕКС(":/-",X[6,1],1) > 0

Хорошо, я думаю, требование окружающих символов не было для меня очевидным. Тем не менее, это не делает его намного сложнее. Вам просто нужно «разобрать» строку в поисках первого (я полагаю) такого шаблона (если есть) во входной строке. Это можно сделать в пару строк кода. Вот (довольно непроверенная) тестовая программа в стиле R83:

PROMPT ":"
LOOP
  LOOP
    CRT 'Enter test string':
    INPUT S
  WHILE S # "" AND LEN(S) < 8 DO
    CRT "Invalid input! Hit RETURN to exit, or enter a string with >= 8 chars!"
  REPEAT
UNTIL S = "" DO
  *
  * Look for 1st occurrence of pattern in string..
  CARDNUM = ""
  FOR I = 1 TO LEN(S)-7 WHILE CARDNUM = ""
    IF S[I,8] MATCH "2N1X2N1X2N" THEN
      IF INDEX(":/-",S[I+2,1],1) > 0 AND INDEX(":/-",S[I+5,1],1) > 0 THEN
        CARDNUM = S[I,8] ;* Found it!
      END ELSE I = I + 8
    END
  NEXT I
  *
  CRT CARDNUM
REPEAT

Здесь всего 7 или 8 строк, которые фактически ищут шаблон номера карты в исходной/тестовой строке.

person stope19    schedule 19.08.2016
comment
эй Спасибо за ответ, это может сработать..... но здесь строка, с которой я сравниваю, не является целевой строкой, строка похожа на эту. строка похожа на комментарии, и между этими комментариями мне нужно найти номер кредитной карты, поэтому невозможно будет найти точную позицию, поэтому мы не можем использовать индекс - person Nitin Rathod; 19.08.2016
comment
эй, это может сработать, спасибо за код..... я бы наверняка использовал эту логику в своем коде...... - person Nitin Rathod; 20.08.2016
comment
Если бы это касалось вашего вопроса, возможно, вы могли бы подумать о том, чтобы «принять» этот ответ? - person stope19; 22.08.2016

Не совсем идеально, но как насчет 2N1X2N1X2N, это дает вам 2 числа, за которыми следует 1 любой символ, за которым следуют 2 числа и т. д.

person jbmonco    schedule 18.08.2016

Это может помочь:

 BIG.STRING  ="HELLO TILDE ~ CARD 12:34:56 IS IN THIS STRING"
 TEMP.STRING = BIG.STRING

 CONVERT "~:/-" TO "*~~~" IN TEMP.STRING           

 IF TEMP.STRING MATCHES '0X2N"~"2N"~"2N0X'  THEN

    FIRST.TILDE.POSN = INDEX(TEMP.STRING,"~",1)
    CARD.STRING      = BIG.STRING[FIRST.TILDE.POSN-2,8]
    PRINT CARD.STRING
 END
person Keith    schedule 30.09.2016