code>): li>
xxx pré>
- Je dois rechercher des valeurs à plusieurs reprises comme ceci (
v1 code>): li>
ol> xxx pré>
- Je pense que les valeurs suivantes sont identifiées, qui correspondent à une ligne dans la table interne (
itab_v1_result code>): li>
ol> xxx pré> mais comme vous pouvez le constater dans code> il y a le même code 005056b467ae1ed9b1962f12360477e9 code>, après offre / code> jusqu'à - code> symbole. p> MAINTENANT, je veux affecter les lignes de code> au symbole de champ code> en comparant la valeur v1 code> avec chaque ligne dans code>, mais le problème est que V1 code> n'est pas complètement identique à celui code> lignes. P> J'ai essayé de faire quelque chose comme ça, mais ça ne fonctionne pas, code> est toujours vide: p > xxx pré> Comment puis-je obtenir itab_v1_result code> pour contenir ce que j'attends? p> mon exemple de reproductible minimal: P>
TYPES:
BEGIN OF ty_content,
attr_name TYPE string,
END OF ty_content.
FIELD-SYMBOLS:
<fs_my_content> TYPE any,
<fs_content> TYPE ANY TABLE.
DATA:
itab_content TYPE STANDARD TABLE OF ty_content,
itab_v1 TYPE STANDARD TABLE OF string,
itab_v1_result TYPE STANDARD TABLE OF string,
v1 TYPE string.
itab_content = VALUE #(
( attr_name = 'OFFER/005056B467AE1ED9B1962F12360477E9-A' )
( attr_name = 'OFFER/005056B467AE1ED9B1962F12360477E9-B' )
( attr_name = 'OFFER/005056B467AE1ED9B1962F123604D7E9-C' )
( attr_name = 'OFFER/005056B467AE1ED9B1962F12360477E9-D' )
( attr_name = 'OFFER/005056B467AE1ED9B1962F12360477E9-E' ) ).
itab_v1 = VALUE #(
( `OFFER-A` )
( `OFFER-B` )
( `OFFER-C` )
( `OFFER-M` )
( `OFFER-L` ) ).
ASSIGN itab_content TO <fs_content>.
LOOP AT itab_v1 INTO v1.
READ TABLE <fs_content> ASSIGNING <fs_my_content> WITH KEY ('ATTR_NAME') = v1.
IF sy-subrc = 0.
APPEND v1 TO itab_v1_result.
ENDIF.
ENDLOOP.
" Here, itab_v1_result is empty unfortunately!?
3 Réponses :
Vous ne pouvez utiliser aucun opérateur autre que Tout d'abord, vous devez organiser votre V1 de manière à ce que = code> dans
Tableau de lecture code>. Mais vous pouvez les utiliser dans une boucle code> code>.
CS code> puisse identifier, il suffit d'utiliser "-x", ce qui semble être unique. Ensuite, vous pouvez utiliser votre état dans la clause code> code>. P>
Bien que je suppose que la principale question concerne comment "rechercher une sous-chaîne dans une table interne", il existe également une petite complexité ajoutée à la question à cause de la table interne dynamique. J'ai ajouté un exemple de reproductible minimal pour soutenir la question de sorte qu'il est plus facile d'utiliser le code réel.
Merci beaucoup à vous tous pour vos variantes de solution. C'était très utile pour moi.
Voici la solution de mon problème. P>
code> et l'attribuer au nouveau symbole de champ code>. Li>.
- Ensuite, nous devrions obtenir
attr_name code> du champ code> à partir de code> et attribuez-le à un autre symbole de champ Li >
- Nous allons utiliser une fonction pour travailler avec la valeur de type code> de type code>, car nous affecterons
code> à lv_attr_name code>. li>
- Comme nous le savons (de la description de la tâche) dans
lv_attr_name code> serait les valeurs telles que: Offre / 005056B467AE1ED9B1962F12360477E9-A code> et ainsi de suite.
Pour cette raison, nous trouverons la position du premier / code> par Rechercher () code> méthode à partir du début de lv_attr_name code> et mettez la valeur dans LV_SLASH_POSITION CODE>. LI>
ol> Nous répétons cette opération pour rechercher la position du premier - code> après lv_slash_position Mettez la valeur dans lv_dash_position code>. p> Après cette opération, nous utiliserons la méthode remplacer () code> et remplacer lv_dash_position - lv_slash_position code> à vide code> vide. En fin de compte, nous obtiendrons l'offre / -a code> et le mettre dans lv_attr_val_string code>. P> à la fin, nous comparerons lv_attr_val_string < / code> et v1 code>, si lv_attr_val_string <> v1 code> Nous ne le mettrions pas à la finale itab itab_v1_result code>, sinon nous le ferons. p> xxx pré> p>
Vous compliquez la solution. Pourquoi pas simplement utiliser Accès sous-chaîne ?
LOOP AT itab_v1 INTO v1. LOOP AT itab_content ASSIGNING FIELD-SYMBOL(<content>). CHECK v1(5) = <content>-attr_name(5) AND substring( val = v1 off = strlen( v1 ) - 1 len = 1 ) = substring( val = <content>-attr_name off = strlen( <content>-attr_name ) - 1 len = 1 ). APPEND v1 TO itab_v1_result. ENDLOOP. ENDLOOP.
Pouvez-vous donner un exemple de ce que vous attendez d'où dirigez-vous le symbole de champ si v1 = 'offre-c', est-ce la ligne entière, la valeur au milieu ou quoi? Pourriez-vous également fournir un exemple de reproductible minimal s'il vous plaît? Merci (note que demander un "lien utile" est off-Topic pour débordement de pile, simplement parce que les réponses doivent être Terminer - Certains liens ne peuvent être donnés que pour soutenir la réponse).
Sandra, merci beaucoup pour votre réponse. Je vais essayer de donner un exemple et de modifier la question, peut-être qu'il serait plus compréhensible.
J'ai ajouté l'exemple reproductible minimal, afin que les gens puissent rapidement essayer de vous répondre.
Merci beaucoup, Sandra. Votre exemple est plus clair que le mien.
Notez que votre question semble être: "Comment rechercher une sous-chaîne dans une table interne". Mais votre exemple utilise une table interne dynamique, alors je sens que la question n'est pas "minimale": l'utilisation d'une table interne définie statique rendrait la question plus claire.