在matlab

时间:2015-05-14 21:26:02

标签: matlab

[11/01/15 - 17:50] REFA,2,5,600, 
[11/01/15 - 17:52] REFB,1,3,
[11/01/15 - 17:54] REFA,2,10,1200, 
[11/01/15 - 17:55] REFB,1,6,

我有一个上述格式的几行文本文件。如何从REFA开始阅读文本文件并在matlab中仅存储2,5,600?

2 个答案:

答案 0 :(得分:0)

您可以先找到逗号。将第一个逗号中的内容保存到最后一个逗号。以下代码应该有效。但是,我不确定非常大的文件。

readfin = fopen('myfile.txt','r');
lineno = 1;
% Read every line one by one
while(~feof(readfin))
   newline = fgets(readfin);
   index = find(newline == ',',1,'first');  % find first comma
   outdata = newline(index+1 : end-1);      % ignore first and last comma
   disp(outdata);                           % do whatever you need with your desired outdata here
end

答案 1 :(得分:0)

您可以使用正则表达式轻松完成此操作。只需找到以[开头并以]开头的字符串的所有部分,并将其替换为空字符串或''。这可以通过regexprep完成。

因此,首先读取整个文本文件,然后删除不需要的部分。假设您的文本文件位于名为text.txt的文件中,请执行以下操作:

fid = fopen('text.txt', 'r');
out = textscan(fid, '%s', 'delimiter', '\n');
out = regexprep(out{1}, '\s*\[.*\]\s*', '');

第一行代码会打开您的文件进行阅读。下一部分将文本的每一行读入一个单元格数组,其中输出是1个元素的嵌套单元格数组,但其中的每个单元格都是文本文件的一行。最后一行访问这个单独的嵌套元素,并找到字符串中有空格的部分,它带有[个字符,里面有一堆字符,然后以]字符结尾之后有些空白。我们找到文本的那些部分,并用空字符串替换它们。这实际上只为您提供了您要查找的文本部分。

将示例文本放在名为text.txt的文件中,这就是我得到的:

out = 

'REFA,2,5,600,'
'REFB,1,3,'
'REFA,2,10,1200,'
'REFB,1,6,'

现在,如果你只想获得数值,你可以使用索引:

out = cellfun(@(x) x(6:end-1), out, 'uni', 0);

现在,要使用此代码(在您的评论中),请尝试以下操作:

fileID = fopen('stack.txt'); 
D = textscan(fileID, '%s', 'delimiter', '\n'); 
fclose(fileID); 
D = regexprep(D{1}, '\s*\[.*\]\s*', '');
D = cellfun(@(x) x(6:end-1), D, 'uni', 0);

%// Extract out the numbers now
numbers = regexp(D, '(\d+)*', 'tokens');

%// Only look at lines that have three numbers
idx = cellfun(@numel, numbers) == 3;

%// Extract out just those lines
numbers_extract = numbers(idx);

%// Convert from string to numbers
REFA.pkttype = cellfun(@(x) x(1), numbers_extract);
REFA.datalength = cellfun(@(x) x(2), numbers_extract);
REFA.ticks = cellfun(@(x) x(3), numbers_extract);