View Single Post
Old 10-03-2010, 14:07   #12
tæo
Member
 
L'Avatar di tæo
 
Iscritto dal: Sep 2005
Messaggi: 82
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.
__________________
Saigon, shit. I'm still only in Saigon.
tæo è offline   Rispondi citando il messaggio o parte di esso