Fusion de la configuration JSL à l'aide de "Rejoindre"<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />J'ai découvert que je pouvais mieux fusionner deux ensembles de données en utilisant la commande "Rejoindre" les tables de données, ce qui élimine au mieux les entrées en double possibles qui peuvent exister - la colonne 1 contient un numéro unique pour chaque entrée.J'ai un script qui ouvre plusieurs tables de données et manipule les données, mais j'ai du mal à appeler chaque table de données séparément afin que le script "join" fonctionne correctement :
Si je fais cela manuellement, le code est le suivant :
Tableau de données ( "Sans titre 322" ) << Rejoindre ( Tableau de données ( "Sans titre 318" ) ) ,
Fusionner les colonnes du même nom ,
En faisant correspondre les colonnes ( : REPLICATE_ID = : REPLICATE_ID ) ,
Supprimer les multiples ( 1 , 1 ) ,
Nom( "Inclure les non-correspondances" )( 1 , 1 ) ,
Conserver l'ordre de la table principale ( 1 ) ,
Tableau de sortie ( "Fusionné" )
Mon problème survient lorsque j'essaie de coder ce formulaire dans plusieurs tables.Les tables sans titre (sans titre 322, sans titre 318, etc. - il peut y en avoir plus selon le nombre de fichiers que j'ouvre) sont désignées dans mon code comme. Donc je veux en quelque sorte prendre mon maximumet rejoignez tous les autres w.
J'ai configuré quelque chose comme suit :
Pour (f = Tableau de données, f >= 1, f--,
Essayez(v = w << Join( With(Tableau de données (f)),
*et le reste suit les propriétés de la table de jointure répertoriées ci-dessus*
Cependant mon code ne fonctionne pas.Quelqu'un a une idée de comment je peux faire ça ?
Re : Fusionner la configuration JSL à l'aide de "Rejoindre"Je m'excuse, je suppose que je ne suis pas clair :
Je comprends que je dois garder ouvertes les tables qui ont été ajoutées à la liste. Si je commente Close All (Data Tables, nosave) dans mon code, j'obtiens
ce qui suit dans mon journal (j'ai une référence à une table originale qui ne devrait pas être dans la liste openDT, et qui est transférée dans les OT.Je suis sûr que j'ai juste besoin d'un fxn proche pour cette table et je pourrais le comprendre.J'ai spécifié précédemment que la fusion fonctionnait, mais pas comment je souhaitais qu'elle fonctionne.

Mais dans mon code où j'ai //invisible (pour le w = z << Split...), Je souhaite décommenter l'invisible, mais comme l'invisible fxn ne reconnaît que la dernière table de la boucle et que toutes les autres sont supprimées, j'ai besoin d'un moyen de les référencer et de les conserver dans une liste afin de pouvoir y faire référence dans leur ensemble. (Fermer tout est également commenté) Comment puis-je faire cela?

L'invisibilité est le problème, car à moins que je trouve un moyen de référencer chaque table invisible, je ne peux pas fusionner plusieurs tables. Il semble que je devrai déplacer le code Join dans la boucle, mais je ne sais pas comment l'incorporer s'il ne parcourt qu'une table à la fois et que je dois en référencer au moins deux.
Re : Fusionner la configuration JSL à l'aide de "Rejoindre"L'invisibilité n'est pas le problème ici. Les tables invisibles peuvent être référencées et jointes à d'autres tables invisibles ou visibles. Les tables fermées et invisibles ne sont pas la même chose. Les tables fermées sont totalement inutiles, elles disparaissent et sont oubliées. Dans le script que vous avez placé Ferme tout ( Tableaux de données , nosave ) ; avant la partie du code de fusion. Cela devrait entraîner l'oubli de toutes les tables et l'échec de la fusion. Attendez d'avoir terminé avant de fermer les tables, invisibles ou non.
Ou utilisez mon approche ci-dessus, c'est-à-dire ouvrez une table une à la fois, effectuez les modifications et le fractionnement que vous souhaitez, puis fusionnez-les avec le MT actuel avant de fermer et de passer au fichier suivant.
Re : Fusionner la configuration JSL à l'aide de "Rejoindre"Hmmm, je ne peux pas fusionner les fichiers txt d'origine - je fusionne les fichiers invisibles intermédiaires créés à partir du fractionnement/formatage des fichiers txt d'origine.Comme ces fichiers sont invisibles et intermédiaires, il n'y a pas de répertoire racine où ils sont enregistrés (c'est pourquoi j'utilise la fonction invisible - cela permet d'économiser de l'espace et du temps). Je comprends ce que vous dites, même si mes tables sont dans la liste, elles sont fermées donc il n'y a aucun moyen de les référencer mais "les ouvrir" ne s'applique pas car ce sont des fichiers intermédiaires/invisibles créés à partir du fichier txt qui sont aucun répertoire n'est enregistré.
Voici le détail de ce que je fais :
1. J'ouvre le code des fichiers txt est similaire à celui que vous avez (aura le nom Data Table ("Result1"))
2. Je reformate ces fichiers txt (ils ne sont pas au format colonne, j'ai donc du code dans lequel je "divise", formate, etc., dans une table de données plus lisible dans JMP. - J'appellerai ces tables INTERMÉDIAIRES (Auront le nom Data Table("Untitled1"))
3. ces fichiers intermédiaires sont invisibles (il y en a tout simplement trop pour les rendre visibles) - Je ne les sauvegarde pas car je ne veux pas d'un répertoire de fichiers intermédiaires enregistrés que je dois supprimer plus tard.
4. Mon problème est que j'essaie de fusionner les tables intermédiaires
Je vois qu'il serait plus facile de simplement joindre les fichiers originaux, mais ils ne sont pas disponibles dans un format permettant de le faire, d'où mon énigme.
Ainsi, le code que j'ai (et référencé précédemment) fonctionne si mes tables intermédiaires ne sont pas invisibles ET je ne ferme pas les tables intermédiaires auxquelles je fais référence pour les rejoindre (ne fonctionne pas exactement comme je le souhaite aussi, mais néanmoins cela fonctionne) - mais ensuite j'ai TOUTES les tables ouvertes - celles fusionnées et non fusionnées
Donc les vraies questions que je me pose sont :
a) J'ai des tables intermédiaires - essentiellement, je veux qu'elles soient invisibles, mais afin de les référencer dans les listes MT/OT, je dois les rendre visibles pour que cela fonctionne - essentiellement, je veux qu'elles soient invisibles.Donc ma vraie question est : Comment puis-je référencer des tables intermédiaires invisibles dans une boucle pour reconnaître chaque table à utiliser pour un calcul ultérieur (pour utiliser les tables de jointure fxn, il semble que je dois l'avoir en dehors de la boucle For afin de pouvoir joindre deux instances de l'intermédiaire les tables)?
J'ai joint le script.peut-être que cela expliquera ce que j'essaie de faire.
Re : Fusionner la configuration JSL à l'aide de "Rejoindre"On dirait que toutes les tables sont fermées avant Join(). La liste OTs n'est qu'une liste de références datatables. Ce ne sont pas des "objets scriptables" si les tables correspondantes ont disparu.
Essayez quelque chose comme ceci :
mon chemin = "/Utilisateurs/.../Fichiers/" ; //chemin d'accès au répertoire des fichiers.txt
flist = Fichiers dans le répertoire ( mon chemin ) ; // Liste de tous les fichiers
n = N articles ( flist ) ;
// Supprime les fichiers non texte de flist
Pour ( je = n , je > 0 , je --,
Si ( Contient ( flist [ je ] , ".SMS" ) == 0 ,
Retirer ( flist , je ) ;
n --;
)
) ;
// Fonction pour ouvrir les fichiers texte (modifier la colonne et importer les paramètres si nécessaire)
fichier ouvert = Fonction ( { X } ,
Ouvrir (
mon chemin || flist [ X ] ,
Importer les configurations (
Fin de ligne ( CRLF , CR , LF ) ,
Fin du champ ( Languette ) ,
Citations de bande ( 1 ) ,
Utiliser l'apostrophe comme guillemet ( 0 ) ,
Numériser le fichier entier ( 1 ) ,
Étiquettes ( 1 ) ,
Début des noms de colonnes ( 1 ) ,
Les données démarrent ( 2 ) ,
Lignes à lire ( Tous ) ,
Règle de l'année ( "10-90" )
)
)
) ;
// Ouvrir le premier fichier
MT = fichier ouvert ( 1 ) ;
//Joindre tous les fichiers dans flist
Pour ( je = 2 , je <= n , je ++,
ST = fichier ouvert ( je ) ;
FT = MT ;
MT = FT << Rejoindre (
Avec ( ST ) ,
Mise à jour ,
Par colonnes correspondantes ( : Colonne_1 = : Colonne_1 ) ,
Supprimer les multiples ( 1 , 0 ) ,
Nom ( "Inclure les non-correspondances" )( 1 , 1 ) ,
Conserver l'ordre de la table principale ( 1 ) ,
Tableau de sortie ( "Fusionné" )
) ;
// Nettoyer
Fermer ( ST , pas de sauvegarde ) ;
Fermer ( FT , pas de sauvegarde ) ;
) ;
Re : Fusionner la configuration JSL à l'aide de "Rejoindre"D'accord, j'ai essayé quelque chose de similaire en envoyant mes tables ouvertes à une liste :
Avant ce code, j'ai du code dans lequel les fichiers *txt sont ouverts (je pourrais avoir jusqu'à 30+ fichiers) et convertis en une table de données JMP (donc une sortie jusqu'à 30+ tables).J'essaie ensuite de fusionner toutes ces tables dans une table cependant, certains fichiers peuvent contenir des informations en double qui doivent être supprimées. J'ai découvert que je pouvais le faire en utilisant la propriété Join table.Donc selon le code ci-dessous.J'obtiens avec succès 1 table = MT, et les autres sont dans une liste = OTs.Je souhaite rejoindre chaque OT de la liste et le joindre à MT pour obtenir :
MT+OT(1) = MergedTable, puis MergedTable+OT(2) = MergedTable2, puis MergedTable2+OT(3) = MergedTable3, etc. jusqu'à ce que j'obtienne une table principale contenant toutes les données (et les autres sont fermées)
openDT = Liste();
Pour (f = 1, f <= N Table(), f++,
Insérer dans (ouvrir DT, table de données (f)););
Afficher (openDT);
MT = DataTable(1);
Fermer (Tableau de données (1), nosave);
OTs = Liste();
Pour(g = 1, g<= N éléments(openDT) -1, g++,
Insérer dans (OTs, DataTable(g));
Fermer tout (DataTables, nosave) ;
Afficher (OT) ;
Afficher (MT);
Pour( h = 1, h <= N éléments (OT), h++,
MT << Rejoindre(Avec(ST),
Mise à jour,
Par colonnes correspondantes (:Column_1 = :Column_1),
Supprimer les multiples (1,0),
Nom("Inclure les non-correspondances")(1, 1),
Conserver l'ordre de la table principale(1),
Table de sortie("Fusionné")););
Continuer());
Lorsque j'exécute le script, tout fonctionne correctement jusqu'à la commande Join où j'obtiens l'erreur suivante
"Send attend un objet scriptable{169} lors de l'accès ou de l'évaluation de 'Envoyer'",
Pour( h = 1 , h <= N articles ( OT ) , h ++,
MT << /*###*/ Rejoindre (
Avec(ST),
Mise à jour ,
En faisant correspondre les colonnes ( : Colonne_1 = : Colonne_1 ) ,
Supprimer les multiples ( 1 , 0 ) ,
Nom( "Inclure les non-correspondances" )( 1 , 1 ) ,
Conserver l'ordre de la table principale ( 1 ) ,
Tableau de sortie ( "Fusionné" )) /*###*/ ;
Continuer();
Aide? Je me cogne la tête contre le mur en essayant de comprendre pourquoi ça ne marche pas
Re : Fusionner la configuration JSL à l'aide de "Rejoindre"Cela pourrait vous aider à démarrer à titre d'exemple. Ce n'est pas parfait car après exécution la dernière des tables ouvertes est également fermée...
Close All(data tables);
New Table("a") << Add Rows(3);
:Column 1 << Set Values([1, 2, 3, 4, 5, 6]);
New Column("Label", Character) << Set Each Value("a");
New Table("b") << Add Rows(3);
:Column 1 << Set Values([1, 2, 3, 7, 8, 9]);
New Column("Label", Character) << Set Each Value("b");
New Table("c") << Add Rows(3);
:Column 1 << Set Values([1, 2, 3, 10, 11, 12]);
New Column("Label", Character) << Set Each Value("c");
New Table("d") << Add Rows(3);
:Column 1 << Set Values([1, 2, 3, 13, 14, 15]);
New Column("Label", Character) << Set Each Value("d");
t_count = N Table();
dt_old = Data Table(t_count);
Show(dt_old << get name());
dt_new = Data Table(1);
For(i = 2, i <= t_count, i++,
dt_old = dt_new;
dt_new = dt_old << Join(
With(Data Table(i)),
Merge Same Name Columns,
By Matching Columns(:Column 1 = :Column 1),
Drop multiples(1, 1),
Name("Include non-matches")(1, 1)
);
Close(dt_old);
);