각 레이블 사이에 특정 수의 선이있는 경우 파일을 읽고 해당 선을 반복하여 추출 할 수 있습니다. 각 레이블에 대해 strsplit() 으로 레이블을 추출하는 것이 간단합니다. 각 라벨 사이에 5 줄이 있다고 가정 해 봅시다.
uselessLines = 5;
% imports as a vertical matrix with each line from the file.
dataLabelsFile = importdata(filename);
% get the total number of lines
numLines = size(dataLabelsFile);
% pre-allocate array for labels, a cell is used for a string
dataLabels = cell(ceil(numLines/(uselessLines+1)));
% use a seperate counting variable
m = 1;
% now, for each label, we add it to the dataLabels matrix
for i=1:(uselessLines+1):numLines
line = strsplit(dataLabelsFile{i}); % by default splits on whitespace
dataLabels(m) = line(2);
m = m + 1;
end
루프가 끝날 때까지 모든 라벨을 보유하고있는 dataLabels라는 변수가 있어야합니다. 이제는 어떤 라벨이 어떤 순서로 배열되어 있는지를 확인하기 위해 실제로 어떤 라벨이 어떤 데이터 세트와 연결되는지를 쉽게 알아낼 수 있습니다. . 데이터에 대한 레이블의 색인은 동일합니다.
레이블이 고르게 배치되어있는 경우 시도해 볼 수있는 방법입니다.
그러나 레이블이 임의의 줄 수이면 나보다 아래에있는 사람과 같은 정규식을 사용하여 확인하는 것이 좋습니다. 그런 다음 루프의 마지막 두 줄을 이와 같이 바꿉니다. 정규 표현식은 유연하면서 문자 그대로 하나의 함수 호출로 대체 멀리 얻을 수 있다면, 있음을 의미하며,
...
if (regular expression matched)
dataLabels(m) = line(2);
m = m + 1;
end
...
, 그것은 그렇게하는 것이 좋습니다. 정규 표현식의 효율성은 프로그래머의 기술에 의해 결정되는 반면, 내장 함수는 일반적으로 세계의 일부 우수한 프로그래머에 의해 테스트되었습니다. 또한 Regex 's는 돌아가서 변경하려는 경우 이해하기가 더 어렵습니다. 물론 Regex 's가 훌륭 할 때가 있습니다. 나는 이것이 그 시대 중 하나라고 확신하지 못했습니다.
'fgets' (http://www.mathworks.nl/help/matlab/ref/fgets.html)을 사용하여 파일을 한 줄씩 읽으십시오. 행의 시작 부분이 D1, ..., DA3 ('regexp' 사용 : http://www.mathworks.nl/help/matlab/ref/regexp.html)과 일치하면':'다음 부분을 선택하십시오. – MeMyselfAndI
문제는':'다음에 부품을 선택하면 쓸모없는 많은 정보를 얻게된다는 것입니다. 또한 변수 이름의 길이가 다르다. – enigmae
글쎄, 왜냐하면 너는'regexp'를 사용하기 때문이다. 예를 들어'regexp (line, '^ [A-Z] * \ d * :')'는 줄이 하나 이상의 대문자로 시작하고 뒤에 하나 이상의 자릿수와 콜론이 오는 것을 나타냅니다. – MeMyselfAndI