Ordre des fichiers dans un dossierGens,
J'ai une liste de fichiers que je souhaite concaténer (voir première figure).La préférence serait de concaténer comme indiqué, c'est-à-dire "surf_12275-87-1..., "surf_12275-87-2...", etc. Cependant, lorsque je forme une liste à partir des fichiers du dossier (après avoir supprimé les caractères inutiles), la séquence est "12275-87- 1 , 12275-87- dix , 12275-87- 11 ". La préférence serait cependant "12275-87- 1 , 12275-87- 2 , 12275-87- 3 ". Évidemment, la solution la plus simple consiste à recevoir les fichiers sous la forme "-01, -02, ... -10, -11", mais ce ne sera pas toujours le cas.
Existe-t-il un moyen simple de placer les fichiers dans le format de classement préféré afin que je puisse les ouvrir et les concaténer de bas en haut ? Script actuel ci-joint.
s_path = {};
X_path = {};
f1 = Files In Directory( SD1, recursive(1));
For( i = 1, i <= N Items( f1 ), i++,
b = f1[i];
c = Contains Item(b, "surf", "_");
If( c==1,
d = Word(2, b, "_");
Insert Into(s_path,d),
Insert Into(X_path, d)
)
);
Show(s_path);


Accès aux donnéesPersonnalisation de masseIngénierie Qualité et ProcédésRe : Ordre des fichiers dans un dossier@DonMcCormack cela pourrait également être une option possible pour un JMP Challenge : Tri naturel . J'essaie généralement de gérer des situations comme celle-ci avec des zéros supplémentaires lorsque je le peux, mais il est assez courant qu'ils manquent...
Re : Ordre des fichiers dans un dossierJim,
Je ne peux pas vous dire à quel point cette approche a été perspicace pour un autre problème (sans rapport avec ce fil) que j'avais. C'est-à-dire des noms de fichiers avec des arrangements "d'éléments" imprévus. Au moins, je suis capable de disséquer les noms de fichiers et de les « réorganiser » pour obtenir un étiquetage cohérent.
Merci encore pour votre aide.
Daniel
Re : Ordre des fichiers dans un dossierJarmo,
Un grand merci de m'avoir appris un nouvel ensemble de compétences. J'ai essayé toutes vos approches suggérées pour améliorer ma capacité de codage. Voici ma dernière révision qui fait exactement ce que je veux.
Merci encore
Daniel
f1 = Files In Directory( SD1, recursive(1));
f1 = Sort List(f1);
dt = New Table("",
New Column("SortList", Character, Ordinal, Set Values(f1)), private
);
dt << Sort( By(:SortList), Order(Ascending), Replace Table);
b = dt:SortList << Get Values;
Close(dt, no save);
For( i=1, i <= N Items(b), i++,
file_1 = Open(SD1 || b[1]);
If(i > 1,
file_nxt = Open(SD1 || b[i], Private);
file_1 << Concatenate(file_nxt, Append to first table);
)
);
file_1 << Save(SD1 || "All Summary");Re : Ordre des fichiers dans un dossierVoici une façon de trier la liste, en prenant les éléments des noms et en les séparant en différentes colonnes dans un tableau de données, en changeant les éléments numériques en colonnes numériques, puis en triant le tableau de données par tous les éléments.
names default to here(1);
f1={"surf_12275-87-11_r250_50x_mean_2.jmp", "surf_12275-87-2_r250_50x_mean_2.jmp",
"surf_12275-87-10_r250_50x_mean_2.jmp", "surf_12275-87-4_r250_50x_mean_2.jmp",
"surf_12275-87-5_r250_50x_mean_2.jmp", "surf_12275-87-6_r250_50x_mean_2.jmp",
"surf_12275-87-7_r250_50x_mean_2.jmp", "surf_12275-87-8_r250_50x_mean_2.jmp",
"surf_12275-87-9_r250_50x_mean_2.jmp", "surf_12275-87-1_r250_50x_mean_2.jmp",
"surf_12275-87-3_r250_50x_mean_2.jmp"};
dt = new table("Sort Table",
add rows(nitems(f1)),
new column("File Names", character)
);
dt:File Names << set values(f1);
// Create and populate separate columns for each element in the names
sortList = {};
i=1;
While(word(i,f1[1],"_-.") != "",
dt<<NEW column=""></NEW>
Je suis sûr que d'autres membres peuvent avoir des méthodes alternatives.
Re : Ordre des fichiers dans un dossierLa table de données JMP semble utiliser le tri numérique si vous avez un type de modélisation de colonnes comme ordinal afin que vous puissiez l'utiliser ou une boucle for.
Names Default To Here(1);
a = {
"surf_12275_87-1_r250",
"surf_12275_87-2_r250",
"surf_12275_87-3_r250",
"surf_12275_87-4_r250",
"surf_12275_87-5_r250",
"surf_12275_87-6_r250",
"surf_12275_87-7_r250",
"surf_12275_87-8_r250",
"surf_12275_87-9_r250",
"surf_12275_87-10_r250",
"surf_12275_87-11_r250",
"surf_12275_87-12_r250",
"surf_12275_87-13_r250",
"surf_12275_87-20_r250",
"surf_12275_87-22_r250"
};
a = Sort List(a); //break the ordering
Show(a);
dt = New Table("",
New Column("SortList", Character, Ordinal, Set Values(a)), private
);
dt << Sort(By(:SortList), Order(Ascending), Replace Table);
b = dt:SortList << Get Values;
Close(dt, no save);
Show(b);
c = {};
For(i = 1, i <= N Items(a), i++,
Insert Into(c, a[i], Num(Words(a[i], "-_")[4]));
);
Show(c);Ceux-ci pourraient donner une idée de la manière d’aborder le problème.
Modifier:
Vous pourrez peut-être également concaténer toutes les tables en utilisant la colonne Source, changer la colonne source en Ordinal, puis trier selon cela :
Names Default To Here(1);
a = {
"surf_12275_87-1_r250",
"surf_12275_87-2_r250",
"surf_12275_87-3_r250",
"surf_12275_87-4_r250",
"surf_12275_87-5_r250",
"surf_12275_87-6_r250",
"surf_12275_87-7_r250",
"surf_12275_87-8_r250",
"surf_12275_87-9_r250",
"surf_12275_87-10_r250",
"surf_12275_87-11_r250",
"surf_12275_87-12_r250",
"surf_12275_87-13_r250",
"surf_12275_87-20_r250",
"surf_12275_87-22_r250"
};
a = Sort List(a);
one = New Table(a[1], new column("a", set values([1])));
two = New Table(a[2], new column("a", set values([10])));
three = New Table(a[6], new column("a", set values([2])));
one << Concatenate(two, three, Append to first table, Create Source Column);
one:Source Table << Set Modeling Type("Ordinal");
one << Sort(By(:Source Table), Order(Ascending), Replace Table);