【MATLAB】 빈 셀이있는 CSV 파일 처리

9906 단어 초보자Excelmatlab

소개



지난번CSV 파일에 계산 셀을 추가하고 excel 파일로 저장하는 것을 구현했습니다.

이전에 사용한 CSV 파일은 첫 번째 줄에 데이터 레이블이 있고 각 열에 같은 유형의 데이터가 늘어선다는 매우 깨끗한 만들기가 되어 있지만, 업무에서 실제로 취급하는 파일은 더 엉망이 되고 있다 .
자세하게 설명하면 다음과 같은 느낌.

1

같은 데이터가 가로로 나란히 있고 excel에서 열었을 때의 '''빛나는 ''을 중시하고 5 행째에 빈 행이나 G 열에 빈 열이 들어가거나 한다.

데이터가 옆에 늘어서 있는 점에 대해서는 matlab로 처리하는데 있어서 특별히 문제는 없었지만, 빈 셀이 들어가 있으면 그대로는 출력할 수 없었으므로, 회피 방법을 간단히 정리한다.
이번은 에러가 되어 깨끗해2가 되어 있는 곳으로부터 순서대로 써 가기 때문에, 결론만 보고 싶은 경우는 스킵 해 주세요.

빈 셀을 그대로 출력해 봅니다


% ファイルを読み取ってcellに格納
path = 'C:\Users\dejiko';
file = '身長体重_空白セルあり.csv';
filepath = fullfile(path, file);
T = readcell(filepath,'DatetimeType','text');

% データ内容は変更せずにとりあえずそのまま出力する
Tout = T;

% ファイルに書き込む
[path, file] = fileparts(filepath);
newFile = sprintf('%s_matlab.xlsx', file);
outputFilePath = fullfile(path, newFile);
writecell(Tout, outputFilePath);

결과



실행하려고하면 다음과 같은 오류가 발생하여 종료되었습니다.


오류: writecell (line 119)
'missing'형식의 cell 요소는 지원되지 않습니다. 쓰기 전에 요소를 숫자, 논리, 문자열, datetime, duration 또는 categorical
로 변환하십시오.

3.

missing의 함정



변수 T의 내용을 matlab로 표시해 보면 다음과 같이 되었다. 빈 셀은 missing 형식으로 저장되는 것 같고 출력 할 때 이것을 무언가로 변환해야합니다.


missing 처리


missing 부분을 빈 char로 대체하는 프로세스를 추가합니다.

구현


% missingを判定
missingCell = cellfun(@ismissing, T, 'UniformOutput',false);
% maskをcell2matしてlogical配列にしたいが,
% char配列のセルについては{1×N(文字数) logical}になっていて,そのままではcell2matできない
% {1×N logical}となっている部分を抽出して{1×1 logical}に置き換える
len = cellfun(@length, missingCell, 'UniformOutput',false);
len = cell2mat(len);
lenMask = len ~= 1;
missingCell(lenMask) = {false};
% 全セルが{1×1 logical}になったのでcell2mat出来る
mask = cell2mat(missingCell);

Tout = T;
% missing部分を空文字に置き換える
Tout(mask) = {''};

해설



먼저 ismissing는 각 셀이 missing인지 여부를 결정합니다.
missingCell = cellfun(@ismissing, T, 'UniformOutput',false);

이하 ismissing의 결과를 나타낸다.
문자열의 부분이 {1×N logical}로되어 있으며, 그대로는 cell2mat를 할 수 없습니다.


다음으로 {1×N logical}가되는 부분을 추출하기 위해 length를 적용한다.
len = cellfun(@length, missingCell, 'UniformOutput',false);
len = cell2mat(len);
lenMask = len ~= 1;

그런 다음 {1×N logical} 부분을 {false}로 바꿉니다.
missingCell(lenMask) = {false};

이것이 모두 {1×1 logical}가되었으므로 cell2mat하여 마스크를 만들고 원래 셀에 마스크를 적용하면 끝입니다.


요약



빈 셀을 고려한 excel 파일의 입출력은 matlab로 구현되었다.
계속해서 excel와의 화해를 완수해 나간다.



htps : // 그럼.ぃきぺぢ아. 오 rg/우키/%에 3% 81% 8에 % 에 3% 81% 에 1% 에 3% 81% 93% 에 3% 81% BC% 에 3% 83% 에 B% 에 3% 83% BC% 에 3% 83% 84% 에 3% 82% BF% 에 3% 83% 에 B% 에 3% 83% 88 

htps //w w. 니코 ゔ에서. jp/watch/sm37510647 

https://www.google.com/search?q=%E3%81%AF%E3%81%84%E3%81%AF%E3%81%84%E5%87%9B%E4%B8%96 %E3%81%8C%E6%82%AA%E3%81%86%E3%81%94%E3%81%96%E3%81%84%E3%81%BE%E3%81%97%E3 %81%9F 

좋은 웹페이지 즐겨찾기