필터 지우기
필터 지우기

Column labels with source names

조회 수: 2 (최근 30일)
Julio Martín
Julio Martín 2017년 6월 1일
댓글: Walter Roberson 2017년 6월 19일
Hi, i have a file like attached. I'd like to show each source name in each column of results (For example If I calculate mean value). Could you tell me how to do? I know I can use fprintf but don't know how Thanks, regards
  댓글 수: 5
Walter Roberson
Walter Roberson 2017년 6월 2일
You have 8 numeric columns. Should we assume that each column is one channel? At the top you have 8 lines under the source name header: should we assume that those 8 lines are the channel names?
Will the files always have 8 source names and 8 columns?
Julio Martín
Julio Martín 2017년 6월 18일
Hi yes, each column is one channel, and yes, those 8 lines are the channel names Thanks

댓글을 달려면 로그인하십시오.

채택된 답변

Walter Roberson
Walter Roberson 2017년 6월 18일
filename = 'BES30_1.txt';
nvars = 8;
fid = fopen(filename, 'rt');
if fid < 0; error('Could not open file "%s"', filename); end
failed_step = false;
while true
thisline = fgetl(fid);
if ~ischar(thisline); failed_step = true; break; end %end of file
if strcmpi(thisline, '[SOURCE NAMES]'); break; end
end
if failed_step; fclose(fid); error('No [SOURCE NAMES] in file'); end
channel_names = cell(1, nvars);
failed_step = false;
for K = 1 : nvars
thisline = fgetl(fid);
if ~ischar(thisline); failed_step = true; break; end %end of file
if isempty(thisline); failed_step = true; break; end %unexpected blank line
channel_names{K} = thisline;
end
if failed_step; fclose(fid); error('Not enough column names in file'); end
failed_step = false;
while true
thisline = fgetl(fid);
if ~ischar(thisline); failed_step = true; break; end %end of file
if strcmpi(thisline, '[DATA]'); break; end
end
if failed_step; fclose(fid); error('No [DATA] in file'); end
fmt = repmat('%f', 1, nvars);
data = cell2mat( textscan(fid, fmt, 'CollectOutput', 1) );
fclose(fid);
data_mean = mean(data);
data_max = max(data);
data_min = min(data);
channel_name_width = max( cellfun(@length, channel_names) );
name_fmt = repmat( sprintf('%%%ds ', channel_name_width), 1, nvars );
name_fmt(end-1:end) = '\n';
data_fmt = repmat( sprintf('%%%.dg ', channel_name_width), 1, nvars );
data_fmt(end-1:end) = '\n';
fprintf(name_fmt, channel_names{:});
fprintf(data_fmt, data_min);
fprintf(data_fmt, data_max);
fprintf(data_fmt, data_mean);
  댓글 수: 2
Julio Martín
Julio Martín 2017년 6월 19일
I thought it was easier Thank you!
Walter Roberson
Walter Roberson 2017년 6월 19일
If the number of lines before each major section is fixed then this could be made notably shorter. Also, part of the length is in error checking.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Data Import and Export에 대해 자세히 알아보기

태그

아직 태그를 입력하지 않았습니다.

제품

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by