【问题标题】:Get \t (tab) seperated chars into a new column vector将 \t (tab) 分隔的字符放入一个新的列向量中
【发布时间】:2014-03-23 13:53:57
【问题描述】:

背景

我有一个十六进制值的 char 数组,如下所示:

FF23    0008    FF58    00DE    00FC    0008
FF23    0008    FF58    00DF    0012    000C
FF23    0008    FF58    00DD    00F9    000C
FF23    0008    FF58    00DB    00F1    000B
....etc....

那里的分隔符是\t(制表符)。我设法按摩 char 数组以使换行符成为新行(即size(string) = numOfRows, 1)。

我需要将它们放入自己的 4 列中,以便我可以绘制这些值。是的,hex2dec 是我的目标,但它现在不会处理选项卡。

问题

鉴于上述 char 数组,我如何将每组 4 个字符放入各自的列中?如果需要,我可以取出制表符并使用不同的分隔符。

我的失败尝试

xlsread('C:\somefile', charArray)

这对我不起作用,因为我的计算机上没有 Office,只有 LibreOffice (http://tinyurl.com/kecqeg6)。

我试过了:

reshape(charArray, length(charArray), 6)

但这会返回:

??? Error using ==> reshape
To RESHAPE the number of elements must not change.

这我明白,但来吧。 reshape() 有点暗示你可以做这些事情。

感谢您的所有帮助。我很感激。

编辑

之前我以为我有一个字符串向量,而不是一个字符数组。我已经更新了帖子以反映这一点。再次感谢。

【问题讨论】:

  • tinyurl.com URL链接的图片是怎么回事?
  • 幽默。我一直受到人们的抨击,因为他们不只是购买 Office 并坚持使用 LibreOffice。这是为了让谈话继续进行。显然,我失败了。
  • 您是否尝试过使用C = strsplit(str,'\t')?在每一行?然后访问一列是微不足道的。
  • 是的,我将在上面编辑我的帖子以反映我的新理解,但是当我这样做时 class(strVector(1,1)) 我得到 char 而不是 string 所以 strsplit() 不知道该怎么做用它。谢谢你的想法
  • Jigg,我已经尝试过 strsplit() 方法,不幸的是,我没有包含该方法的 MatLab 版本。谢谢你。还有其他想法吗?

标签: string matlab vector tabs reshape


【解决方案1】:

这是你想要的吗?

A = ['FF23 0008 FF58 00DE 00FC 0008'
     'FF23 0008 FF58 00DF 0012 000C']; %// example data (char array)

B = regexprep(mat2cell(A,ones(1,size(A,1)),size(A,2)),'\s',''); %// get rid of \t
B = vertcat(B{:}) - '0'; %// turn B into a numeric matrix...
ind = B>=17;
B(ind) = B(ind) - 7; %// ... with values 0--15
B = reshape(permute(B,[2 3 1]),4,[],size(A,1)); %// reshape to make groups of 4
result = squeeze(sum(bsxfun(@times, B, 16.^(3:-1:0).'))).' %// convert each group

A 为例,这给出了

result =
       65315           8       65368         222         252           8
       65315           8       65368         223          18          12

【讨论】:

  • 是的,这很棒!非常感谢!这会给我一个很好的开始。
【解决方案2】:

将文本文件转换为 char 数组是不必要的步骤。您可以直接从文本文件中工作。

fid = fopen('test.txt','r');    %read text file
C = textscan(fid,'%s%s%s%s%s%s', 'delimiter',' \t','MultipleDelimsAsOne',1);   % 6 cols of chars
fclose(fid)

D = hex2dec(vertcat(C{:}));     % convert cells in strings, concatenate, then convert in doubles
D = reshape(D, numel(D)/6, 6);  % reshape the matrix

【讨论】:

  • 如果我有一个像这样的文本文件,那就太好了。我从传感器获得的实际数据只是一大串没有分隔符的十六进制值。不过谢谢你!我想我可以将我的细胞向量读入一个临时文件,然后使用你的方法。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-08
  • 2022-11-18
  • 1970-01-01
  • 2021-02-28
  • 1970-01-01
  • 1970-01-01
  • 2018-05-18
相关资源
最近更新 更多