MATLAB:如何拆分不同分隔符数字的元胞数组?
MATLAB: how to split cell arrays of different delimiter numbers?
假设有一个输入单元格:
input=
"82.3 4.3 John"
"4.2 0.0001 Tim Taylor"
这是一个 2by1 元胞数组。我需要拆分它以获得一个 2by3 数组,例如:
"82.3" "4.3" "John"
"4.2" "0.0001" "Tim Taylor"
split(input)
或 split(input,'\t')
returns 错误,因为每行单元格包含不同数量的分隔符。
有几种方法可以做到这一点
%Never remembered how to correctly insert whitespace characters
inp = {['82.3' char(9) '4.3' char(9) 'John'];['4.2' char(9) '0.0001' char(9) 'Tim Taylor']}
正如@Ander Biguri 建议的那样,使用 strsplit
out=cellfun(@(x) strsplit(x,'\t'), inp,'un',0); out=cat(1,out{:})
带有一些文件导入功能,即带有文本扫描
%with on-the-fly type conversion
out = cellfun(@(x) textscan(x,'%f%f%s','delimiter','\t'), inp, 'un', 0); out = cat(1,out{:})
%keeping all values as strings
out = cellfun(@(x) textscan(x,'%s%s%s','delimiter','\t'), inp, 'un', 0); out = cat(1,out{:})
这不是很漂亮,但它完成了工作:
clear output % make sure not exist
for i = 1:size(input,1)
output(i,:) = cellstr(regexp(input{i}, '\t', 'split'));
end
您可以使用 split
, but it will differ depending on whether you have a cell array containing character vectors or a cell array containing strings (I know, it's ):
如果你的input
是这样显示的:
input =
2×1 cell array
'82.3 4.3 John'
'4.2 0.0001 Tim Taylor'
然后你有一个字符向量元胞数组,你可以像这样在选项卡处拆分:
str = split(input, char(9))
str =
2×3 string array
"82.3" "4.3" "John"
"4.2" "0.0001" "Tim Taylor"
如果您的 input
显示如下:
input =
2×1 cell array
["82.3 4.3 John" ]
["4.2 0.0001 Tim Taylor"]
那么您有一个字符串元胞数组,您需要在制表符处拆分之前将单元格连接成一个 2×1 字符串数组:
str = split([input{:}].', char(9))
str =
2×3 string array
"82.3" "4.3" "John"
"4.2" "0.0001" "Tim Taylor"
请注意,我必须使用 char(9)
来指定 ASCII 制表符,并且每种情况下的输出都是一个 2×3 的字符串数组。
假设有一个输入单元格:
input=
"82.3 4.3 John"
"4.2 0.0001 Tim Taylor"
这是一个 2by1 元胞数组。我需要拆分它以获得一个 2by3 数组,例如:
"82.3" "4.3" "John"
"4.2" "0.0001" "Tim Taylor"
split(input)
或 split(input,'\t')
returns 错误,因为每行单元格包含不同数量的分隔符。
有几种方法可以做到这一点
%Never remembered how to correctly insert whitespace characters
inp = {['82.3' char(9) '4.3' char(9) 'John'];['4.2' char(9) '0.0001' char(9) 'Tim Taylor']}
正如@Ander Biguri 建议的那样,使用 strsplit
out=cellfun(@(x) strsplit(x,'\t'), inp,'un',0); out=cat(1,out{:})
带有一些文件导入功能,即带有文本扫描
%with on-the-fly type conversion out = cellfun(@(x) textscan(x,'%f%f%s','delimiter','\t'), inp, 'un', 0); out = cat(1,out{:}) %keeping all values as strings out = cellfun(@(x) textscan(x,'%s%s%s','delimiter','\t'), inp, 'un', 0); out = cat(1,out{:})
这不是很漂亮,但它完成了工作:
clear output % make sure not exist
for i = 1:size(input,1)
output(i,:) = cellstr(regexp(input{i}, '\t', 'split'));
end
您可以使用 split
, but it will differ depending on whether you have a cell array containing character vectors or a cell array containing strings (I know, it's
如果你的input
是这样显示的:
input =
2×1 cell array
'82.3 4.3 John'
'4.2 0.0001 Tim Taylor'
然后你有一个字符向量元胞数组,你可以像这样在选项卡处拆分:
str = split(input, char(9))
str =
2×3 string array
"82.3" "4.3" "John"
"4.2" "0.0001" "Tim Taylor"
如果您的 input
显示如下:
input =
2×1 cell array
["82.3 4.3 John" ]
["4.2 0.0001 Tim Taylor"]
那么您有一个字符串元胞数组,您需要在制表符处拆分之前将单元格连接成一个 2×1 字符串数组:
str = split([input{:}].', char(9))
str =
2×3 string array
"82.3" "4.3" "John"
"4.2" "0.0001" "Tim Taylor"
请注意,我必须使用 char(9)
来指定 ASCII 制表符,并且每种情况下的输出都是一个 2×3 的字符串数组。