Is there a way to read only two columns of a file with textscan?

25 views (last 30 days)
%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',-1, 'delimiter', '/t');
events = b{1};
event_times = b{2};
I am trying to use this code to read in only the first two columns of the text file. However, it doesn't seem to work: what I obtain is a 1x2 cell with [3;1] in the first column and [819;0] in the second one.
Instead, it should be [3; 3; 2; 1; 4; 5; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0] and [819; 826; 2279; 3427; 3907; 3919; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0].
Thanks!

Accepted Answer

Star Strider
Star Strider on 1 May 2020
There are 7 columns in the file image you posted. You can ignore a specific column by putting a * between the % and the descriptor.
Try it with this example (to read only the first 2 columns):
b = textscan(fileids{file},'%n %n %*n %*n %*n %*n %*n',-1, 'delimiter', '/t');
This will not fill the unread columns with 0, it will simply ignore them.
I do not have your file to test this with, so you may need to experiment to get it to do what you want.
See formatSpec for a full discussion.
  4 Comments
Samuele Bolotta
Samuele Bolotta on 1 May 2020
As for the -1, I honestly have no idea since my job is precisely to try and make more efficient all of this stuff that was written by a previous person at the lab - whom I don't know. Anyway, I've tried: a) with b) without the -1 c) changing the '/t': I still got the same output: a 3 and a 819.
But by doing this:
b = textscan(fileids{file},'%n %n %*[^\n]', -1, 'delimiter', '\t', 'EndOfLine','\r\n');
I solved the issue and it now works!
This gives me the same correct results:
b = textscan(fileids{file},'%n %n %*[^\n]', 'delimiter', '/t');
So adding
"%*[^\n]"
is what really made the difference, even tho I'm not sure why what you originally proposed affects reading in the other rows. I attached the file anyway. Thanks!

Sign in to comment.

More Answers (1)

darova
darova on 1 May 2020
Read whole data using importdata or readtable and choose only columns you want

Categories

Find more on Data Import and Export in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!