créer une boucleJe souhaite ajouter une colonne avec les numéros de ligne à plusieurs tables de données à l'aide du script suivant :
dt<<NEW column=""></NEW>
Je suis encore nouveau dans les scripts. Comment puis-je traiter toutes mes tables de données automatiquement ? J'ai cette ligne d'informations qui pourrait fonctionner, mais il semble qu'il y ait un problème pour localiser "Data Table" ...
Names Default To Here( 1 );
// Create a list of data tables to be updated
dtList = {"Table1", "Table2", etc...};
// Loop through each of the data tables and add the column
For( i = 1, i <= N Items( dtList ), i++,
dt = Data Table( dtList[i] );
Re : créer une boucleMerci beaucoup Jef. C'est parfait.
Il faut absolument que je trouve le temps de regarder de plus près la lecture du guide de scénarisation. Cela m'aidera.Re : créer une boucleVous avez un certain nombre de problèmes.
Vous avez confondu dirpath et tous les fichiers et les a utilisés de manière incorrecte dans votre code. Le résultat de Choisissez le répertoire() , dirpath , sera une chaîne correspondant au chemin d'accès au répertoire choisi par l'utilisateur. Vous avez essayé de l'utiliser dans l'indexation de votre boucle For() ci-dessous comme si elle contenait la liste des fichiers.
Le résultat de Fichiers dans le répertoire() , tous les fichiers , sera la liste des fichiers du répertoire. C'est ce que vous devriez boucler.
Vous aurez besoin de Ouvrir() les tables de données avant de pouvoir ajouter la nouvelle colonne.
Depuis le tous les fichiers list n'est que les noms de fichiers, vous devrez concaténer le répertoire, dirpath , dans l'argument de Open().
Enfin, vous devez vous assurer que vous essayez uniquement d'ouvrir les tables de données JMP en vérifiant l'extension des fichiers. Dans l'exemple de code ci-dessous, je le fais avec le Mot() fonction. L'argument -1 demande le dernier mot de la chaîne.
dirpath = Pick Directory();
allfiles = Files In Directory( dirpath );
// Loop through each of the files and add the column
Show( allfiles );
For( i = 1, i <= N Items( allfiles ), i++,
If( Word( -1, allfiles[i], "." ) == "jmp",
dt = Open( dirpath || allfiles[i] );
dt << New Column( "Sequence", numeric, formula( Row() ) );
)
);
Vérifiez Commencer partie de la Tableaux de données chapitre de la Guide de script pour une introduction à l'utilisation des tableaux de données.
Re : créer une boucleJ'ai fait une erreur dans mon message lors de la copie du script mais j'ai travaillé avec la bonne version et pourtant j'ai toujours un message d'erreur avec l'option Debug :
"Pour" inattendu. Il manque peut-être un ; ou .
Re : créer une boucleVous avez "dispath" dans votre boucle.Changez-le en "dirpath"
Re : créer une boucleApparemment. Ce n'est pas encore bon. Il y a un problème avec la ligne "Pour" ?
<SPAN class="token comment">dirpath = Pick Directory();<BR />allfiles = Files in Directory (dirpath);<BR />all files<BR /><BR />// Loop through each of the files and add the column</SPAN>
<SPAN class="token function">For</SPAN><SPAN class="token punctuation">(</SPAN> i <SPAN class="token operator">=</SPAN> <SPAN class="token number">1</SPAN><SPAN class="token punctuation">,</SPAN> i <SPAN class="token operator"><=</SPAN> <SPAN class="token function">N Items</SPAN><SPAN class="token punctuation">(</SPAN> dirpath <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">,</SPAN> i<SPAN class="token operator">++</SPAN><SPAN class="token punctuation">,</SPAN>
dt <SPAN class="token operator">=</SPAN> <SPAN class="token function">Data Table</SPAN><SPAN class="token punctuation">(</SPAN> dispath<SPAN class="token punctuation">[</SPAN>i<SPAN class="token punctuation">]</SPAN> <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN>
dt<SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token function">new column</SPAN><SPAN class="token punctuation">(</SPAN><SPAN class="token string">"Sequence"</SPAN><SPAN class="token punctuation">,</SPAN> numeric<SPAN class="token punctuation">,</SPAN> formula<SPAN class="token punctuation">(</SPAN><SPAN class="token function">Row</SPAN><SPAN class="token punctuation">(</SPAN><SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN>
<SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN>
Re : créer une boucleIl existe des commandes pour choisir un répertoire et pour lister tous les fichiers de ce répertoire.
Je recommanderais de vérifier pour chaque fichier s'il s'agit d'un fichier JMP (par exemple en vérifiant la fin du fichier).
dirpath = Pick Directory();
allfiles = Files in Directory(dirpath);
allfiles
Re : créer une boucleOuais ! Ça marche bien !
Est-il possible de demander - au démarrage du script - l'ouverture de toutes les tables de données qui se trouvent dans un dossier afin d'exécuter le script par la suite ? Faut-il indiquer le titre de chaque fichier l'un après l'autre dans la "listoftables" ? Cela prend beaucoup de temps… comment me conseillez-vous de procéder ?
Merci d'avance
Re : créer une boucleLe script suivant fonctionne pour moi. Si ce n'est pas le cas pour vous, il serait utile de poster le contenu de votre journal (Menu principal => Fenêtre => Journal) et la version de JMP que vous utilisez.
listoftables = {"Untitled 5", "Untitled 4", "Untitled 3"};
// Loop through each of the data tables and add the column
For( i = 1, i <= N Items( listoftables ), i++,
dt = Data Table( listoftables[i] );
dt<<NEW column=""></NEW>