我正在尝试使用一些遗留的matlab代码来实现一些逻辑。我认为最简单的事情就是让数据看起来和代码期望的一样。
我正在从一个CSV文件中读取相关数据,这非常简单--但是ID的格式从一个简单的数字变成了YY,ZZZZ形式的ID。
例如,“以前的”CSV数据如下所示:
1,Simple,Data
2,More,Data-Dash-Data
3,Even,More
4,Really,More“新的”CSV数据如下所示:
[01,0001],Simple,Data
[02,1001],More,Data-Dash-Data
[03,9876],Even,More
[04,1234],Really,More以前,要读入数据,需要使用以下逻辑:
fid = fopen(fileName);
data = textscan(fid,'%s%s%s%*s','Delimiter',',');当对“以前的”CSV数据执行此操作时,它返回的数据如下所示:
data =
1×3 cell array
{4×1 cell} {4×1 cell} {4×1 cell} 然后,单元格看起来像:
K>> data{:}
ans =
4×1 cell array
'1'
'2'
'3'
'4'
ans =
4×1 cell array
'Simple'
'More'
'Even'
'Data'
ans =
4×1 cell array
'Data'
'Data-Dash-Data'
'More'
'Data'因此,为了处理表单YY,ZZZZ的ID,我必须修改'textscan‘逻辑来处理我们正在使用的新ID格式。为此,我使用了regexp函数:
fid = fopen(fileName);
rawData = textscan(fid,'%s','Delimiter','\n');
data = regexp(rawData{1},'[ \-\/\w]*([\[][^\)\]]*[\]])?', 'match')然后,在读入数据后,它会给出如下格式的数据:
K>> data
data =
4×1 cell array
{1×3 cell}
{1×3 cell}
{1×3 cell}
{1×3 cell}
K>> data{:}
ans =
1×3 cell array
'[01,0001]' 'Simple' 'Data'
ans =
1×3 cell array
'[02,1001]' 'More' 'Data-Dash-Data'
ans =
1×3 cell array
'[03,9876]' 'Even' 'More'
ans =
1×3 cell array
'[04,1234]' 'Really' 'More'因此,您可以看到它包含正确的数据--但是数据的布局不同,这破坏了遗留代码。所以我的问题是,如何让“新”数据像这样布局,因为它是从“文本扫描”逻辑中出来的:
data =
1×3 cell array
{4×1 cell} {4×1 cell} {4×1 cell} 发布于 2019-10-06 22:15:22
您可以使用fileread直接读入原始文件。然后,您可以使用regex,它可以在逗号上拆分,后面不跟数字,也可以在回车上拆分。
c = regexp(fileread(fileName),',(?!\d)|\r\n','split');
formattedData = {c(1:3:end)',c(2:3:end)',c(3:3:end)'};
>> formattedData
formattedData =
1×3 cell array
{4×1 cell} {4×1 cell} {4×1 cell}https://stackoverflow.com/questions/58228425
复制相似问题