Matlab中如何将文本文件每行字符串读取为独立数组元素
解决Matlab读取每行字符串到独立数组元素的问题
我完全懂你现在的困扰——明明文本文件里每行一个情绪字符串,结果读进来全揉成了一个长字符串塞在单个数组元素里,根本没法按单个情绪来处理对吧?咱们来调整下代码,轻松搞定这个问题。
方法1:用readlines(Matlab R2020b及以后版本,最简洁)
如果你的Matlab版本比较新,直接用readlines就完事了,它会自动把文件的每一行作为字符串数组的独立元素:
% 不需要手动打开文件也可以,readlines会自动处理 emotionArray = readlines('emotion_labels.txt');
要是你习惯手动管理文件句柄,也可以这么写:
emotionFile = fopen('emotion_labels.txt', 'r'); emotionArray = readlines(emotionFile); fclose(emotionFile);
方法2:用textread(兼容旧版本Matlab)
如果你的Matlab版本比较老,textread是个靠谱的选择,它会返回一个cell数组,每个元素对应文件的一行:
% %s表示读取字符串,textread会自动按行拆分 emotionArray = textread('emotion_labels.txt', '%s');
这个方法不需要手动打开和关闭文件,textread会帮你处理这些细节。
方法3:用fgetl循环读取(手动控制,适合需要额外处理的场景)
要是你需要在读取每行的时候做一些额外操作(比如过滤空行、清理空格),可以用fgetl逐行读取并构建数组:
emotionFile = fopen('emotion_labels.txt', 'r'); emotionArray = {}; % 初始化一个空的cell数组 currentLine = fgetl(emotionFile); % 循环读取直到文件结束(fgetl会返回-1表示到末尾) while ischar(currentLine) % 把当前行添加到数组末尾 emotionArray{end+1} = currentLine; currentLine = fgetl(emotionFile); end fclose(emotionFile);
为什么原来的代码会出错?
你之前的代码应该是用了类似fread的方式把整个文件的内容一次性读成了一个字符数组,没有按行拆分,所以所有字符串都连在一起了。上面的三种方法都是专门针对按行读取字符串设计的,完美解决这个问题。
内容的提问来源于stack exchange,提问作者user9704592
相关产品推荐
相关产品推荐

