NATSORTFILES例子

这个函数NATSORTFILES对文件名或文件路径进行排序,考虑字符串中的数字值。这被称为自然秩序字母数字顺序.注意MATLAB是内置的排序函数只按字符顺序排序排序在大多数编程语言中。

NATSORTFILES它不仅提供简单的字母数字排序,还将文件/文件夹名称和文件扩展名分开和排序,这意味着较短的名称在较长的名称之前出现。出于同样的原因,文件路径按每个路径分隔符分开,每个文件夹级别分别排序。有关更多细节,请参阅下面的“解释”部分。

要对字符串/单元格数组的行进行排序,请使用NATSORTROWS

要对字符串/单元格数组中的元素进行排序,请使用的作用

内容

基本用法

默认情况下NATSORTFILES将连续的数字解释为单个整数的一部分,任何剩余的子字符串都被视为文本。

一个= {“a2.txt”“a10.txt”“a1.txt”};sort () natsortfiles (A)
Ans = 'a1.txt' 'a10.txt' 'a2.txt' 'a10.txt'

输入1:数组到排序

第一个输入必须是以下数组类型之一:

排序后的数组作为第一个输出参数返回,使NATSORTFILES非常简单,包括与任何代码:

P =“natsortfiles_test”;S = dir (fullfile (“。”、磷、“* . txt”));S = natsortfiles(年代);k = 1:numel(S) fprintf(“-13年代% % s \ n”, (k) . name,年代(k) .date)结束
a .txt 27- 11 -2020 06:19:36 A_1-new.txt 27- 11 -2020 06:19:36 A_3.txt

输入2:正则表达式

第二个可选的输入参数是一个正则表达式,它指定了匹配的数字(参见下面的“正则表达式”部分):

B = {“1.3.txt”“1.10.txt”“1.2.txt”};natsortfiles (B)%默认匹配整数natsortfiles (B,“\ d + \ ?。\ d *’匹配小数
ans = ' 1.2.txt ' ' 1.3.txt ' ' 1.10.txt ans =“1.10.txt”“1.2.txt”“1.3.txt”

输入3+:删除“。”和“..”的名字

点目录名"."和".."可以使用"rmdot"选项删除:

S = dir (fullfile (“。”“HTML”‘*’));{S = natsortfiles(S,[],“rmdot”);{S.name}
ans = '。“. .' 'natsort_doc.html' [1x20 char] ans = 'natsort_doc.html' 'natsort_doc.html'

输入3+:没有文件扩展名

对于没有文件扩展名的名字(例如文件夹名,没有扩展名的文件名),则是可选的“noext”Argument应该使用:

C = {“1.9”“1.10”“1.2”};不带扩展名的%名称natsortfiles (C,“\ d + \ ?。\ d *’%默认情况下,点表示文件扩展名natsortfiles (C,“\ d + \ ?。\ d *’“noext”
Ans = '1.2' '1.9' '1.10'

输入3+:忽略文件路径

默认情况下,将考虑文件路径(如果提供)并对其进行排序(从文件名分离,或从文件夹字段)。要忽略路径并按文件名排序,只需指定可选的xpath的论点:

D = {“3. B / txt”“一个/ 1. txt”“100. B / txt”“一个/ 20. txt”};natsortfiles (D)%默认情况下也对文件路径进行排序natsortfiles (D, [],xpath的
ans = ' / 1. txt”“20. / txt”“B / 3. txt”“B / 100. txt”ans = 1. / txt”“B / 3. txt”“/ 20. txt”“B / 100. txt”

输入3+:可选参数

进一步的输入直接传递给的作用,从而控制大小写敏感性、排序方向和其他选项。看到的作用支持选项的解释和示例帮助:金宝app

E = {“B.txt”“10. txt”“1. txt”“A.txt”“2. txt”};natsortfiles (E, [],“下”) natsortfiles (E, [],“char < num”
ans = ' B.txt ' ' A.txt“10. txt”“2. txt”“1. txt”ans =“A.txt”“B.txt”“1. txt”“2. txt”“10. txt”

输出2:Sort Index

第二个输出参数是一个排序索引的数字数组ndx,这样Y = X (ndx)在哪里Y = natsortfiles (X)

F = {“abc2xyz.txt”“abc2xy8.txt”“abc10xyz.txt”“abc1xyz.txt”};[, ndx] = natsortfiles (F)
Out = 'abc1xyz.txt' 'abc2xyz.txt' 'abc2xyz.txt' 'abc10xyz.txt' ' NDX = 4 2 1 3

输出3:调试数组

第三个输出是单元格数组的单元格向量,它对应于输入目录层次结构、文件名和文件扩展名。单元格数组包含任何匹配的数字(使用指定的SSCANF格式)和所有非数字子字符串。这些单元格数组对于确认正则表达式正确识别数字非常有用。

[~, ~, dbg] = natsortfiles (F);dbg {:}
ans = ' abc '[2]“xyz”[]“abc”[2]“xy”[8]“abc”[10]“xyz”[]“abc”[1]“xyz”[]ans = ' . txt ' ' . txt ' ' . txt ' ' . txt '

解释:短即长

文件名和文件扩展名由扩展名分隔符——句点字符连接“。”.使用正常排序这个周期被排序了从0到45的所有字符(包括!"#$%&'()*+,-例如空格字符和所有控制字符,例如换行符、制表符等)。这意味着简单排序返回一些较短的文件名长文件名。为了确保短文件名排在前面,NATSORTFILES从文件扩展名拆分文件名并分别排序:

G = {“test_ccc.m”“test-aaa.m”“test.m”“test.bbb.m”};排序(G)% '-'排序在'。'的作用(G)% '-'排序在'。'natsortfiles (G)%短的不久
ans = ' test-aaa。“test.bbb。“测试。”米“test_ccc.m”ans = ' test-aaa。“test.bbb。“测试。”米“test_ccc.m”ans = '测试。“test-aaa。“test.bbb。”米“test_ccc.m”

解释:文件名

NATSORTFILES使用自然排序对分割的名称部分进行排序,以便考虑文件名中的数字值:

H = {“test2.m”“test10-old.m”“test.m”“test10.m”“test1.m”};排序(H)号码顺序错误。的作用(H)数字顺序正确,但先长后短。natsortfiles (H)%正确的数字顺序和短不久。
ans = '测试。“test1。”米“test10-old.m”“test10.m”“test2.m”一个ns = 'test1.m' 'test2.m' 'test10-old.m' 'test10.m' 'test.m' ans = 'test.m' 'test1.m' 'test2.m' 'test10.m' 'test10-old.m'

解释:Filepaths

出于几乎相同的原因,文件路径在每个文件路径分隔符处被分割(注意对于pc两者都是如此)' / '“\”被认为是路径分隔符,仅适用于Linux和Mac' / '是),目录结构的每一层都是分开排序的:

I = {“A2-old / test.m”“A10 / test.m”“A2 / test.m”“AXarchive.zip”“A1 / test.m”};(我)%错误的数字顺序,'-'排序在'/'之前。的作用(我)数字顺序正确,但先长后短。natsortfiles(我)%正确的数字顺序和短不久。
ans = ' A1 /测试。“A10 /测试。“A2-old /测试。“A2 /测试。' 'A1/test. zip'“A2-old /测试。“A2 /测试。“A10 /测试。' 'A1/test. zip'“A2 /测试。“A2-old /测试。“A10 /测试。”米“AXarchive.zip”

正则表达式:十进制数字,电子符号,+/-符号

NATSORTFILES可以对数字匹配进行定制,以检测具有小数、e符号、+/-符号、二进制/十六进制或其他必需特征的数字。使用适当的正则表达式指定数字匹配,请参见的作用详情和例子。

J = {“1.23 v.csv”“1 v.csv”“+ 1. csv”010 v.csv“1.200 v.csv”};natsortfiles (J)%默认只匹配整数。natsortfiles (J,“[- +]? \ d + \。\ d *’
ans = ' 1.23 v.csv ' ' 1.200 v.csv ' ' 010 v.csv + 1. csv”“1”v.csv ans = ' 1 v.csv ' ' + 1. csv”“1.200 v.csv”“1.23 v.csv”“010 v.csv”

奖励:交互式正则表达式工具

正则表达式功能强大且紧凑,但正确使用它们并不总是容易的。一个帮助是下载我的互动工具IREGEXP,它可以让您快速尝试不同的正则表达式并查看所有正则表达式的输出显示和更新。