Filter löschen
Filter löschen

Another way to do what strsplit does

1 Ansicht (letzte 30 Tage)
Sofia Batista
Sofia Batista am 17 Dez. 2016
Bearbeitet: Stephen23 am 17 Dez. 2016
Hello.
What I am looking for is a way to do what strsplit does since my teacher said he didn't know this function and therefore i could not use it. My code so far is
function [n_nos, graph] = Receber1( fich )
f = fopen(fich, 'r');
if f == -1
disp('Insucesso ao abrir o ficheiro.');
else
n_nos = 0;
graph = [];
while feof(f) == 0
line = fgetl(f);
graph(end+1, :) = str2double(strsplit(strtrim(line)));
n_nos = n_nos+1;
end
fechar = fclose(f);
if fechar == 0
disp('Ficheiro carregado com sucesso.');
else
disp('Insucesso ao fechar o ficheiro.');
n_nos = -1;
end
end
end
Thank you so much.
  3 Kommentare
Jan
Jan am 17 Dez. 2016
Tell your teacher:
doc strsplit
Sofia Batista
Sofia Batista am 17 Dez. 2016
Indeed!! I am very restrained because of him and my code is working perfectly but i can't use it.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Jan
Jan am 17 Dez. 2016
Bearbeitet: Jan am 17 Dez. 2016
The str2double(strsplit(strtrim(.))) is an overkill here, when a simple sscanf does the same already:
function [n_nos, graph] = Receber1( fich )
f = fopen(fich, 'r');
if f == -1 % IMPORTANT: Stop with an error
error('Insucesso ao abrir o ficheiro: %s', fich);
end
n_nos = 0;
graph = [];
while feof(f) == 0
line = fgetl(f);
graph(end+1, :) = sscanf(line, '%f').'; [EDITED]
n_nos = n_nos+1;
end
fclose(f); % No test required
end
If the opening of the file fails, stopping with an error is the only secure reaction. Returning without defining the outputs will produce a strange and confusing error message instead.
General rule: Let the code stop in case of an error to avoid running the program in an undefined state with potentially unpredictable effects.
Closing the file can fail under extremely rare conditions only and will not produce any harm. Only if this happens about 250 times, Matlab cannot open files anymore, but this is detected by checking the -1 after fopen already.
  3 Kommentare
Jan
Jan am 17 Dez. 2016
Bearbeitet: Jan am 17 Dez. 2016
A typo: sscanf(line, '%f') instead of sscanf('%f', line). See the [EDITED] line.
Sofia Batista
Sofia Batista am 17 Dez. 2016
Thank you !!! It's perfect!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Line Plots finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by