首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Textscan和Regexp单元数据布局

Textscan和Regexp单元数据布局
EN

Stack Overflow用户
提问于 2019-10-04 08:29:07
回答 1查看 71关注 0票数 1

我正在尝试使用一些遗留的matlab代码来实现一些逻辑。我认为最简单的事情就是让数据看起来和代码期望的一样。

我正在从一个CSV文件中读取相关数据,这非常简单--但是ID的格式从一个简单的数字变成了YY,ZZZZ形式的ID。

例如,“以前的”CSV数据如下所示:

代码语言:javascript
复制
1,Simple,Data
2,More,Data-Dash-Data
3,Even,More
4,Really,More

“新的”CSV数据如下所示:

代码语言:javascript
复制
[01,0001],Simple,Data
[02,1001],More,Data-Dash-Data
[03,9876],Even,More
[04,1234],Really,More

以前,要读入数据,需要使用以下逻辑:

代码语言:javascript
复制
 fid = fopen(fileName);
 data = textscan(fid,'%s%s%s%*s','Delimiter',',');

当对“以前的”CSV数据执行此操作时,它返回的数据如下所示:

代码语言:javascript
复制
data =
  1×3 cell array
    {4×1 cell}    {4×1 cell}    {4×1 cell} 

然后,单元格看起来像:

代码语言:javascript
复制
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函数:

代码语言:javascript
复制
fid = fopen(fileName);
rawData = textscan(fid,'%s','Delimiter','\n');
data = regexp(rawData{1},'[ \-\/\w]*([\[][^\)\]]*[\]])?', 'match')

然后,在读入数据后,它会给出如下格式的数据:

代码语言:javascript
复制
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'

因此,您可以看到它包含正确的数据--但是数据的布局不同,这破坏了遗留代码。所以我的问题是,如何让“新”数据像这样布局,因为它是从“文本扫描”逻辑中出来的:

代码语言:javascript
复制
data =
  1×3 cell array
    {4×1 cell}    {4×1 cell}    {4×1 cell}  
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-06 22:15:22

您可以使用fileread直接读入原始文件。然后,您可以使用regex,它可以在逗号上拆分,后面不跟数字,也可以在回车上拆分。

代码语言:javascript
复制
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}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58228425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档