MATLAB Answers

How to read only some columns of a text file?

5 views (last 30 days)
Samuele Bolotta
Samuele Bolotta on 11 May 2020
Commented: per isakson on 11 May 2020
I'd like to read out only columns from 3 to 7. However, this is not working. Can you help?
Thanks!
%Get events from text file
prompt_totalfiles = 'Enter number of files you want to input: '; %asks for number of files
total_files = input(prompt_totalfiles);
fileids = cell(total_files,1);
j = 1;
Baseline_adjustment = 0.1; %put in baseline photodetector value here (the readout with the led on but the patch cable in pitch black
wholedff = cell(1, 11);
for file = 1:total_files
[inputfile,path] = uigetfile('*.txt');
fileids{file} = fopen(fullfile(path, inputfile));
if fileids{file} == -1
error('Failed to open file "%s"', fullfile(path, inputfile));
end
b = textscan(fileids{file},'%*n %*n %n %n %n %n %n', 'delimiter', '/t');
num = b{3};
epochn = b{4};
state = b{5};
count = b{6};
duration = b{7};

  1 Comment

Walter Roberson
Walter Roberson on 11 May 2020
'delimiter', '\t'
Also if columns 1 and 2 might not be numeric then use %*s for them.

Sign in to comment.

Answers (1)

per isakson
per isakson on 11 May 2020
Edited: per isakson on 11 May 2020
The text file might have more than 7 coloums.
Replace
'%*n %*n %n %n %n %n %n'
by
'%*s%*s%n%n%n%n%n%*[^\n]'
%*[^\n]' skips to the end of line
The code doesn't include end to close the for-loop.
The result of the import might be overwritten for each iteration of the loop.

  8 Comments

Show 5 older comments
Walter Roberson
Walter Roberson on 11 May 2020
Please upload a sample file (in exactly the same format you are using)
Samuele Bolotta
Samuele Bolotta on 11 May 2020
Ah no I actually found out the problem! I should use %2s instead of %s. Thanks!
per isakson
per isakson on 11 May 2020
" [...] I should use %2s instead of %s." No, the problem is rather with the delimiter. I assume there is no '\t' after the six coloumn.

Sign in to comment.