我有一个文本文件,但不幸的是它的格式很差,但是我想将文本文件的内容读成矩阵,但我不知道该怎么做。
当尝试使用fscanf
,textscan
,textread
时,其余只是将所有内容复制到一个单元格中,但我不希望这样。
这个内容如何:所以我想只读取小数而不是绝对数字。有人可以帮助我。
1 : 13.27 ; 3 : 20.68 ; 6 : 8.271 ; 7 : 3.308 ; 8 : 8.328 ;
9 : 6.655 ; 10 : 16.58 ; 11 : 9.925 ; 12 : 12.41 ; 13 : 4.135 ;
14 : 9.925 ; 15 : 11.58 ; 16 : 10.87 ; 17 : 1.654 ; 18 : 4.962 ;
19 : 6.655 ; 22 : 10.98 ; 23 : 24.25 ; 24 : 47.33 ; 25 : 11.6 ;
26 : 9.925 ; 27 : 5.809 ; 28 : 5.001 ; 29 : 6.617 ; 30 : 7.577 ;
31 : 9.155 ; 32 : 7.444 ; 33 : 28.58 ; 34 : 9.155 ; 35 : 35.83 ;
答案 0 :(得分:4)
只使用文本扫描并忽略你不需要的东西,比如数字和:给你一个简单的解决方案:
fid = fopen('test.txt', 'rt');
data = textscan(fid, '%*u %*1s %f', 'Delimiter', ';');
fclose(fid);
将test.txt更改为您的文件名。 数据是包含双打的单元格。
>> data{:}
ans =
13.2700
20.6800
8.2710
3.3080
8.3280
6.6550
16.5800
9.9250
12.4100
4.1350
9.9250
11.5800
10.8700
1.6540
4.9620
6.6550
10.9800
24.2500
47.3300
11.6000
9.9250
5.8090
5.0010
6.6170
7.5770
9.1550
7.4440
28.5800
9.1550
35.8300
答案 1 :(得分:2)
我假设冒号(:)分隔行中的值,分号(;)分隔行。有了这个假设,以下函数应该将您的数据读入MATLAB矩阵
function dat = readData(filename)
% FUNCTION dat = readData(filename)
% Reads data from a nonstandard formatted file, filename
% INPUTS:
% filename: Full path to data file with the following format
% 1 : 2; 3 : 4
% where the : separates values in a row and ; separates rows
% open the file for reading
fid = fopen(filename);
ii=0; % row index
while ~feof(fid) % loop until we find the end of the file
str = fgetl(fid); % get a line of text
while 1
% split the string into its component parts
% assume that values are split with colon ":" and
% rows are identified with a
% semicolon ";".
%
% split at the first row using strtok
[rowStr rem]=strtok(str,';');
% split rowStr using colon
[str1,str2]=strtok(rowStr,':');
% get rid of the colon in str2
str2 = strrep(str2,':',' ');
str1 =strtrim(str1);
str2 =strtrim(str2);
% store data if we found any
if ~isempty(str1)&& ~ isempty(str2)
ii=ii+1; % increment row index
dat(ii,:) = [str2double(str1) str2double(str2)];
end
if isempty(rem), break; end
str = rem(2:end);
end
end
fclose(fid);
你可以使用round,floor,ceil函数来提取'十进制值'。
答案 2 :(得分:1)
概念:
拿弦。
改变:和;带空格和\ n(返回)带;
将字符串分配给变量,变量应该成为矩阵。
使用双循环更改每个元素的值
var(i,j)=floor(var(i,j)) - var(i,j);
你在这里(如果我没有误解你)。