读取文本文件作为数字(表)

时间:2013-05-11 11:58:25

标签: string matlab numeric matlab-guide

我正在使用MATLAB GUI。

所以,我希望用户从他们的计算机上浏览他们自己的表。当他们浏览时,完整路径将写在静态文本上,并且表格(他们浏览)将会出现。

问题是,文件;它读取字符串,而不是数字。

那么,如何将文本文件数据读取为数字而不是字符串?我需要写什么脚本?

2 个答案:

答案 0 :(得分:2)

如果你有一个txt文件,你可以使用命令textscan(...)在单元格中导入文件txt:

cell = textscan(fopen('file.txt'),'options');

'cell'是单元格,'file.txt'是txt文件名。 'options'是一个字符串,用于定义导入格式('%s'导入字符串,'%f'导入浮动,...)和分隔符类型。以这种方式导入的所有数据都存储在单元格中,并且要加入单元格的第n个元素,必须使用括号{}(例如单元格{1}加入第一个元素)。

如果'file.txt'包含以下值:

1.2 2.3

3.4 4.5

使用以下代码

cell = textscan(fopen('file.txt'), '%f');
var = cell{1};
变量'var'中的

存储了数字,但它是一个列向量而不是矩阵/表,必须重新排序:var = [1.2; 2.3; 3.4; 4.5]。

使用以下代码(它有点复杂,但它不需要有关表维度的先验知识来重新排序数据):

cell = textscan(fopen('file.txt'), '%s', 'delimiter', '\n');
var = cell{1};

'var'是一个单元格数组,每个元素都包含一个字符串格式的文档行(由于分隔符)(var {1} ='1.2 2.3',var {2} ='3.4 4.5') 。如果N是'var'的长度,从1到N的for循环,您可以加入各种字符串,转换它们并以这种方式将它们存储在矩阵中:

M = length(strread(var{1}, '%f')); %column number
N = length(var); %row number
a = zeros(N,M); %inizialization
for n = 1:N
a(n,:) = strread(var{n}, '%f');
end*

现在'a'是一个数字矩阵:a = [1.2,2.3; 3.4,4.5]用于分析和绘图。

答案 1 :(得分:1)

快速执行此操作的方法是使用textscan功能:

dataRead = textscan(fid, format);

但是,您必须指定用于读取文件的格式。如果您正在阅读整数,请使用'%d',如果您正在阅读浮点数,请使用'%f'(请参阅此处有关格式及其用法的更多信息:http://www.mathworks.com/help/matlab/ref/textscan.html#inputarg_formatSpec)。 因此,如果文本文件有100个以空格分隔的整数值,则必须使用:

fid = fopen('file.txt', 'r');
dataRead = textscan(fid, '%d');
fclose(fid);

然后,dataRead将是一个包含100x1矩阵且读取值的1x1单元格。