Boucle pour ouvrir des fichiers, modifier un nom de colonne et enregistrer au format d'origineBonjour à tous,
J'ai essayé d'assembler un script pour ouvrir une série de fichiers (.dx) et modifier le texte de l'une des colonnes de chaque fichier. Je parviens à le faire fonctionner pour un ou deux fichiers individuellement, mais si j'essaie un ensemble de quatre, une boucle infinie commence. Quelqu'un peut-il aider s'il vous plaît? Il est possible que le problème soit lié aux fichiers, mais je voudrais d'abord vérifier le script puisque je suis novice chez jsl. Idéalement, je voudrais enregistrer les fichiers non pas en tant que jmp mais aussi en tant que dx.
Files = Pick File( "Select File(s)", "G:\Retention Compliant\Research\Analytical\Projects\IR database", {"All Files|*"}, 1, 0, "", "multiple" );
For( i = 1, i <= N Items( Files ), i++,
Try( dt = Open( Files[i], "text" ) );
wait( 0 );
For( n = 1, n <= N Items (Files), n++,
colList = dt << get column names( character, string );
For( i = 1, i <= N Items( colList ), i++,
selRows = dt << get rows where(
Column( dt, colList[i] )[Row()] == "##YUNITS= % Transmittance" | Column( dt, colList[i] )[Row()] == "##YUNITS= % T"
);
If( N Rows( selRows ) > 0,
Column( dt, colList[i] )[selRows] = "##YUNITS= % T";
);
);
) );ScriptRe : Boucle pour ouvrir des fichiers, modifier un nom de colonne et enregistrer au format d'origineJ'ai annoté le script ci-dessous avec les problèmes que j'ai trouvés.Je suis surpris que vous puissiez lire dans un fichier .dx.JMP ne prend certainement pas en charge l'écriture de fichiers .dx (pour autant que je sache).
Files = Pick File(
"Select File(s)",
"G:\Retention Compliant\Research\Analytical\Projects\IR database",
{"All Files|*"},
1,
0,
"",
"multiple"
);
For( i = 1, i <= N Items( Files ), i++,
// Open one file
Try( dt = Open( Files[i], "text" ) );
Wait( 0 );
// Loop from 1 to the number of files (even though only 1 file has been opened)
For( n = 1, n <= N Items( Files ), n++,
// Here you will be reading the column names in for the first file over and over
colList = dt << get column names( character, string );
// Loop using "i" as the index across all of the columns....in the first file
// since that is all we have read in.....but since you are using "i", you will
// be creating an infinate loop, since you are using "i" for the first loop
// and you will be interferring with the assumed stepping for the outter loop
For( i = 1, i <= N Items( colList ), i++,
selRows = dt << get rows where(
// You are not in a formula, so the Row() function will not provide a predictable result
Column( dt, colList[i] )[Row()] == "##YUNITS= % Transmittance" | Column( dt, colList[i] )[Row()] ==
"##YUNITS= % T"
);
If( N Rows( selRows ) > 0,
Column( dt, colList[i] )[selRows] = "##YUNITS= % T"
);
);
);
);Re : Boucle pour ouvrir des fichiers, modifier un nom de colonne et enregistrer au format d'origineVous ne savez pas ce qu'est dx, mais vous pouvez enregistrer avec l'extension .csv et probablement être proche.
Re : Boucle pour ouvrir des fichiers, modifier un nom de colonne et enregistrer au format d'origineMerci Craige, cela fonctionne maintenant avec tous les fichiers et sans erreur ! Des idées sur la façon d'enregistrer dans le format d'origine (.dx) et de préférence en préservant le nom du fichier ?
Re : Boucle pour ouvrir des fichiers, modifier un nom de colonne et enregistrer au format d'origine1) reformatez votre JSL à l'aide de la fenêtre contextuelle du clic droit de l'éditeur. Vous pourrez mieux voir la nidification.
2) vous réutilisez la variable i dans la boucle interne. C'est la cause de la boucle.
3) supprimez le wrapper try() ou faites-lui faire quelque chose lorsqu'il détecte une erreur.