Concaténer les tables et fermer les fichiers d'entréeJe cherche un moyen de fermer les tables qui sont ouvertes et qui ont servi d'entrée
For( f2 = 1, f2 < N Items( Tables ), f2++,
ConcTable = Tables[f2] << /*###*/Concaténer(
Tableaux[f2 + 1],
Nom de la table de sortie( "Les deux" )
) /*###*/;
Fermer( liste_fichiers[f2], Pas d'enregistrement );
);
La réponse dans le journal est :
Send attend un objet inscriptible dans l'accès ou l'évaluation de 'Send' , Tables[f2] << /*###*/Concatenate( Tables[f2 + 1], Output Table Name( "Both" ) ) /*###* /
Re : concaténer des tables et fermer les fichiers d'entrée
@rc_hertzy écrit:
Belle solution. Tout d'abord, une faute de frappe (signe égal et non moins) : la quatrième ligne doit être
dt=table de données(1);
Maintenant, comment puis-je conserver une colonne pour la source ? Si j'ajoute simplement
Créer une colonne source
dans l'instruction Concatenate, j'obtiens des colonnes source successives, et aucune n'est ce que je veux - répertoriant tous les fichiers source.
Connexe : lorsque je concatène manuellement des fichiers et que je copie le script source du fichier de sortie dans une fenêtre de script, il ne s'exécute pas, ce qui donne l'erreur de ne pas trouver les noms de fichiers répertoriés. Voici le script ( File1.jmp est le fichier ouvert sélectionné) :
dt = table de données actuelle();
dt << Enchaîner (
Tableau de données ( "Fichier2.jmp" ),
Tableau de données ( "Fichier3.jmp" ),
Tableau de sortie( "Combinedtest.jmp" ),
Créer une colonne source
);
Merci. -Meule
J'ai trouvé mon erreur dans la dernière partie. J'avais renommé un fichier de données, donc bien sûr le script ne pouvait pas le trouver.
Pourtant, je voudrais un moyen de modifier votre solution pour ajouter une colonne source afin que je n'aie pas besoin de lister explicitement tous les fichiers ouverts. Merci.
Re : concaténer des tables et fermer les fichiers d'entréeBelle solution. Tout d'abord, une faute de frappe (signe égal et non moins) : la quatrième ligne doit être
dt=table de données(1);
Maintenant, comment puis-je conserver une colonne pour la source ? Si j'ajoute simplement
Créer une colonne source
dans l'instruction Concatenate, j'obtiens des colonnes source successives, et aucune n'est ce que je veux - répertoriant tous les fichiers source.
Connexe : lorsque je concatène manuellement des fichiers et que je copie le script source du fichier de sortie dans une fenêtre de script, il ne s'exécute pas, ce qui donne l'erreur de ne pas trouver les noms de fichiers répertoriés. Voici le script ( File1.jmp est le fichier ouvert sélectionné) :
dt = table de données actuelle();
dt << Enchaîner (
Tableau de données ( "Fichier2.jmp" ),
Tableau de données ( "Fichier3.jmp" ),
Tableau de sortie( "Combinedtest.jmp" ),
Créer une colonne source
);
Merci. -Meule
Re : concaténer des tables et fermer les fichiers d'entréevoici une méthode simple pour concaténer les tables et fermer celles qui ne sont pas nécessaires
Names Default To Here( 1 );
Final_Table="Data_" || char(ntable);
// Concatenate the tables and delete them. Add all of the tables to the first table
dt-data table(1);
For( i = 2, i <= N Table(), i++,
dt << concatenate(data table(i), append to first table(1));
close(data table(i), nosave);
);
// Rename the table to the desired name
dt << set name(Final_Table);
Re : concaténer des tables et fermer les fichiers d'entréeJim,
Si vous regardez dans les deux tableaux ci-joints, ils ont le même nombre de colonnes et de noms de colonnes. La seule chose qui différencie les deux est le nombre de lignes. La colonne 1 correspond à l'horodatage et, sur cette base, les doublons seront supprimés.
La méthode telle que scénarisée fonctionne. Je cherche un moyen efficace de sauvegarder la table finale et de fermer les tables qui ont servi d'entrée pour la finale.
Cordialement,
Christian
Re : concaténer des tables et fermer les fichiers d'entréePouvez-vous fournir un échantillon de vos tableaux de données et une illustration de ce qui serait considéré comme des lignes en double ?
Re : concaténer des tables et fermer les fichiers d'entréeJim, merci pour la réponse. Permettez-moi de développer un peu plus. L'objectif est de concaténer une liste de tables de données et de supprimer les doubles lignes. Toutes les tables de données qui ont contribué à la table concaténée finale doivent être fermées. Le nombre de tables de données d'entrée est variable. La sélection des datatbales à concaténer suit la règle selon laquelle les chaînes de début sont égales et le nom final de la table de données concaténées est la même chaîne.
Voici maintenant le code pour la concaténation et la suppression des doubles lignes ainsi que la sauvegarde de la table finale.
Si(N éléments(liste de fichiers)>0,
pour (nu_t = 1, nu_t <= num_tables, nu_t++,
TableFinale = Munger(listefichiers[1],6,4);
Table_Final = "Données_"||Table_Final||".jmp" ;
//Afficher(TableFinale);
pour (f2 = 1, f2 < nitems(Tables), f2++,
ConcTable = Tables[f2] << Concatenate(Tables[f2+1], Output Table Name( "Both" ) );
Fermer( Tables[f2] , Pas d'enregistrement );
);
// Supprimer les lignes doubles
ConcTable = Table de données actuelle();
col_min = Parse( "Col Min( Row(), :Name(\!"" || Concat Items( ConcTable << get column names( string ), "\!"), :Name(\!"" ) || "\!"))" );
doublons = [] ;
For Each Row( If( col_min != Row(), duplicates |/= Row() ) );
ConcTable << supprimer les lignes ( doublons );
ConcTable << Enregistrer (Path_datatable_out||Final_Table);
//For(cc=1,cc <= nitems(Tables),cc++, Close(Tables[cc], No Save));
);
); // Si Condition
J'attends votre réponse avec impatience.
Christian
Re : concaténer des tables et fermer les fichiers d'entréeVoici un morceau de code qui fonctionnera et suit la logique de ce que vous avez spécifié. Cependant, je ne comprends pas pourquoi vous voudriez faire cela ....... alors peut-être que le résultat ne sera pas ce que vous imaginez. Si ce n'est pas le cas, répondez avec ce que le résultat final est censé être.
Names Default To Here( 1 );
// Create sample tables
dt = Open( "$SAMPLE_DATA\big class.jmp" );
dt << subset( selected rows( 0 ), selected columns( 0 ), by( :age ) );
Close( dt, nosave );
// Create your Tables list
Tables = {};
For( i = 1, i <= N Table(), i++,
Insert Into( Tables, Data Table( i ) << get name )
);
// Run the concatinations
For( f2 = 1, f2 < N Items( Tables ), f2++,
ConcTable = Data Table( Tables[f2] ) << Concatenate( Data Table( Tables[f2 + 1] ), Output Table Name( "Both" ) );
Close( Data Table( Tables[f2] ), No Save );
);