J'essaie de parcourir une série de tableaux pour mettre à jour mon tableau principal avec des informations, mais pour une raison inconnue, cela ne fonctionnera pas. Voir l'attachement de code ci-dessous:
Exemple de ma liste qui stocke mes tables:
DTs = {Table de données ("Sheet1"), Table de données ("Sheet2") ……}
// ouvrez excelfiles dans un chemin spécifié, fonctionne bien
path = "$ DOCUMENTS \ 580501 \";
ftype = ".xlsx";
// Faire une liste de fichiers, supprimer tous les fichiers ne correspondant pas, fonctionne bien
flist = Fichiers dans le répertoire ( chemin ) ;
Pour ( i = N éléments ( flist ) , je> 0 , je--,
Si ( !Se termine par ( flist [ je ] , ftype ) ,
Retirer ( flist, je )
)
) ;
d = N éléments ( flist ) ;
// importer tous les excelfiles du répertoire 580501 et les stocker dans une liste, fonctionne bien
Tandis que ( d> 0 ,
i = 1 ;
dtt = Open (….)
// cette partie de mon code fonctionne bien
DTs = Liste () ;
s = 1 ;
Pour ( i = 1 , i <= N Table () , i ++,
Si ( Tableau de données ( je ) ! = "ISAC_STAT",
Insérer dans ( DT, tableau de données ( s ) ) ;
s = s + 1 ;
)
) ;
// Analyse de toutes les tables ouvertes dans les DT
Pour ( i = 1 , i <= N Table () , i ++,
dtt = table de données ( DTs ( je ) ) ;
// J'ai besoin de trouver un tableau spécifique "sheet1" et de le mettre à jour avant de pouvoir le mettre à jour par rapport à d'autres tableaux.
// sheet1 contient les informations nécessaires pour apparier d'autres tables, il doit donc mettre à jour mon répertoire principal.
// table en premier
Pour ( k = i, k <= N Table () , k ++,
//JE Vous pensez que cette déclaration If est la source de mon problème mais je ne sais pas pourquoi?
// J'ai essayé plusieurs versions de cette instruction If:
// Contient (Char (DTs [k]), Char ("” Tableau de données (“sheet1”) “) == 1
// contient (DTs [k], "sheet1") == 1
// contient (DTs [k], "Table de données (" Sheet1 ")" == 1
// mais rien ne fonctionne.
Si ( Contient ( Carboniser ( DTs [ k ] ) , "feuille1" ) == 1 ,
Tableau de données ( "Ma table" ) << Mettre à jour (
Avec ( Tableau de données ( "feuille1" ) ) ,
Match Columns ( : Lot =: Lot ) ,
Ajouter des colonnes à partir de la table de mise à jour ( Aucun )
) ;
) ;
) ;
// Je pense que cette déclaration est la source de mon problème mais je ne sais pas pourquoi?
Si (
DTs [ je ] ! = "sheet1" & DTs [ je ] ! = "sheet2" & DTs [ je ] ! = "sheet3" & DTs [ je ] ! = "sheet4",
Essayer (
Tableau de données ( " Ma table " ) << Mettre à jour (
Avec ( DTs [ je ] ) ,
Match Columns ( : Lot =: Lot | : Lot =: Lot de test ) ,
Ajouter des colonnes à partir de la table de mise à jour ( Aucun )
)
)
// J'utilise la même commande de mise à jour que ci-dessus mais en faisant correspondre différentes colonnes
…
)
Voici un extrait de code simple qui fonctionne:
dt = Open("$SAMPLE_DATA/Big Class.jmp");
// dt = DataTable("Big Class");
If (Contains(Char(dt),"Big Class"),
show("found")
,
show("not found")
)
Comme Wendy le fait remarquer, la fonction Contains est sensible à la casse, donc je forcerais généralement le cas, par exemple
If (Contains(LowerCase(Char(dt)),"big class"),
Bonjour à tous et merci pour vos réponses rapides,
Comme vous l'avez dit, la liste DTs stocke des chaînes avec des valeurs telles que Tableau de données ( "Sheet1" ) donc j’ai réussi à implémenter la boucle for imbriquée dans laquelle je cherche deux tables spécifiques.
Cependant, dans le dernier cas, lorsque je ne souhaite pas utiliser certains types de tables, et c'est peut-être l'erreur, j'utilise les fonctions includes pour faire correspondre toute valeur de chaîne dans les DT à un certain mot clé.
par exemple:
si contient (DT [i], "soda") ou contient (DTs [i], "eau") ou contient (DTs [i], "aliment_1"),
ne fais rien
,
sinon mettre à jour la table principale.
Notez qu'il existe des cas où nous avons à la fois food_1 et food_2 dans le tableau. Ici, nous devrions ignorer food_1 mais utiliser food_2.
Est-ce que j'utilise la fonction contient incorrecte?
Bonjour,
En plus de l'argument de Craige, il existe un problème avec la chaîne que vous recherchez. Lorsque vous insérez des valeurs dans la liste des DT, vous insérez une table de données ("nomTable"). Donc, votre liste de DT représente quelque chose comme ceci:
{Data Table( "Sheet1" ), Data Table( "Sheet2" )} ;
Pourtant, dans la plupart de vos fonctions Contains (), vous recherchez des valeurs de chaîne qui ne partagent pas la même casse ou le même motif des éléments de la liste des DT, telles que "feuille1" . C'est la raison pour laquelle ces fonctions Contains () retournent 0. En d'autres termes,
"Sheet1" != "sheet1"
Le point ici est que les chaînes de recherche doivent être identiques aux valeurs que vous voulez que Contains () trouve.