订购文件夹中的文件伙计们,
我有一个要连接的文件列表(参见第一张图)。首选是如图所示连接,即“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");回复:在文件夹中订购文件吉姆,
我无法告诉您这种方法对于我遇到的另一个(与此线程无关)问题有多么深刻。 也就是说,具有不可预测的“元素”排列的文件名。 至少我能够剖析文件名并将“重新排序”以一致的标签。
再次感谢你的帮助。
尼尔