Uiimport

di il
5 risposte

Uiimport

Ciao a tutti

sto caricando un vettore con i valori contenuti in un file mediante uiimport
i valori sono 84480 ma il vettore creato con uiimport ne prende solo 32768
come posso far prendere tutti i valori con questo comando?

5 Risposte

  • Re: Uiimport

    Per poter capire il motivo dell'errore nella lettura occorrono più informazioni sul file e sul formato con il quale i dati sono stati scritti:

    [1] è un file ASCII?
    [2] il file contiene solo i valori del vettore (o matrice) o ci sono anche delle righe di testo?
    [3] nel file è memorizzato più di un vettore? Se si ogni riga del file, ha lo stesso numero di colonne?

    In linea di principio, sarebbe opportuno che il nome del file di input non contenesse spazi bianchi e/o caratteri particolari.

    Se la risposta alle domande 1 e 3 è affermativa, non dovrebbero esserci difficoltà nell'import dei dati.

    Lo script in calce propone, come esempio due modi per importare i dati contenuti in un file ASCII: il file contiene tre colonne di numeri per 100000 righe.
    Il primo metodo utilizza il comando "load"; il secondo il comando "uiimport".
    Lo script risulta un po' lento data la grande quantità di dati da leggere, ma la lettura viene effettuata correttamente in entrambi i casi.

    Un'ulteriore alternativa potrebbero essere: cambiare l'estensione del file in ".m" all'inizio una stringa del tipo "var=[" e, al fondo del file "];" e "lanciare" il file direttamente dalla CommandWindow.

    Extrema ratio: dividere il file in più files con un numero dio righe inferiore, importare i dati e ricostruire il vettore (matrice).
    
    
    % 
    % Flag per l'abilitazione del plot dei grafici
    % 
    enable_plot=0;
    % 
    % Creazione dati (3 vettori da 1e05 elementi)
    % 
    t=0:(2*pi)/99999:2*pi;
    x=cos(t);
    y=sin(t);
    % 
    % Raggruppamento dati in una matrice
    % 
    D=[t;x;y]';
    % 
    % Salvataggio matrice "D" su file ASCII
    % 
    save -ascii data.txt D
    % 
    % Cancellazione dati del workspace
    % 
    clear all
    % 
    % Lettura file ASCII di input con il comando "load"
    % 
    load data.txt
    % 
    % Verifica dell'avvenuta correta lettura
    % 
    whos
    % 
    % I dati letti dal file vengono assegnati ad una matrice avente lo stesso
    % nome del file di input (esclsa l'estensione)
    % 
    if(enable_plot)
       figure
       plot(data(:,2),data(:,3))
       grid on
       daspect([1 1 1])
    end
    % 
    % Cancellazione dati del workspace
    % 
    clear all
    % 
    % Lettura file ASCII di input con il comando "uiimport"
    % 
    uiimport data.txt
    % 
    % Verifica dell'avvenuta correta lettura
    % 
    whos
    % 
    % I dati letti dal file vengono assegnati ad una serie (3 nell'esempio in
    % questione) di variabili chiamate "VarNameX" dove "X" è il numero
    % progressivo della corrispondente colonna nel file di input
    %
    if(enable_plot)
       figure
       plot(VarName2,VarName3)
       grid on
       daspect([1 1 1])
    end
    
    
    Hope this helps.
  • Re: Uiimport

    È un file contenente dati del tipo:

    124
    25
    30
    40
    ...


    ma uiimport me li carica correttamente solo i primi 32768 valori e non tutti 84480
  • Re: Uiimport

    Strano! Apparentemente non dovrebbero esserci motivi per i quali non funzioni.

    Hai provato gli altri metodi descritti nello script (uso del comando "load" oppure modifica dell'estensione del file di input ed aggiunta di una stringa del tipo "m=[" all'inizio del file e "];" alla fine)?

    Quale versione di MatLab usi?
    Se usi una versione di MatLab per studenti, potrebbero esserci dei limiti nella dimensione massima dei vettori / matrici che si possono utilizzare.

    Prova a dare questi comandi dalla CommandWindow (o anche all'interno di uno script):

    m=ones(84480,1);

    Viene visualizzato un messaggio di errore?

    Se sì, prova a dare lo stesso comando riducendo progressivamente il valore "84480" fino ad arrivare al valore massimo di numeri che riesci ad importare con uiimport.
  • Re: Uiimport

    Infatti
    sembrava strano che non funzionava,
    anche io avevo pensato a dei limiti
    ma grazie alla tua idea "m=ones(84480,1);"
    ho capito dov'era il problema.

    Il file in questione è creato mediante un altro programma in c++
    e il problema risiedeva qui , nella creazione di questo file
    che avviene mediante ciclo for
    e nel ciclo for avevo dichiarato l'indice short
    e perciò non venivano salvati tutti e 84480 valori.

    Grazie per l'idea
  • Re: Uiimport

    E' stato un piacere, sono contento che il problema si sia risolto
    Di solito, purtroppo, i SW fanno ... esattamente quello che gli si dice di fare, non hanno immaginazione
Devi accedere o registrarti per scrivere nel forum
5 risposte