Trabalhando com arquivos CSV no MatlabCriando e Exportando dadosExportando Dados de forma corretaRecuperando os dados...Acessando dados da tabelaSeparando dados de uma colunaPercorrendo a tabela num loopAlterando dados específicosInformações AdicionaisEspecificando delimitador (se não for vírgula)Ignorando primeira linha se não for cabeçalhoLendo colunas específicasReferências
Suponha que vamos criar alguns vetores de dados:
>> index=1:10;>> freq=220*index;>> amp=index*2;>> phase=index*30;>> % criando tabela de dados>> tabela_dados = table(Index,Freq,Amp,Phase)Unrecognized function or variable 'Index'. >> tabela_dados = table(index, freq, amp, phase)tabela_dados = 1×4 table index freq amp phase _____________ _____________ _____________ _____________ [1×10 double] [1×10 double] [1×10 double] [1×10 double]>> % gerando arquivo:>> writetable(tabela_dados, 'dados_espectro1.csv');Foi criado o arquivo CSV, mas no formato errado (incorreto) de 2 linhas:
>> type dados_espectro1.csv
index_1,index_2,index_3,index_4,index_5,index_6,index_7,index_8,index_9,index_10,freq_1,freq_2,freq_3,freq_4,freq_5,freq_6,freq_7,freq_8,freq_9,freq_10,amp_1,amp_2,amp_3,amp_4,amp_5,amp_6,amp_7,amp_8,amp_9,amp_10,phase_1,phase_2,phase_3,phase_4,phase_5,phase_6,phase_7,phase_8,phase_9,phase_101,2,3,4,5,6,7,8,9,10,220,440,660,880,1100,1320,1540,1760,1980,2200,2,4,6,8,10,12,14,16,18,20,30,60,90,120,150,180,210,240,270,300>> A primeira linha com "headers", mas os campos da tabela concatenados um com o outro formando uma longa coluna "header" de uma forma não desejada.
A segunda linha: conteúdo numérico de cada campo.
Na prática foi gerada uma espécie de matriz de 2 linhas x n-colunas, enquanto que o desejado era uma tabela/matriz de n linhas x 4 colunas
Transformando todos os vetores anteriores em vetores linha:
>> size(index)ans = 1 10>> % talvez transformando os vetores anteriores em vetores linha!?>> index=index';>> size(index)ans = 10 1>> freq=freq';>> amp=amp';>> phase=phase';>> tabela_dados = table(index, freq, amp, phase)tabela_dados = 10×4 table index freq amp phase _____ ____ ___ _____ 1 220 2 30 2 440 4 60 3 660 6 90 4 880 8 120 5 1100 10 150 6 1320 12 180 7 1540 14 210 8 1760 16 240 9 1980 18 270 10 2200 20 300 >> % Hum... agora parece coincidir com o desejado>> % Salvando dados...>> writetable(tabela_dados, 'dados_espectro2.csv');>> % Coincide com o desejado:>> type dados_espectro2.csv
index,freq,amp,phase1,220,2,302,440,4,603,660,6,904,880,8,1205,1100,10,1506,1320,12,1807,1540,14,2108,1760,16,2409,1980,18,27010,2200,20,300>>Este tipo de arquivo de dados (.csv) pode ser editado a mão eventualmente.
Continuando de antes...
>> save dados % apenas por "garantia">> clear all % limpando todos os dados>> who>> % tudo "vazio">> dados_lidos = readtable('dados_espectro2.csv');>> disp(dados_lidos) index freq amp phase _____ ____ ___ _____ 1 220 2 30 2 440 4 60 3 660 6 90 4 880 8 120 5 1100 10 150 6 1320 12 180 7 1540 14 210 8 1760 16 240 9 1980 18 270 10 2200 20 300 >>>> dados_lidosdados_lidos = 10×4 table index freq amp phase _____ ____ ___ _____ 1 220 2 30 2 440 4 60 3 660 6 90 4 880 8 120 5 1100 10 150 6 1320 12 180 7 1540 14 210 8 1760 16 240 9 1980 18 270 10 2200 20 300 >> Continuando dos comandos anteriores...
>> Freq = dados_lidos.freq;>> size(Freq)ans = 10 1>> FreqFreq = 220 440 660 880 1100 1320 1540 1760 1980 2200>> whos Name Size Bytes Class Attributes
Freq 10x1 80 double dados_lidos 10x4 2058 table
>> Se você precisa processar os dados linha por linha, combine a propriedade .Variables ou o tamanho da tabela com um loop.
>> % Descobre o número total de linhas da tabela>> num_linhas = height(dados_lidos)num_linhas = 10
% Percorre linha por linhafor i = 1:num_linhas freq_atual = dados_lidos{i, 'freq'}; amp_atual = dados_lidos{i, 'amp'}; phase_atual = dados_lidos{i, 'phase'}; fprintf('Componente %i: f = %g, amp = %g, phase = %g\n', i, freq_atual, amp_atual, phase_atual);end Você pode cruzar a informação da linha (número) e da coluna (nome ou número) usando parênteses () ou chaves {}.
% Pega o dado da linha 1, coluna 'Notas' (retorna o número 8.5)nota_ana = dados_importados{1, 'Notas'};
% Também funciona usando o número da coluna (linha 1, coluna 2)nota_ana = dados_importados{1, 2}; Para alterar um valor, basta usar a mesma lógica de acesso com chaves {} e atribuir o novo valor.
% Altera a nota do aluno da linha 1 para 9.5dados_importados{1, 'Notas'} = 9.5; O MATLAB é inteligente e, por padrão, já identifica a primeira linha do arquivo CSV como o cabeçalho (nome das colunas). Caso você precise ajustar a leitura, você pode passar parâmetros adicionais:
xxxxxxxxxxdados = readtable('dados.csv', 'Delimiter', ';');xxxxxxxxxxdados = readtable('dados.csv', 'ReadVariableNames', false);xxxxxxxxxxdados = readtable('dados.csv', 'SelectedVariableNames', {'amp'});Fernando Passold, em 02/06/2026