how to extract certain lines from a csv file
9 ビュー (過去 30 日間)
古いコメントを表示
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.
0 件のコメント
採用された回答
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
2020 年 11 月 3 日
hello Giuseppe
which matlab release are you using ? I have R2020b
the function that creates the error on your side is writecell which I believe appeared in 2018
I tested some alternatives , so replace the line that creates the error
so replace :
writecell(simple_output_matrix,output_file);
with one of the following options :
xlswrite(output_file,simple_output_matrix);% Matlab R2000 and above
or as an ascii format txt (works also with csv or txt file extension). I have put the function saveascii in attachement
saveascii(simple_output_matrix,output_file) % keep csv file format output
saveascii(simple_output_matrix,'test.txt') % export as simple txt file (quite the same)
Mathieu NOE
2020 年 11 月 3 日
one more possible alternative is :
dlmwrite(output_file, char(simple_output_matrix),'delimiter',''); % ok
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Text Files についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!