對資料夾中的檔案進行排序各位,
我有一個要連接的文件列表(參見第一張圖)。首選連接如圖所示,即「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 挑戰賽的一個可能選項:自然排序。 我通常會盡可能地用額外的填充零來處理這樣的情況,但它們丟失是很常見的...
回覆:對資料夾中的文件進行排序吉姆,
我無法告訴您這種方法對於我遇到的另一個(與此線程無關)問題有多有洞察力。 也就是說,檔案名稱具有不可預測的“元素”排列。 至少我能夠剖析文件名並“重新排序”以保持一致的標籤。
再次感謝你的幫忙。
尼爾
回覆:對資料夾中的文件進行排序雅爾莫,
非常感謝您教我一套新技能。 我已經嘗試了您建議的所有方法來提高我的編碼能力。 這是我的最新版本,它完全符合我的要求。
再次感謝你
尼爾
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");回覆:對資料夾中的文件進行排序這是對清單進行排序的一種方法,即獲取名稱元素並將它們分成資料表中的不同列,將數字元素變更為數字列,然後按所有元素對資料表進行排序。
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>
我相信其他成員可能有其他方法。
回覆:對資料夾中的文件進行排序如果您將列建模類型設為序數,那麼 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);
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);