Fusion de la configuration JSL à l'aide de "Join"<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />J'ai trouvé que je pouvais mieux fusionner deux ensembles de données en utilisant la commande "Joindre" les tables de données, cela élimine au mieux les entrées en double 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 le fais 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 ,
Par colonnes correspondantes( : REPLICATE_ID = : REPLICATE_ID ) ,
Laisser tomber les multiples( 1 , 1 ) ,
Nom( "Inclure les non-correspondances" )( 1 , 1 ) ,
Préserver l'ordre de la table principale( 1 ) ,
Tableau de sortie( "Fusionné" )
Mon problème survient lorsque j'essaie de coder ce formulaire sur 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 maxet se joindre à tous les autres w.
J'ai mis en place quelque chose comme suit:
Pour (f = tableau de données, f >= 1, f--,
Try(v = w << Join( With(Data Table (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 : Fusion de la configuration JSL à l'aide de "Join"Je m'excuse, je pense que je n'ai pas été clair :
Je comprends que je dois garder les tables qui ont été ajoutées à la liste ouvertes - si je commente le Close All(Data Tables, nosave) dans mon code, je reçois
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 fonctionne, mais pas comment je veux qu'elle fonctionne.

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

L'invisibilité est le problème, b/c à moins que je ne trouve un moyen de référencer chaque table invisible, il n'y a aucun moyen de 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 fait que parcourir une table à la fois et que j'ai besoin d'en référencer au moins deux.
Re : Fusion de la configuration JSL à l'aide de "Join"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 complètement inutiles, elles sont parties et oubliées. Dans le script que vous avez placé Ferme tout ( Tableaux de données , nosave ) ; avant la partie code de fusion. Cela devrait entraîner l'oubli de toutes les tables et l'échec de la fusion. Attendez d'avoir fini 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 les fractionnements que vous souhaitez, puis fusionnez-les avec le MT actuel avant de fermer et de passer au fichier suivant.
Re : Fusion de la configuration JSL à l'aide de "Join"Hmmm, je ne peux pas fusionner les fichiers txt originaux - je fusionne les fichiers invisibles intermédiaires créés à partir de la division/formatage des fichiers txt originaux.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 économise de l'espace et du temps). Je comprends ce que vous dites cependant, 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 n'est pas enregistré n'importe quel répertoire.
Voici la répartition de ce que je fais :
1. J'ouvre le code des fichiers txt est similaire à ce 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 où je "divise", formate, etc., dans un tableau de données plus lisible dans JMP. - J'appellerai ces tables INTERMÉDIAIRES (aura le nom Data Table("Untitled1"))
3. ces fichiers intermédiaires sont invisibles (il y en a juste trop pour les rendre visibles) - Je ne les enregistre pas car je ne veux pas d'un répertoire de fichiers intermédiaires enregistrés que je devrai 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 viennent pas dans un format où je suis capable de le faire, d'où mon énigme.
Donc, 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 que je référence pour rejoindre (ne fonctionne pas exactement comme je le veux aussi, mais néanmoins cela fonctionne) - mais alors j'ai TOUTES les tables ouvertes - les fusionnées et non fusionnées
Donc les vraies questions que je me pose sont :
a) J'ai des tables intermédiaires - je veux essentiellement qu'elles soient invisibles mais pour les référencer dans les listes MT/OT, je dois les rendre visibles pour que cela fonctionne - je veux essentiellement qu'elles soient invisibles.Donc ma vraie question est : Comment référencer des tables intermédiaires invisibles avec une boucle pour reconnaître chaque table à utiliser pour un calcul ultérieur (afin d'utiliser les tables de jointure fxn, il semble que je doive l'avoir en dehors de la boucle For pour 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 : Fusion de la configuration JSL à l'aide de "Join"On dirait que toutes les tables sont fermées avant le Join(). La liste des OT n'est qu'une liste de références de tables de données. Ce ne sont pas des "objets scriptables" si les tables correspondantes ont disparu.
Essayez quelque chose comme ceci :
mon chemin = "/Utilisateurs/.../Fichiers/" ; //chemin vers le répertoire des fichiers.txt
fliste = Fichiers dans le répertoire ( mon chemin ) ; //Liste de tous les fichiers
n = N articles ( fliste ) ;
// Supprime les fichiers non textuels de flist
Pour ( je = n , je > 0 , je --,
Si ( Contient ( fliste [ je ] , ".SMS" ) == 0 ,
Retirer ( fliste , je ) ;
n -- ;
)
) ;
// Fonction pour les fichiers texte ouverts (modifier la colonne et importer les paramètres si nécessaire)
fichier ouvert = Fonction ( { X } ,
Ouvert (
mon chemin || fliste [ X ] ,
Importer les configurations (
Fin de ligne ( CRLF , RS , LF ) ,
Fin de champ ( Languette ) ,
Citations de bande ( 1 ) ,
Utiliser l'apostrophe comme guillemet ( 0 ) ,
Analyser tout le fichier ( 1 ) ,
Étiquettes ( 1 ) ,
Début des noms de colonnes ( 1 ) ,
Les données commencent ( 2 ) ,
Lignes à lire ( Tout ) ,
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 ) ,
Déposez des multiples ( 1 , 0 ) ,
Nom ( "Inclure les non-correspondances" )( 1 , 1 ) ,
Conserver l'ordre de la table principale ( 1 ) ,
Tableau de sortie ( "Fusionné" )
) ;
// Nettoyer
proche ( ST , pas de sauvegarde ) ;
proche ( FT , pas de sauvegarde ) ;
) ;
Re : Fusion de la configuration JSL à l'aide de "Join"D'accord, j'ai essayé quelque chose de similaire où j'ai envoyé mes tables ouvertes à une liste :
Avant ce code, j'ai du code où les fichiers *txt sont ouverts (je pourrais avoir jusqu'à 30+ fichiers) et convertis en une table de données JMP (donc la sortie de jusqu'à 30+ tables).J'essaie alors 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 veux rejoindre chaque OT de la liste et le joindre à MT donc j'obtiens:
MT+OT(1) = MergedTable, puis MergedTable+OT(2) = MergedTable2, puis MergedTable2+OT(3) = MergedTable3, etc jusqu'à ce que j'obtienne une table maître contenant toutes les données (et les autres sont fermées)
openDT = Liste();
Pour (f = 1, f <= N Table(), f++,
Insert Into(open DT, Data Table(f)););
Afficher(openDT);
MT = DataTable(1);
Fermer(Table de données(1), nosave);
OTs = List();
For(g = 1, g<= N Items(openDT) -1, g++,
Insérer dans (OTs, DataTable(g));
Fermer tout (DataTables, nosave);
Afficher (OT);
Afficher(MT);
Pour( h = 1, h <= N Items(OTs), h++,
MT << Rejoindre(Avec(ST),
Mise à jour,
Par colonnes correspondantes(:Column_1 = :Column_1),
Déposez les multiples (1,0),
Nom("Inclure les non-correspondances")(1, 1),
Préserver 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
"Envoyer attend un objet inscriptible{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 ,
Par colonnes correspondantes( : Colonne_1 = : Colonne_1 ) ,
Laisser tomber les multiples( 1 , 0 ) ,
Nom( "Inclure les non-correspondances" )( 1 , 1 ) ,
Préserver l'ordre de la table principale( 1 ) ,
Tableau de sortie( "Fusionné" )) /*###*/ ;
Continuer();
Aider? Je me cogne la tête contre le mur en essayant de comprendre pourquoi ça ne marche pas
Re : Fusion de la configuration JSL à l'aide de "Join"Cela pourrait vous aider à démarrer à titre d'exemple. Ce n'est pas parfait car après l'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);
);