正确设置文本可以返回空单元格数组

时间:2015-03-01 18:48:56

标签: matlab

我有一个.txt文件格式为:

123123  4
123234  4
515511  4
157888  4
854634  4
345661  4

我希望能够将每个列导入另一个变量。我试过了:

data = textscan(fid, '%f %*[^\n]','HeaderLines',0);   
test = textscan(fid, '%*f %f %*[^\n]','HeaderLines',0);

成功导入第一列数字,但test会返回[]

造成这种情况的原因是什么?

1 个答案:

答案 0 :(得分:3)

目前您正在扫描整个文件两次 - 这不是一个好主意。


那么importing一个变量中的所有内容如何然后将其拆分?

DATA = importdata('myFile.txt',' ',0)

data = DATA(:,1);
test = DATA(:,2);

clear DATA

请注意,如果您有标题,则代码会略有不同:

headerlines = 5
DATA = importdata('myData.txt',' ',headerlines)

data = DATA.data(:,1);
test = DATA.data(:,2);

如果空白分隔符' '无效,请尝试制表符'/t'


您的方法无效的原因是文件ID fid。想象一下fid是一包美味的奶酪。通过文本扫描读取的文件的每一行就像你吃了一片奶酪一样。所以在你的命令之后:

data = textscan(fid, '%f %*[^\n]','HeaderLines',0); 

没有奶酪了。你的第二个textscan电话没有任何奶酪。为了使它工作,你需要打开另一个类似的奶酪包:

fid = fopen('myData.txt');
data = textscan(fid, '%f %*f %*[^\n]','HeaderLines',0);   
fclose(fid)

fid = fopen('myData.txt');
test = textscan(fid, '%*f %f %*[^\n]','HeaderLines',0);
fclose(fid)

但我告诉你,你会变胖。但如果你真的想吃奶酪,请按照以下步骤进行:

fid = fopen('myData.txt');
DATA = textscan(fid, '%f %f %*[^\n]','HeaderLines',0);   
fclose(fid)

data = DATA(1);
test = DATA(2);