Enregistrer les noms de variables incrémentées dans la boucle For dans une listeJ'essaie de
1) Ouvrez une série de fichiers répertoriés dans la liste Unique_Files
2) Si le fichier n'existe pas, une boîte de dialogue s'ouvre avec un message indiquant que le fichier existe
3) Si le fichier existe, ouvrez-le dans JMP
4) Si le fichier existe, ajoutez le nom de référence de la table de données à la liste UniqueTables
Toutes les autres parties de mon script semblent fonctionner, sauf la possibilité de créer une liste du nom de référence de la table de données.La façon dont mon script est écrit ci-dessous donne lieu à la liste
UniqueTables = { DataTable("filename1"), Data Table("filename2"),....}
Au lieu de cela, je veux que le script aboutisse à la liste comme
UniqueTables = Ma_Table_1, Ma_Table_2, Ma_Table_3,...
Merci d'avance.
N Items (Unique_Files);
UniqueTables = { };
For ( i = 1, i <= N, i ++,
If(
File Exists( "C:\PretendFilePath\" ||Unique_Files[i]|| ".csv"),
Eval(
Substitute(
Expr(
MyTab = Open( "C:\PretendFilePath\" ||Unique_Files[i]|| ".csv");
Insert Into( UniqueTables, MyTab)
),
Expr( MyTab),
Parse( My_Table_" ||Char(i))
)
),
New Window ("File Not Found",
<< Modal,
V List Box(
Text Box( Unique_Files[i]|| " does not exist in folder."),
Button Box( "OK")
)
)
)
);Re : Enregistrer les noms de variables incrémentées dans la boucle For dans une listeouais
Re : Enregistrer les noms de variables incrémentées dans la boucle For dans une listeCette période était difficile à voir !!!!
Re : Enregistrer les noms de variables incrémentées dans la boucle For dans une listeD'une certaine façon, un point "." fini après
Show( UniqueTables );.
alors supprimez-le et cela fonctionnera bien.....Je corrigerai l'exemple précédent pour des références futures.
Re : Enregistrer les noms de variables incrémentées dans la boucle For dans une listeSur la dernière ligne j'obtiens l'erreur suivante :
"UniqueTables" inattendues. Il manque peut-être un ";" ou ",".
Ligne 42 Colonne 1 : ►UniqueTables[1] << Concatenate( UniqueTables[2] );
Le texte restant qui a été ignoré était
UniqueTables[1]<Re : Enregistrer les noms de variables incrémentées dans la boucle For dans une liste
Vous semblez manquer de connaissances sur ce que les différentes structures vous apportent réellement.Je vous suggère fortement de prendre le temps de lire le Guide de script.Mais je pense également que ce qui suit pourrait résoudre certains problèmes avec votre code actuel.Jetez un œil à mon code annoté ci-dessous et voyez s'il ajoute un peu de lumière aux problèmes que vous rencontrez.
names default to here(1);
dt1=open("$SAMPLE_DATA/big class.jmp");
dt2=open("$SAMPLE_DATA/big class families.jmp");
// Here is what the value of dt1 is
show(dt1);
// From the log
// dt1 = DataTable("big class");
// Therefore the value of dt2 is,
show(dt2);
// dt2 = DataTable("big class families");
// The structure of the Concatenate Platform syntax is:
// data table("data table name") << Concatenate( data table("data table2 name"), data table("data table2 name") );
// That would mean that the following will concatenate our two files
data table( "big class" ) << Concatenate( data table( "big class families" ) );
// It also means, that since we have variables dt1, which was shown to equal Data Table( "big class" ), and
// dt2 which has the value of Data Table( "big class families" )
// the above concatenate statement can be written
dt1 << Concatenate( dt2 );
// Here is another way to do this
UniqueTables = {};
MyTab = open("$SAMPLE_DATA/big class.jmp");
insert into( UniqueTables, MyTab );
MyTab = open("$SAMPLE_DATA/big class families.jmp");
insert into( UniqueTables, MyTab );
Show( UniqueTables );
// returns
// UniqueTables = {DataTable("big class"), DataTable("big class families")};
// So now the Concatenate statement can be written
UniqueTables[1] << Concatenate( UniqueTables[2] );Re : Enregistrer les noms de variables incrémentées dans la boucle For dans une listeDécouvrez ce qu'est un Problème XY c'est que cela nous aidera certainement à vous aider.
Mais sinon.Si tout ce que vous essayez de faire est de concaténer tous les fichiers JMP dans un dossier.
Names default to here( 1 );
// this is just creating an example set don't worry about it.
dt = open("$SAMPLE_DATA\Big Class.jmp");
dir = convert file path("$DESKTOP\Example\");
Create Directory(dir);
for(i=1, i<=6, i++,
path = convert file path(char(i)||".jmp", base(dir));
dt << Save As(path);
);
// this is actually what you'll want to run
dir = convert file path("$DESKTOP\Example\");
// find the files in that directory
files = files in directory(dir);
// create a base table
dt_final = New Table("Concatted");
for(i=1, i<=nitems(files), i++,
dt = open(convert file path(files[i], base(dir)));
dt_final << Concatenate(dt, append to first table(1));
close(dt, no save);
)Re : Enregistrer les noms de variables incrémentées dans la boucle For dans une listeSalut Jim,
Malheureusement, je n'obtiens toujours pas le résultat souhaité car je n'ai pas bien expliqué comment j'ai expliqué ma situation.
J'aurais dû préciser que la liste Unique_Files est le nom de fichier des CSV stockés dans l'emplacement du dossier.
Unique_Files = {"FileName1", "FileName2", "FileName3", etc...}
L'utilisation de la fonction << Get Name entraîne la liste UniqueTables comme
UniqueTables = {"FileName1", "FileName2", "FileName3", etc...}
Quand je cherche
UniqueTables = {My_Table_1, My_Table_2, My_Table_3, etc...}
Une fois que j'ai rassemblé la liste UniqueTables dans ce format, mon plan était de concaténer certaines de ces tables et de fermer les tables sources concaténées.Je sais seulement comment faire cela avec le nom de référence de table My_Table_1. Existe-t-il un moyen de concaténer des tables à partir de leur nom de fichier « FileName1 » ?Si tel est le cas, je peux alors contourner complètement ce problème.
Merci d'avance!Vous avez été très utile.
Re : Enregistrer les noms de variables incrémentées dans la boucle For dans une listePuis-je te demander pourquoi tu veux faire ça ?Cela rend le script très difficile à prendre en charge car vous ne trouvez pas les noms de variables. Je corrige les scripts une fois que les propriétaires ne comprennent plus leur propre code et c'est toujours quelque chose que je rencontre.
Qu'est-ce que donner plusieurs variables vous donne qu'une liste ne vous donne pas ?
Parce qu'il semble inutile d'avoir
UniqueTables[1] = Ma_Table_1 = DataTable("filename1");
Re : Enregistrer les noms de variables incrémentées dans la boucle For dans une listeTout ce que vous avez à faire est de récupérer le nom de la table à partir de la référence de la table de données, modifiez donc votre référence à "Mytab" par :
Insert Into( UniqueTables, MyTab << get name)
Tous les messages pour les différents éléments de JSL sont documentés dans le Guide de script
Aide ==>Guide de script