Dateien im Ordner anordnenLeute,
Ich habe eine Liste von Dateien, die ich verketten möchte (siehe erste Abbildung).Die Präferenz wäre die Verkettung wie gezeigt, also „surf_12275-87-1...“, „surf_12275-87-2…“ usw. Wenn ich jedoch eine Liste aus den Dateien im Ordner erstelle (nachdem ich unnötige Zeichen entfernt habe), lautet die Reihenfolge „12275-87-“ 1 , 12275-87- 10 , 12275-87- 11 ". Die Präferenz wäre jedoch „12275-87-“ 1 , 12275-87- 2 , 12275-87- 3 ". Der einfachste Weg, das Problem zu umgehen, besteht natürlich darin, die Dateien in der Form „-01, -02, ... -10, -11“ zu mir zu bekommen, aber das wird nicht immer der Fall sein.
Gibt es eine einfache Möglichkeit, die Dateien in das bevorzugte Ranking-Format zu bringen, damit ich sie öffnen und von niedrig nach hoch verketten kann? Aktuelles Skript im Anhang.
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);


DatenzugriffMassenanpassungQualitäts- und VerfahrenstechnikBetreff: Dateien im Ordner anordnen@DonMcCormack Dies könnte auch eine mögliche Option für eine JMP Challenge sein: Natürliche Sortierung . Normalerweise versuche ich, Situationen wie diese mit zusätzlichen aufgefüllten Nullen zu bewältigen, wenn ich kann, aber es kommt durchaus vor, dass sie fehlen ...
Betreff: Dateien im Ordner anordnenJim,
Ich kann Ihnen nicht sagen, wie aufschlussreich dieser Ansatz für ein anderes (nicht mit diesem Thread zusammenhängendes) Problem war, das ich hatte. Das heißt, Dateinamen mit unvorhergesehenen „Element“-Anordnungen. Zumindest bin ich in der Lage, die Dateinamen zu zerlegen und für eine einheitliche Beschriftung neu zu ordnen.
Danke nochmal für all deine Hilfe.
Neil
Betreff: Dateien im Ordner anordnenJarmo,
Vielen Dank, dass Sie mir neue Fähigkeiten beigebracht haben. Ich habe alle von Ihnen vorgeschlagenen Ansätze ausprobiert, um meine Programmierfähigkeiten zu verbessern. Hier ist meine neueste Revision, die genau das tut, was ich will.
Danke nochmal
Neil
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");Betreff: Dateien im Ordner anordnenHier ist eine Möglichkeit, die Liste zu sortieren, indem Sie die Elemente der Namen in verschiedene Spalten einer Datentabelle aufteilen, die numerischen Elemente in numerische Spalten ändern und die Datentabelle dann nach allen Elementen sortieren.
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>
Ich bin sicher, dass andere Mitglieder alternative Methoden haben.
Betreff: Dateien im Ordner anordnenDie JMP-Datentabelle scheint eine numerische Sortierung zu verwenden, wenn Sie den Spaltenmodellierungstyp Ordinalzahl haben, sodass Sie diese oder eine for-Schleife verwenden können.
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);Diese könnten eine Vorstellung davon geben, wie das Problem angegangen werden kann.
Bearbeiten:
Möglicherweise können Sie bei Verwendung der Quellspalte auch zunächst alle Tabellen miteinander verketten, die Quellspalte in „Ordinal“ ändern und dann danach sortieren:
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);