Borrar filtros
Borrar filtros

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

18 visualizaciones (últimos 30 días)
%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!

Respuesta aceptada

Star Strider
Star Strider el 1 de Mayo de 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 comentarios
Samuele Bolotta
Samuele Bolotta el 1 de Mayo de 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!

Iniciar sesión para comentar.

Más respuestas (1)

darova
darova el 1 de Mayo de 2020
Read whole data using importdata or readtable and choose only columns you want

Categorías

Más información sobre Data Import and Export en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by