2016-08-18 3 views
0

Je dois identifier les motifs suivants dans une chaîne. - "2N ':' 2N ':' 2N" - "2N '-' 2N '-' 2N" - "2N '/' 2N '/' 2N" - "2N '/' 2N'- ' 2N » ETC. .....Motif Correspondance Langage de programmation BASIC et base de données d'univers

fondamentalement, je veux ce modèle si elle était écrite dans un langage simple 2 CHIFFRES [:/-] 2 CHIFFRES [:/-] 2 CHIFFRES

Ainsi est-il de toute façon par lequel je pourrais écrire un modèle qui couvrira tous les scénarios possibles? ou bien je dois écrire au total 9 patterns et je dois faire correspondre tous les 9 patterns à string ... et ce n'est pas le scénario dans mon code, je dois faire correspondre 4, 2 chiffres séparés par [:/-] à string pour lequel j'ai towrite total 27 modèles. Donc, pour comprendre le but, j'ai pris 3, 2 chiffres scénario ... S'il vous plaît aidez-moi ... Merci

Répondre

1

peut-être que vous pouvez essayer quelque chose comme (choisir le style R83)

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

où la variable X est une chaîne de caractères d'entrée comme: 12-34-56

Doit définir la variable OK sur 1 si la validation réussit, sinon 0 pour tout format non valide.

Cela semble obtenir toute votre validation requise en une seule instruction. J'ai supposé que les caractères non numériques doivent être identiques. Si ce n'est pas le cas, la vérification peut être changée comme suit:

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

Ok, je suppose que l'exigence de caractères environnants n'était pas évident pour moi. Pourtant, cela ne le rend pas beaucoup plus difficile. Vous avez juste besoin d '«analyser» la chaîne recherchant le premier (je suppose) tel modèle (le cas échéant) dans la chaîne d'entrée. Cela peut être fait dans quelques lignes de code. Voici un (plutôt non testé) programme de test de style 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 

Il n'y a que 7 ou 8 lignes ici qui semblent en fait pour le motif de numéro de carte dans la chaîne de source/test.

+0

hey Merci d'avoir répondu que cela pourrait fonctionner ...... mais voici la chaîne à laquelle je compare est cible pas chaîne, chaîne est comme ceci "commentaires commentaires sdgsghsdgsjk 'numéro de carte de crédit' eghsgkjnhgks". chaîne est comme commentaires et entre ces commentaires je dois trouver le numéro de carte de crédit de sorte qu'il ne sera pas possible de trouver la position exacte de sorte que nous ne pouvons pas utiliser l'index –

+0

heyy qui pourrait travailler pour le code ..... j'utiliserais sûrement que logique dans mon code ...... –

+0

Si cela répond à votre question, peut-être pourriez-vous envisager d '«accepter» cette réponse? – stope19

0

Pas tout à fait parfait, mais qu'en est-il 2N1X2N1X2N cela vous obtient 2 nombre suivi de 1 de n'importe quel caractère suivi de 2 chiffres etc.

+0

Merci d'avoir répondu ... ya cela pourrait fonctionner –

0

Cela pourrait aider:

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