2016-11-14 1 views
-1

Comment obtenir des mots communs à partir de deux phrases différentes en utilisant la fonction ENTRY dans progress4gl?Comment obtenir des mots communs à partir de deux phrases différentes en utilisant la fonction ENTRY dans progress4gl?

define variable a1 as character no-undo initial "hi dude do". 
define variable a2 as character no-undo initial "hi man it". 

define variable cnta as character. 
define variable cntb as character. 
define variable cntc as character. 

define variable i as integer. 
define variable j as integer. 

do i = 1 to 3: 

entry (i,a1,""). 

    do j = 1 to 3: 

    entry (j,a2,""). 

    end. 

end. 

/* assign cntc = cnta matches cntb . */ 
+0

1. Vous fournissez des données d'entrée, mais pas de données de sortie attendues. Est-ce que la sortie attendue est "salut"? 2. Pourquoi la question tente-t-elle de restreindre la fonction (ENTRÉE) à utiliser pour résoudre le problème? Cela ressemble presque à une question d'entrevue d'emploi. 3. Que veulent faire cnta, cntb et cntc? –

+0

Si nous voulons répondre à des questions d'entrevue, obtenons-nous une prime à la signature? –

Répondre

1
define variable a1 as character no-undo initial "hi dude do". 
define variable a2 as character no-undo initial "hi man it". 

define variable common as character no-undo. 

define variable cc as integer no-undo. 
define variable ii as integer no-undo. 
define variable jj as integer no-undo. 

define variable n1 as integer no-undo. 
define variable n2 as integer no-undo. 

n1 = num-entries(a1). 
n2 = num-entries(a2). 

do ii = 1 to n1: 

    do jj = 1 to n2: 

     if entry (ii, a1, " ") = entry(jj, a2, " ") then 
     do: 
      cc = cc + 1. 
      common = common + " " + entry(ii, a1, " "). 
     end. 

    end. 

end. 

display trim(cc) common. 

Notes:

La fonction TRIM() est juste pour nettoyer la chaîne "commune" de sorte qu'il ne dispose pas d'un espace supplémentaire. Pour des raisons de performances, il est recommandé d'obtenir NUM-ENTRIES() en dehors de la boucle plutôt qu'à chaque itération de la boucle. Cela ne fait pas beaucoup de différence pour les petites cordes, mais pour les grandes cordes, cela peut avoir un impact important.

+1

Le délimiteur par défaut pour entry et num-entries n'est pas un espace mais une virgule. Je voudrais également mettre la garniture en dehors de la boucle. –

+1

Arg! Tu as raison. Je pensais IMPORT & EXPORT –

+0

En regardant les deux messages de sri je pourrais également noter que "" <> "". Si l'intention est qu'un caractère d'espace doit être pris comme délimiteur entre les mots, alors quote-space-quote est ce qui doit être spécifié pour l'argument delimiter. Pas de devis-devis. –

-2

1./si je dois obtenir le n nombre de mots dans deux phrases de l'utilisateur au moment de l'exécution, comment comparer et obtenir les mots communs. Le code suivant compare et n'affiche que la première lettre de la phrase suivante:

*/

define variable a1 as character no-undo. 
define variable a2 as character no-undo. 

define variable common as character no-undo. 

define variable a1 as character FORMAT "x(64)" no-undo /* initial "hi d do" */. 
define variable a2 as character FORMAT "x(64)" no-undo /* initial "hi d it" */. 

define variable common as character FORMAT "x(64)" no-undo. 
define variable c1 as character FORMAT "x(64)" no-undo. 

define variable x as character FORMAT "x(64)" no-undo. 
define variable y as character FORMAT "x(64)" no-undo. 

define variable cc as integer no-undo initial 0. 
define variable ii as integer no-undo. 
define variable jj as integer no-undo. 

define variable n1 as integer no-undo. 
define variable n2 as integer no-undo. 


set a1. 
n1 = num-entries(a1,""). 


set a2. 
n2 = num-entries(a2,""). 

do ii = 1 to n1: 


    do jj = 1 to n2: 

    if entry (ii,a1, " ") matches entry(jj,a2, " ") then 
    do: 

    common = entry(ii, a1, " "). 
    display common .  

    end. 

    end. 

end. 
+0

Posez-vous une nouvelle question? –

+0

C'est une mauvaise idée d'utiliser MATCHES pour tester l'égalité simple. Si vous créez une habitude comme celle-ci et que vous l'utilisez ensuite dans une clause WHERE, vous éviterez le bracketing d'index et provoquerez de nombreuses analyses de tables. –