How to delete the header of the 1st line of .txt
조회 수: 1 (최근 30일)
이전 댓글 표시
Hello, I would like to ask a question. I have multiple .txt files that I want to merge in vertical manner. the format of these .txt files is the attached file
(1 header & 1 line with numbers)
I am using the commands:
clc
clear
filename1 = ['19*.txt'];%filename
fid_t=fopen(filename1,'r')
fid_p = fopen('final3.txt','w'); % writing file id
% if fid_p < 0, error('Cannot open file for writing.'); end
x = dir ('19*.txt');
for i = 1:length(x)
filename1 = x(i).name; %filename
fid_t = fopen(filename1, 'r');%open it and pass id to fscanf (reading file id)
if fid_t < 0, error('Cannot open file for reading.'); end
data = fread(fid_t, inf, '*char');%read data
fwrite(fid_p, data, 'char');%print data in File_all
fclose(fid_t);% close reading file id
end
but the point is that I would like not to take into account the headers of all the .txt files.
How can I make it?
댓글 수: 0
채택된 답변
Karim
2022년 2월 23일
You could try it via the read and write table functions
% set the number of variables
opts = delimitedTextImportOptions("NumVariables", 9);
% start from second row
opts.DataLines = [2, Inf];
% use tab as delimiter
opts.Delimiter = "\t";
% Specify column names and types
opts.VariableNames = ["DATE_EE", "SIZE", "LATITUDE", "LONGTITUDE", "LAT", "LON", "COUNT", "MAX_VALUE", "MIN_VALUE"];
opts.VariableTypes = ["double", "double", "double", "double", "double", "double", "double", "double", "double"];
% Specify file level properties
opts.ExtraColumnsRule = "ignore";
opts.EmptyLineRule = "read";
% read all files
AllFiles = dir('19*.txt');
for i = 1:length(AllFiles)
tmpData = readtable(AllFiles(i).name, opts);
if i == 1
AllData = tmpData;
else
AllData = vertcat(AllData,tmpData);
end
end
% write output file
writetable(AllData, "final.txt",'Delimiter','\t')
댓글 수: 4
Karim
2022년 2월 23일
ok the code i provided was based using the assumption of the header you showed in you initial example text file. If you want to use different headers you need to modife the
opts.VariableNames
variable in the routine so that it contains the correct variables.
for your new example this would be
opts.VariableNames = ["DATE_EARTHUAKE","Magnitude","lat_epicenter","lon_epicenter","macroseismic_lat","macroseismic_lon","Distance_Between_Epicenters","Macroseismic_Magnitude_IDPS_lt8","Macroseismic_magnitude_allIDPS"];
Alternatively, you can find some code below that doesn't look at the headers. It just skips the first line and merges the rest of the lines into one big file. However, if you use this, keep in mind that this code does not look at the order or names in the header. If your different files use a different ordering they will be concateiate wrongly.
% read all files
AllFiles = dir('19*.txt');
AllData = char('');
for i = 1:length(AllFiles)
tmpData = fileread(AllFiles(i).name);
strtIdx = regexp(tmpData,'\n');
AllData = [AllData tmpData(strtIdx(1)+1:end-1)];
end
fid_out = fopen("final.txt",'wt+');
fprintf(fid_out, '%s',AllData);
fclose(fid_out);
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 File Operations에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!