Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在matlab中从某个字符串开始读取文本文件_Matlab - Fatal编程技术网

在matlab中从某个字符串开始读取文本文件

在matlab中从某个字符串开始读取文本文件,matlab,Matlab,我有一个以上格式的几行文本文件。如何开始从REFA读取文本文件并在matlab中仅存储2,5600?您可以从查找逗号开始。保存从第一个逗号到最后一个逗号的内容。下面的代码应该可以工作。但是,我不确定是否有非常大的文件 [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,5600?

您可以从查找逗号开始。保存从第一个逗号到最后一个逗号的内容。下面的代码应该可以工作。但是,我不确定是否有非常大的文件

[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,

使用正则表达式可以很容易地做到这一点。只需找到字符串中以
[
开头、以
]
结尾的所有部分,并将它们替换为空字符串或
'
。这是可以用的

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

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元素嵌套的单元格数组,但其中的每个单元格都是文本文件的一行。最后一行访问这个嵌套元素,并找到字符串中有空格的部分,该部分包含一个
[
字符,内部有一堆字符,然后以
]
字符结尾,然后再加上一些空格。我们找到文本的这些部分,并用空字符串替换它们。这实际上只提供了您要查找的文本部分

通过将示例文本放在名为
text.txt
的文件中,我得到的结果如下:

fid = fopen('text.txt', 'r');
out = textscan(fid, '%s', 'delimiter', '\n');
out = regexprep(out{1}, '\s*\[.*\]\s*', '');
现在,如果您只想获得数值,可以使用索引:

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);

@Yaant3y-我添加了更多代码来获取数字。希望有帮助!谢谢@rayryeng,您的解决方案确实摆脱了[]。但我试图完成的是获得由该代码生成的输出
fileID=fopen('stack.txt');D=文本扫描(文件ID,'%s%u8%u8%u16','Delimiter',',');fclose(fileID);pkttype=D{2}(strcmp(D{1},'REFA');datalength=D{3}(strcmp(D{1},'REFA');REFA.ticks=D{4}(strcmp(D{1},'REFA'))这段代码只有在我手动编辑文件为REFA,2,5600,REFB,1,3,REFA,2,101200,REFB,1,6时才能正常工作,然后才能看到您的帮助。那么,我如何将您的代码与此结合以获得相同的输出呢?是的,它是有效的。我想从数据中删除“”,以便可以很好地绘制它。我会努力的,如果不行,我会回来的。Thanks@Yaant3y-慢慢来。我会在这里的。祝你好运我成功地删除了示例“2”中的“1”。但是我正在做的是运行这个代码
fid=fopen('Stack_Junk.txt','r');out=textscan(fid,'%s','delimiter','\n');out=regexprep(out{1},'\s*\[.\]\s*','';outpid=fopen('OutputFile.txt','wt');如果outpid<0错误(“文件创建失败”);结束写入(输出ID,评估('disp(输出)');fclose(outpid)然后在新文件中手动搜索和替换。
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);