la mia soluzione funziona per qualunque numero di righe "b":
Codice:
a = textread('data.txt','%s','delimiter','\n');
b = zeros(size(a,1),3);
for i=1:length(a)
spaces = regexp(a{i},'\s[A-Z0-9]');
if length(spaces)==3
head = a{i}(1:spaces(1));
else
spaces(1:3) = [1 1 spaces];
end
b(i,1) = str2double(head);
b(i,2) = str2double(a{i}(spaces(2):spaces(3)));
b(i,3) = str2double(a{i}(spaces(3):end));
end
questa è una versione leggermente modificata (la
regexp ignora eventuali spazi al termine di ogni riga)
con questo
data.txt:
Codice:
1119 A 2001 0.0000
2002 0.0000
2009 0.0000
2010 0.0001
2002 0.0000
2009 0.0000
2010 0.0001
2002 0.0000
2009 0.0000
2010 0.0001
1126 C 2001 0.0000
2002 0.0000
2009 0.0000
2010 0.0000
2002 0.0000
2009 0.0000
1157 B 2001 0.0000
2002 0.0000
2010 0.0000
ottengo:
Codice:
1.0e+03 *
1.1190 2.0010 0
1.1190 2.0020 0
1.1190 2.0090 0
1.1190 2.0100 0.0000
1.1190 2.0020 0
1.1190 2.0090 0
1.1190 2.0100 0.0000
1.1190 2.0020 0
1.1190 2.0090 0
1.1190 2.0100 0.0000
1.1260 2.0010 0
1.1260 2.0020 0
1.1260 2.0090 0
1.1260 2.0100 0
1.1260 2.0020 0
1.1260 2.0090 0
1.1570 2.0010 0
1.1570 2.0020 0
1.1570 2.0100 0
la soluzione ha quindi un costo lineare nel numero di righe, e la maggior parte del tempo è impiegata dalla conversione stringa->double.