2017-09-12 1 views
2

는 입력 셀이 있다고 가정 :MATLAB : 다른 구분 기호 번호의 셀 배열을 분할하는 방법은 무엇입니까?

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') 반환 오류가 구분 기호의 다른 번호를 포함하고 있습니다.

+2

셀의 데이터 청크가 단일 표 (\ t) 또는 가변 개수의 공백으로 구분되어 있습니까? 입력 셀 배열의 출처는 데이터를 가져 와서 원하는 결과를 얻을 수있는 경우 일 수 있습니다. – Gryphon

+0

@ 그리폰 그들은 이름 사이에 하나의 공백이있는 마지막 표를 제외하고는 단일 표로 구분됩니다. 실제로는 단일 공백을 없애고 '\ t' 만 분리해야합니다. 따라서 'x'와 'y'사이에 하나의 공백이있을 때마다 'x y'와 같이 셀에 하나의 항목을 만들어야합니다. – fhm

+1

'strsplit'은 문자열이기 때문에 여기에서 작동 할 수 있습니다. –

답변

5

당신은 split을 사용할 수 있습니다,하지만 당신은 cell array containing character vectors 또는 strings를 포함하는 cell array을 (나는 그것이 very confusing있어, 알고)가 있는지 여부에 따라 달라집니다 :

당신의 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"] 

당신은 문자열의 셀 배열을 가지고 있고, 당신이 필요 탭에서 분리 전에 문자열이별로 배열 한 셀을 연결하는 :

str = split([input{:}].', char(9)) 

str = 

    2×3 string array 

    "82.3" "4.3"  "John"  
    "4.2"  "0.0001" "Tim Taylor" 


ASCII 탭 문자를 지정하려면 char(9)을 사용해야하고 각 경우의 출력은 2x3 문자열 배열임을 유의하십시오.

+0

간단하고 완벽합니다. 대답! 함수'split'은 상대적으로 새로운 함수이며 초기 matlab을위한 코드를 만들고 싶다면 이것을 고려할 수 있습니다. –

1

는 textscan

일부 파일 가져 오기 기능, 즉와 strsplit

out=cellfun(@(x) strsplit(x,'\t'), inp,'un',0); out=cat(1,out{:}) 
  • %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']} 
    
    1. 이 @Ander Biguri가 제안한 것처럼 그렇게하는 방법은 여러 가지입니다

      %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{:}) 
      
  • 1

    이 아름다운 아니지만, 그것은 작업을 수행합니다

    clear output % make sure not exist 
    for i = 1:size(input,1) 
        output(i,:) = cellstr(regexp(input{i}, '\t', 'split')); 
    end 
    
    +1

    https://www.mathworks.com/help/matlab/matlab_prog/preallocating-arrays.html을 참조하십시오. –

    관련 문제