Uitable e stringhe

di il
1 risposte

Uitable e stringhe

Ciao a tutti,

sto facendo una GUI. In essa vorrei caricare un file txt contenente una stringa e tre valori numerici, e associare la prima stringa alla prima colonna della tabella, il secondo valore alla seconda colonna della tabella e così via.

Ho provato a caricare i valori in questo modo:
[filename, pathname] = uigetfile({'*.txt'}, 'Pick a txt file');
 filepath=fullfile(pathname,filename);
 Data = importdata(filepath);
 Caratteristiche=getfield(Data,'data');
 Nome=getfield(Data,'textdata')
 Caratteristiche=Caratteristiche';
 table1=zeros(1,3);
table(1,1)=Nome{1,1};
 table1(1,2)=Caratteristiche(1,1);
 table1(1,3)=Caratteristiche(1,2);
 table1(1,4)=Caratteristiche(1,3);
 set(handles.uitable1,'Data',table1)
Mi da questo errore quando voglio caricare il nome:
Subscripted assignment dimension mismatch.

Error in GUI_ANALISI2>pushbutton1_Callback (line 99)
 table1(1,1)=Nome{1,1};
Grazie a tutti per il vostro aiuto

1 Risposte

  • Re: Uitable e stringhe

    Il messaggio di errore è dovuto al fatto che vuoi assegnare il contenuto della variabile "Nome" che è un cellarray contenente una stringa alla variabile "table" inizializzata come vettore di numeri (tra l'altro, a parte questo problema, forse per errore, la variabile che utilizzi nel seguito per memorizzare i dati di "Caratteristiche" ha un nome diverso).

    Per poter inserire in una "uitable" elementi di tipo diverso (stringhe di testo e numeri nel tuo caso) bisogna utilizzare un cellarrauy.

    Lo script in calce è una versione modificata del tuo con la corretta definizione del cellarray contenente i dati da inserire nella uitable.

    Nello script, per praticità, viene creata una "uitable" direttamente tramite la funzione "uitable", senza utilizzar "GUIDE") inoltre ho anche aggiunto un controllo che gestisce l'eventuale "non selezione" (tasto Annulla) del file.
    Ho quindi dovuto commentare la tua istruzione con la quale assegni la variabile table1 alla uitable anche se apparentemente corretta.

    Nello script ho inserito alcuni commenti che, spero, spieghino le varie modifiche.
    
    % Creazione di una GUI di esempio
    f = figure('unit','normalized','position',[.1 .1 .5 .3]);
    colnames = {'Text Col.', 'Data Col. 1', 'Data Col. 2', 'Data Col. 3'};
    t = uitable(f, 'ColumnName', colnames, ...
       'unit','normalized','Position', [0.20 0.60 0.70 0.30]);
    % Selezione del file di input
    [filename, pathname] = uigetfile({'*.txt'}, 'Pick a txt file');
    % Controllo sulla selezione del file di input
    % Se il file non è stato selezionato visualizza un messaggio
    if(filename == 0)
       disp('No Input file selected')
    else
       % Se il file è stato selezionato, continua
       filepath=fullfile(pathname,filename);
       Data = importdata(filepath);
       Caratteristiche=getfield(Data,'data');
       Nome=getfield(Data,'textdata')
       % Istruzione non necessaria
       % % %    Caratteristiche=Caratteristiche';
       % Il parametro "Data" della uitable deve ussere un cellarray per contenere
       % istruzione errata
       % % %    table1=zeros(1,3);
       % Assegnazione della stringa di testo letta dal file al cellarray
       % Il contenuto di ogni elemento del cellarray deve essere una striunga o un
       % numero, "Nome" è un cellarray, quyindi deve essere convertito con la
       % funzione "char" in un astringa
       % table(1,1)=Nome{1,1};
       table1{1,1}=char(Nome);
       % table1(1,2)=Caratteristiche(1,1);
       % table1(1,3)=Caratteristiche(1,2);
       % table1(1,4)=Caratteristiche(1,3);
       % Inserimento dei valori numerici nel cellarray dalla seconda locazione in
       % poi
       for i=2:length(Caratteristiche)+1
          table1{1,i}=Caratteristiche(i-1);
       end
       % Per far sì che questo script di esempio funziioni ho dovuto modificare
       % l'istruzione che segue, ma quella che hai sritto dovrebbe funzionare
       %    set(handles.uitable1,'Data',table1)
       set(t,'Data',table1)
    end
    
    Hope this helps.
    Allegati:
    16082_2c1762ded2aa2b31dde31affbb4e8e82.jpg
    16082_2c1762ded2aa2b31dde31affbb4e8e82.jpg
Devi accedere o registrarti per scrivere nel forum
1 risposte