参考:
https://blog.csdn.net/yf210yf/article/details/42421539
https://jingyan.baidu.com/article/8cdccae92fad16315413cdd8.html
字符串分割
在对文件夹进行操作的时候,有时候我们不免要对路径进行分割,已提取具体某一段的路径字符串。
在这里有2中方法,以下分别介绍。
正则表达式方法regexp
1)借助正则表达式函数regexp的split模式。
其基本语法为:
S = regexp(str, char, ‘split’),str为要进行分割的字符串,char指明以何种字符串进行分割,字符串split就表示split模式。
值得注意的是,分割之后的结果是一个cell数组。也就是说结果的每个单元都是cell类型,所以如果要输出某单元字符串时,还需要对要使用的单元进行强制转换。图片是代码的结果。
以下的代码要实现的需求是,提取出路径的最后一部分的字符串,然后以备后续功能的使用
datasetCur = 'remote/result_4_bicu_2_ori'
res = regexp(datasetCur , '/', 'split');
str1 = char(str1(end)); % str1 = 'result_4_bicu_2_ori'
strsplit函数
2)直接使用字符串分割函数strsplit。
其基本语法为 str = strsplit(str,char);默认按照空白字符分割。
实现1)中相同的目的的代码如下:
datasetCur =
an = strsplit(datasetCur,
str2 = char(an(end)); % str2 =
字符串合成
既然有路径的分割就有路径的合成。这里也稍微提一下我所看到的路径合成的方法。
使用普通的方法‘[]’ 和fullfile函数
比如我要读取上面文件夹下的图像:img_100_SRF_4_LR.png,而这个文件夹所有的文件格式都是img_XXX_SRF_4_LR.png。“XXX”表示图像的编号,如果我们使用for循环来一张一张的读取图像并处理,代码如下:
for imgID = 1:numOfImages
imgName = ['img_', num2str(imgID, '%03d'), '_SRF_4_LR.png'];
img = imread(imgName);
... % 你要进行的操作
这里再补充一下,使用“[]”合成路径,是不带有文件分隔符’/’的,之所以讲这个小区别,是因为fullfile函数会自动填补上文件分割符。这一点也决定了2者使用环境下的不同。这里如果是合成路径就使用fullfile函数,比较方便,如要合成’data/my/result’的目标路径。而要是访问文件夹内的图像之类的,由于不需要文件分隔符,所以使用[]比较方便
path = fullfile('data','my','result') % path = 'data\my\result';
str = ['data','my','result']; % str = 'datamyresult'
参考: https://blog.csdn.net/yf210yf/article/details/42421539 https://jingyan.baidu.com/article/8cdccae92fad16315413cdd8.html字符串分割在对文件夹进行操作的时候,有时候我们不免要对路径进行分割,已提取具体某一段的路径字符串。 在这里有2中方法,以下分别介绍。正...
分割提取路径path中的各部分(所属文件夹路径、文件名和后缀扩展名)
filepath = 'a/b/c/name.pgm';
[pathstr, name, ext] = fileparts(filepath); # Matlab R2021a
[pathstr, name, ext, versn] = fileparts(filepath); # 比较老的版本
# 效果:
pathstr = 'a/b/c'; # 所属文件夹的路径
name = 'name'; # 文件名
ext = '.pgm'; #
caseFileName = 'E:\test\test.txt'
nameList = strsplit(caseFileName,'\')
nameTmp = char(nameList(length(nameList)))%分割之后是cell类型,需要转换为char类型
fileName = nameTmp(1:length(nameTmp)-4) % file...
作用:将字符合并成路径,会自动添加“/”;相比于[]合并字符生成路径的优点就是不需要手动输入“/”或者“\”。我们知道Linux下面和window下面路径中的间隔是不同的,如果使用[]需要输入“/”或者“\”,会让代码的移植性变差。
testpath = 'home/test';
test = fullfile(testpath,'test.png');
C = strsplit(str,delimiter)
C = strsplit(str,delimiter,Name,Value)
[C,matches] = strsplit(___)
C = strsplit(str) 在空白处将 str 拆分为 C。空白字符等效于集合 {’ ‘,’\f’,’\n’,’\r’,’\t’,’\
在MATLAB中,可以使用字符数组或字符串来存储和操作文本数据。字符数组是一维数组,每个元素可以是一个字符,而字符串是MATLAB中的数据类型,可以存储一段文本。下面是一些示例来说明如何在MATLAB中处理数组和字符串:
创建字符数组:
matlab
Copy code
arr = ['H', 'e', 'l', 'l', 'o'];
disp(arr); % 输出:Hello
在这个示例中,我们创建了一个字符数组 arr,它包含了单个字符,最终输出的结果是字符串 "Hello"。
使用字符串数据类型:
matlab
Copy code
str = "Hello";
disp(str); % 输出:Hello
在这个示例中,我们使用字符串数据类型来创建变量 str,并赋值为字符串 "Hello"。字符串数据类型以双引号 " " 括起来。
字符串的拼接:
matlab
Copy code
str1 = "Hello";
str2 = "World";
result = str1 + " " + str2;
disp(result); % 输出:Hello World
一个简单的函数,它检查一个字符串并返回一个简单的目录列表; 不对子目录字符串进行有效性检查。
A = PATH_PARTS(S) 返回包含由系统文件分隔符分隔的子字符串的字符串元胞数组。
[A,B] = PATH_PARTS(S) 返回从输入字符串 S 解析出的目录字符串,其中 A 是字符串元胞数组,B 是一个结构体,其字段代表每个子目录。
[A,B,C] = PATH_PARTS(S) 返回根据元胞数组 A、结构 B 中的 S 确定的目录字符串,并作为长度相等的字符串数组返回。
----- 请注意:FEX 上有许多有趣的提交,它们提供了更复杂的结果和处理目录的选项(见下文)。
#28442 - 目录到单元格#1570 - 目录#1492 - 子目录#3226 - 递归目录列表增强型 RDIR #12180 - 文件系列#28249 - 获取完整路径
文件数据导入和导出的方式有很多种,本文主要介绍一种比较万能的方法readtable和writetable。主体包含:
1.文件路径相关的关键字
2.文件的读取与写入(readtable与writetable)
3.MATLAB 中表格变量的使用。
可以使用MATLAB内置的`arithenco`和`arithdeco`函数来实现算术编码和解码。下面是一个简单的例子,演示如何使用算术编码对一串字符进行编码和解码。
假设我们要编码的字符为“hello world”,我们可以先统计字符出现的频率,然后使用算术编码对其进行压缩。具体实现如下:
```matlab
str = 'hello world'; % 要编码的字符串
counts = histcounts(str, unique(str)); % 统计字符出现的频率
p = counts/sum(counts); % 计算每个字符出现的概率
symbols = unique(str); % 确定字符集
code = arithenco(str, p, symbols); % 使用算术编码进行压缩
这里我们使用`histcounts`函数统计每个字符出现的频率,并计算每个字符出现的概率。然后使用`unique`函数确定字符集。最后使用`arithenco`函数对字符串进行压缩,得到压缩后的编码。
要解码压缩后的编码,我们可以使用算术解码将其还原为字符串。具体实现如下:
```matlab
str2 = arithdeco(code, p, symbols); % 使用算术解码进行解压
这里我们使用`arithdeco`函数对压缩后的编码进行解压,得到还原后的字符串。
注意:算术编解码可以实现较高的压缩率,但由于计算复杂度较高,可能会导致较慢的运行速度。因此在实际应用中需要根据具体情况进行权衡和选择。