使用字符和数字将制表符分隔文件导入MATLAB

时间:2016-06-29 14:33:48

标签: matlab csv

我正在尝试导入使用包含四列的Fortran程序创建的文件:原子符号,X位置,Y位置,Z位置。以下是输入文件的示例:

Zn               0.00000000000       0.00000000000       0.00000000000
Zn               0.00000000000       0.00000000000       0.25000000000
Zn               0.00000000000       0.00000000000       0.50000000000
Zn               0.00000000000       0.00000000000       0.75000000000
Zn               0.00000000000       0.05000000000       0.00000000000
Zn               0.00000000000       0.05000000000       0.25000000000
Zn               0.00000000000       0.05000000000       0.50000000000
Zn               0.00000000000       0.05000000000       0.75000000000

现在,如果我在excel中导入它并导出为CSV文件然后使用csvread(filename),则会产生错误,因为第一列有字符输入。 (我确信有一种方法可以在没有这个中间步骤的情况下直接导入制表符分隔文件,但我一直在使用这种方法。)

我尝试过的事情:

  1. 在导入MATLAB之前删除第一列。这个问题是我将处理具有多种原子类型的化合物,我希望能够跟踪它们。
  2. 我知道我可以使用double(变量)和char(变量)将字符转换为数字数组,但在将第一列更改为数字数组之前,我仍然需要能够导入文件。
  3. 我感谢任何建议。

2 个答案:

答案 0 :(得分:0)

你可以试试这个

fid = fopen('test.dat');
%one string and 3 numbers
format= '%s %f %f %f';
C = textscan(fid);
fclose(fid);
% C is now [{8x1cell} {8x1double} {8x1double} {8x1double}]
%get the content from C(1) and make a cell array out of C(2:4)  
C= [C{:,1} num2cell([C{2:4}])];

答案 1 :(得分:0)

%%您可以使用readtable直接导入数据(它接受.txt,.dat或.csv和电子表格格式)。

%使用readtable

将数据导入为表格
   data = readtable('filename.txt', 'Delimiter', 'tab');

%%有关该功能的更多信息,请参阅http://www.mathworks.com/help/matlab/ref/readtable.html

%%有关表格的详细信息,请参阅http://www.mathworks.com/help/matlab/tables.html