2016-08-18 7 views
0

Мне нужно определить следующие шаблоны в строке. - "2N ':' 2N ':' 2N" - "2N '-' 2N '-' 2N" - "2N '/' 2N '/' 2N" - "2N '/' 2N'- ' 2но» И ТАК ДАЛЕЕ .....Образец соответствия BASIC-программирования База данных языка и вселенной

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

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

ответ

1

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

OK = X MATCH "2N1X2N1X2N" И Х [3,1] = X [6,1] И INDEX (":/-" , X [3,1], 1)> 0

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

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

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

OK = X MATCH "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 строк здесь, что на самом деле искать шаблон номера карты в источнике/тестовой строки.

+0

эй спасибо за ответ на это может работать ...... но вот строка, в которой я сравниваю не предназначаться строка, строка как это "комментарии комментарии sdgsghsdgsjk" Номер кредитной карты "eghsgkjnhgks". строка похожа на комментарии, и между этими комментариями я должен найти номер кредитной карты, поэтому не удастся найти точную позицию, поэтому мы не можем использовать индекс –

+0

heyy, который мог бы работать над кодом для кода ..... я бы наверняка использовал это логика в моем коде ... –

+0

Если бы это касалось вашего вопроса, возможно, вы могли бы подумать о «принятии» этого ответа? – stope19

0

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

+0

Спасибо за ответ ... я это может работать –

0

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

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 

 Смежные вопросы

  • Нет связанных вопросов^_^