Salvare un array di celle su file txt

di il
5 risposte

Salvare un array di celle su file txt

Salve, ho un problema...devo salvare un array di celle su un file txt...come si fa??
in realtà io ho una matrice [256,256] di dati e li ho trasformati in binario (su 20 bit) quindi ho realizzato un array di celle che contiene i dati in binario. Ora devo salvare tale array su un file di testo. Come faccio???

riporto in seguito il codice

Nz=256;
N_teta=256;
Nf=64;

a=1.16;
b=4.23;
Rb=a+(b-a)*rand(Nz,N_teta);
C=cell(Nz,N_teta);

q=quantizer([21,17]);

for i=1:Nz
for j=1:N_teta
b= num2bin(q,Rb(i,j));
b(:,1)=[];
C{i,j}=;
end
end

devo salvare C.

5 Risposte

  • Re: Salvare un array di celle su file txt

    La domanda è "molto vecchia" e probabilmente il problema è stato risolto, ma, forse, questa risposta può essere di aiuto a qualcun altro.

    Per salvarne il contenuto in un file di testo:

    [*] creare / aprire il file in modalità scrittura (funzione fopen))
    [*] utilizzare la funzione fprintf per scrivere effettivamente il dati (essendo C composto da stringhe, nel format[\i] bisognerà specificare "%s"
    [*] chiudere il file (funzione fclose)"

    Nello script in calce, i dati di C vengono scritti in due files di testo, in due modalità:

    [*] Nz righe x N_teta colonne
    [*] Tutti i numeri in una sola colonna
    
    
    % 
    % Creazione / apertura file di output in "scrittura" ('w'); l'handler "fp"
    % verrà usao per acceder al file
    % 
    fp=fopen('Nz_righe_x_N_teta_colonne.txt','w');
    % 
    % Loop per la scrittura del contenuto di C
    % 
    for i=1:Nz
       for j=1:N_teta
    %       
    %       Scsrittura degli N_teta numeri binari sulla stessa riga separati
    %       dal carattere "tab" (\t)
    %       
          fprintf(fp,'%s\t',C{i,j});
       end
    %    
    %    Per "andare a capo" prima di iniziare a scrive i dati nella seconda
    %    riga, si scrive sul file il "carattere speciale" "\n"
    %    
       fprintf(fp,'\n');
    end
    % 
    % Al termine della scrittura è buona norma chiudere il file
    % 
    fclose(fp);
    % 
    % Scrittura del contenuto di C, un elemento per riga
    % 
    fp=fopen('uno_x_riga.txt','w');
    for i=1:Nz
       for j=1:N_teta
          fprintf(fp,'%s\n',C{i,j});
       end
    end
    fclose(fp);
    
    
    Hope this helps.
  • Re: Salvare un array di celle su file txt

    Salve,
    Sono neofita e avrei bisogno di un aiuto per Matlab.
    Ho una matrice excel 13412x1, ho necessità di esportare per la seguente matrice 479 sottomatrici 28x1 e vorrei fare in modo che a ciascuna di queste 479 venga assegnato un nome che parta da "video1" fino a "video479".
    Vorrei sapere se fosse possibile e se qualcuno può aiutarmi?
    Spero di essermi spiegata bene.
    Ringrazio in anticipo.
  • Re: Salvare un array di celle su file txt

    Ho dimenticato un dettaglio finale: avrei bisogno inoltre di effettuare una trasposta di tutte le 479 sottomatrici estratte.
    Ringrazio nuovamente.
  • Re: Salvare un array di celle su file txt

    Qualche commento:
    [*] non dovresti pubblicare una domanda come "risposta" ad un'altra domanda, semplicemente crea un nuova domanda
    [*] nella domanda, dovresti inserire anche il codice che hai scritto in modo che si possa capire quale / dove sia l'eventuale errore
    [*] dovresti anche specificare quale sia il problema specifico che stai incontrando

    ad ogni modo, per leggere un file "Excel" pupi usare la funzione "xlsread" che ti consente di importare il vettore nel Workspace.

    Ciò fatto si tratta semplicemente di manipolare il vettore secondo le tue necessità.

    Creare in modo dinamico delle variabili (veideo1, video2, ...) anche se possibile è caldamente sconsigliato:

    https://blogs.mathworks.com/loren/2005/12/28/evading-eval/#view_comments
    https://it.mathworks.com/help/matlab/matlab_prog/string-evaluation.html

    Dato il vettore letto dal file Excel, puoi, per esempio "riorganizzarlo" in modo da creare una matrice, bel tuo caso una matrice (479 x 28) o (28 x 479) utilizzando la funzione "reshape".

    A seconda dei due casi, per accedere a quello che sarebbe il vettore "videox" ti basterà accedere alla riga o colonna "X" della matrice senza il bisogno di creare delle variabili in modo dinamico.

    Un'alternativa, se proprio vuoi avere delle variabili con il nome "video1" ecc. è quella di creare una "struct" fruttando la possibilità di generare i nomi dei campi della struttura in modo dinamico.

    Puoi utilizzare le funzioni che operano sulle strutture per ottenerne il nome dei campi (fieldnames), il contenuto di un campo (getfield), ecc.

    Un esempio:
    
    
    % Creazioine di dati di esempio (come se fossero stati letti dal file Excel
    x=1:99
    % Identificazione del numero di dati 
    n_all=length(x)
    % Definizione del numero di dati per array
    n_data=11
    % Identificazione del numero di array risultanti
    n_array=n_all/n_data
    % Creazione della matrice a partire dal vetttore
    y=reshape(x,n_data,n_array)
    % Esedmpio di creazione di una struct con definizione "dinamica" del nome dei campi
    % Definizione della "base" del nome die campi
    base_name='video'
    % Loop sui possibili campi
    for i=1:n_array
       % Creazione dello i-esimo campoi ed assegnazione del corrispondente vettore
       video_data.([base_name sprintf('%d',i)])=y(:,i)
    end
    % La funzione "fieldnames" ritorna, in un cellarray il nome dei campi
    fieldnames(video_data)
    
  • Re: Salvare un array di celle su file txt

    Il codice funziona, grazie mille!
    La prossima volta seguirò tutte le indicazioni, ringrazio nuovamente!
Devi accedere o registrarti per scrivere nel forum
5 risposte