对文件夹中的文件进行排序各位,
我有一个要连接的文件列表(参见第一张图)。首选连接如图所示,即“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);