【问题标题】:Reading Text File As Numbers (Table)将文本文件读取为数字(表格)
【发布时间】:2013-05-11 11:58:25
【问题描述】:

我正在使用 MATLAB GUI。

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

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

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

【问题讨论】:

  • 文件格式是什么?你检查过dlmreadcsvread 吗?
  • 是*.txt,你知道吗?
  • 你看过textscan中关于格式的描述吗?

标签: string matlab numeric matlab-guide


【解决方案1】:

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

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

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

【讨论】:

  • 别忘了用fclose关闭文件。
【解决方案2】:

一个快速的方法是使用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 将是一个 1x1 单元格,其中包含一个 100x1 矩阵,其中读取的值。

【讨论】:

  • 非常感谢您的回答!
猜你喜欢
  • 2021-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-17
  • 1970-01-01
  • 1970-01-01
  • 2021-06-06
相关资源
最近更新 更多