[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?
答案 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);