读取一个txt文件到矩阵和单元格数组Matlab

时间:2014-03-05 15:58:04

标签: matlab

我有一个包含这些条目的txt文件,我想知道如何从第二列获取数值,直到矩阵中的最后一列和单元格数组中的第一列。

我已尝试使用导入数据和fscanf,但我不明白发生了什么。

CP6  7,2    -2,7     6,6 

P5  -5,8    -5,9     5,8

P6   5,8    -5,9     5,8

AF7 -5,0     7,2     3,6

AF8  5,0     7,2     3,6

FT7 -7,6     2,8     3,6

3 个答案:

答案 0 :(得分:1)

这可以根据您提供的文本样本为您提供所需的内容。

fileID = fopen('x.txt'); %open file x.txt
m=textscan(fileID,'%s %d ,%d %d ,%d %d ,%d');
fclose(fileID); %close file
col1 = m{1,1}; %get first column into cell array col1 
colRest = cell2mat(m(1,2:6)); %convert rest of columns into matrix colRest

查询textscan以获取有关阅读特殊格式数据的更多信息

答案 1 :(得分:0)

你试过xlsread吗?它创建了一个数字数组和两个非数字数组。

[N,T,R]=xlsread('yourfilename.txt')

但您的数据不是以逗号分隔的。它看起来像是使用逗号来表示小数点。这个数组有7列还是4列?因为我在美国,所以我假设你有配对坐标,逗号是一种分隔符,而空格是第二个。

所以这里是克鲁吉的东西,但它有效。这是一个丑陋的黑客,但它确实有效。

%housekeeping
clc

%get name of raw file
d=dir('*22202740*.txt')

%translate from comma-as-decimal to period-as-decimal
fid = fopen(d(1).name,'r')  %source
fid2= fopen('myout.txt','w+')  %sink

while 1
    tline = fgetl(fid);  %read
    if ~ischar(tline), break, end  %end loop
    fprintf(fid2,'%s\r\n',strrep(tline,',','.')) %write updated line to output
end

fclose(fid)
fclose(fid2)

%open, gulp, parse/store, close
fid3 = fopen('myout.txt','r');
C=textscan(fid3,'%s %f %f %f ');
fclose(fid3);

%measure waist size and height
[n,m]=size(C);
n=length(C{1});

%put in slightly more friendly form
temp=zeros(n,m);

for i=2:m
    t0=C{i};
    temp(:,i)=t0;
end

%write to excel
xlswrite('myout_22202740.xlsx',temp(:,2:end),['b1:' char(96+m) num2str(n)]);
xlswrite('myout_22202740.xlsx',C{1},['a1:a' num2str(n)])

%read from excel
[N,T,R]=xlsread('myout_22202740.xlsx')

如果您希望这些逗号是小数点,那么这是一个不同的问题。

答案 2 :(得分:0)

这个功能应该可以解决问题。它会读取您的文件并根据您的模式进行扫描。然后,将第一列放在单元格数组中,将其他列放在矩阵中。

function [ C1,A ] = scan_your_txt_file( filename )
  fid = fopen(filename,'rt');

  C = textscan(fid, '%s %d,%d %d,%d %d,%d');
  fclose(fid);

  C1 = C{1};
  A = cell2mat(C(2:size(C,2)));
end