MATLAB Answers

how to extract certain lines from a csv file

조회 수: 8(최근 30일)
Giuseppe D'Amico
Giuseppe D'Amico 2020년 11월 2일
댓글: Mathieu NOE 2020년 11월 3일
Hi everyone, I really need a hand. I have a csv file containing many lines which cannot be opened in excel. I would like to create a script that allows me to keep the first line and then go and read the file line by line.
Now each line is made up of several characters, at a certain point in the line there is the element that identifies me what that line refers to (eg: UPRE_S14SPLO_901), in total there are 21 of these elements. I would like the mi script to read each line and create 21 csv files corresponding to the elements that interest me where all the lines referring to that element are contained.
Does anyone know how to do? I am attaching an example of the file to make you understand how it is structured.

채택된 답변

Mathieu NOE
Mathieu NOE 2020년 11월 2일
hello Giuseppe !
here you are ... I converted the prova.xlsx into csv file first to be coherent with the assumption we are working with csv data
the code is below
enjoy it :
Filename = 'prova.csv';
string = 'UPRE_S14SPLO_901';
% string = 'UPRE_S14SPLO_902';
output_matrix = retrieve_csv2(Filename,string)
% % save the output to one single csv file
% output_file = 'out_prova_all.csv';
% writecell(output_matrix,output_file);
% save the output to individual csv file (title + 1 line of data)
[m,n] = size(output_matrix);
title_line = output_matrix{1,:};
for ci = 2:m
output_file = ['out_prova_ind' num2str(ci-1) '.csv'];
data_line = output_matrix{ci,:};
simple_output_matrix{1,:} = title_line; % title line (always the same)
simple_output_matrix{2,:} = data_line; % data line (increment)
writecell(simple_output_matrix,output_file);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function output_matrix = retrieve_csv2(Filename,string)
fid = fopen(Filename);
tline = fgetl(fid);
k = 1;
output_matrix{1,1} = tline;
while ischar(tline)
check = strfind(tline,string);
if ~isempty(check)
k = k+1; % loop over line index
output_matrix{k,:} = tline;
end
tline = fgetl(fid);
end
fclose(fid);
  댓글 수: 3
Mathieu NOE
Mathieu NOE 2020년 11월 3일
one more possible alternative is :
dlmwrite(output_file, char(simple_output_matrix),'delimiter',''); % ok

댓글을 달려면 로그인하십시오.

추가 답변(0개)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by