訂購文件夾中的文件伙計們,
我有一個要連接的文件列表(參見第一張圖)。首選是如圖所示連接,即“surf_12275-87-1..., “surf_12275-87-2...”等但是,當我從文件夾中的文件(去除不必要的字符後)形成一個列表時,序列是“12275-87- 1 , 12275-87- 10 , 12275-87- 11 ”。 然而,首選將是“12275-87- 1 , 12275-87- 2 , 12275-87- 3 ”。 顯然,解決這個問題的直接方法是讓文件以“-01、-02、...-10、-11”的形式出現在我面前,但情況並非總是如此。
是否有一種直接的方法可以將文件轉換為首選排名格式,以便我可以從低到高打開和連接? 附上當前腳本。
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);


腳本編寫回复:在文件夾中訂購文件如果您的列建模類型為序數,則 JMP 數據表似乎正在使用數字排序,因此您可以使用該或 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);這些可以給一些想法如何解決這個問題。
回复:在文件夾中訂購文件這是對列表進行排序的一種方法,通過獲取名稱的元素並將它們分成數據表中的不同列,將數字元素更改為數字列,然後按所有元素對數據表進行排序。
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>
我相信其他成員可能有其他方法。
回复:在文件夾中訂購文件賈莫,
非常感謝你教我一套新技能。 我已經嘗試了您建議的所有方法來提高我的編碼能力。 這是我的最新版本,它完全符合我的要求。
再次感謝你
尼爾
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");回复:在文件夾中訂購文件吉姆,
我無法告訴您這種方法對於我遇到的另一個(與此線程無關)問題有多麼深刻。 也就是說,具有不可預測的“元素”排列的文件名。 至少我能夠剖析文件名並將“重新排序”以一致的標籤。
再次感謝你的幫助。
尼爾