Creare Matrice da file .txt contenente numeri e lettere

di il
1 risposte

Creare Matrice da file .txt contenente numeri e lettere

Buonasera, ho il seguente problema: Il seguente è un file .txt

DSC_0388 Star File Name
HIP 114971 [449,10] Gamma Piscium
HIP 115738 [485,52] Kappa Piscium
HIP 116928 [478,117] Lambda Piscium
HIP 116771 [414,111] Iota Piscium
HIP 118268 [396,192] Omega Piscium
HIP 1645 [378,279] 41 Piscium
HIP 4906 [386,451] Epsilon Piscium
HIP 7007 [416,564] Mu Piscium
HIP 5364 [686,468] Eta Ceti
HIP 1562 [657,267] Iota Ceti

Partendo dal file, devo creare una function che prenda in input il nome del file, e mi ritorni una matrice in cui la prima colonna contenga i codici HIP, la seconda colonna i primi numeri nelle parentesi quadre (coordinate x di un punto) e la terza colonna i numeri dopo la virgola nelle parentesi quadre (coordinate y del punto).

per fare un esempio, le prime righe della matrice dovrebbero essere:
114971 449 10
115738 485 52
116928 478 117

Ho provato diverse strade, ma il fatto che ci siano parentesi, lettere ecc mi porta fuori strada.
Grazie in anticipo

1 Risposte

  • Re: Creare Matrice da file .txt contenente numeri e lettere

    Una possibile soluzione è leggere il file di input con al funzione textscan

    Nel definire il formato, individua tutte le componenti della stringa:
    
    HIP 114971 [449,10] Gamma Piscium
    '%s    %d  %c %d %c %d %c %s %s'
    
    nota in particolare, %c per le due parentesi quadre e la virgola

    textscan ritorna un cellarray dal quale estrarre le componenti desiderate
    
    % Open the input file
    fp=fopen('i.txt','r');
    % Read the input file
    C=textscan(fp,'%s%d%c%d%c%d%c%s%s')
    % Close the input file
    fclose(fp)
    % Extract the values
    n=[C{2} C{4} C{6}];
    % Delete the last row in the input file ends with an empty line
    if(sum(n(end,:)) == 0)
        n(end,:)=[]
    end
    
Devi accedere o registrarti per scrivere nel forum
1 risposte