How add field to a import structure file *.txt.?

3 visualizaciones (últimos 30 días)
Biza Ferreira
Biza Ferreira el 18 de Sept. de 2022
Respondida: Harsh el 25 de Jun. de 2025
Hello fellows I have a problem I need to add a field to a import text file.
I have some field's in a .txt file i need to use , but I need to add a new fields to structure, can someone help me with this?
Thanks in advance
fileID = fopen(fullfile( FilePath, FileName),"r");
%RELOAD FILE DATA IN MATRIX FORMAT WITH ALL COLUMNS
dataAcquisition = readmatrix(fullfile(FilePath,FileName),'NumHeaderLines',headerLine);
%CHOOSE THE COLUMN's WITH THE DATA NEEDED
ixKeep=[1 2:7]
%LOAD ALL REQUIRED FIELDS
dataAcquisition = dataAcquisition(:,ixKeep);
%%%%%%%%%%%%%ADD STRUCTURE WITH A FOLLOWING FIELDS%%%%%%%%%%%%%%
%SAMPLE | TIMESAMPLE | ECG | RESPIRATORY | TEMPERATURE | BATTERY
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
validFields = {'sample', 'time_aquisition', 'ecg', 'respiratory', 'temperature', 'baterry'}
  2 comentarios
Chunru
Chunru el 19 de Sept. de 2022
You are using readmatrix to get a matrix (rather than a structure). You can add in new culumn to the matrix but not field.
Biza Ferreira
Biza Ferreira el 24 de Sept. de 2022
Once the "dataAquisition" variable represent a import file matrix, from *.txt file, i need associate each field of the following array (validFields), to each column of INPUT.txt file.
In the first column i need made a count eac sample until reache the total of samples(this to garant all samples are readed).
On de second column whant increment each sample time aquisition that is preformed at each 0.008s( t= 1/fs).
can anyone give me some support?
Thanks in advance

Iniciar sesión para comentar.

Respuestas (1)

Harsh
Harsh el 25 de Jun. de 2025
You are attempting to read a ".txt" file using "readmatrix" with a fixed number of header lines ('NumHeaderLines', headerLine). However, this method assumes the header is always the same length, which is unreliableas the "input.txt" file uses a dynamic or custom header ending with a marker like "# EndOfHeader".
The "fgetl" function must be used in a loop to dynamically skip lines until it encounters "# EndOfHeader". Once the header is bypassed, "textscan" is required to read the numeric data, providing precise control over column formatting. The resulting cell array must be converted to a matrix using "cell2mat", after which the relevant columns are to be extracted. A "sample" vector is constructed using simple indexing, and a "time_acquisition" vector is computed based on a known sampling rate (e.g., 125 Hz). Finally, the data must be organized into a "table" with clearly defined field names for structured analysis.
Below is sample code to perform this-
fullFileName = "path to input.txt";
% Open file and skip header until '# EndOfHeader'
fid = fopen(fullFileName, 'r');
line = fgetl(fid);
while ischar(line) && ~contains(line, '# EndOfHeader')
line = fgetl(fid);
end
% Read numeric data after header
rawData = textscan(fid, repmat('%f', 1, 11), 'Delimiter', '\t');
fclose(fid);
% Convert to matrix
dataMatrix = cell2mat(rawData);
% Extract relevant columns (e.g., ECG, Respiratory, Temperature, Battery)
ixKeep = [4, 5, 6, 7]; % Adjust if needed
dataAcquisition = dataMatrix(:, ixKeep);
% Add sample counter and time vector
numSamples = size(dataAcquisition, 1);
sample = (1:numSamples)';
fs = 125; % Sampling frequency in Hz
time_acquisition = (0:numSamples-1)' / fs;
% Create structured table
structuredData = table(sample, time_acquisition, ...
dataAcquisition(:,1), dataAcquisition(:,2), ...
dataAcquisition(:,3), dataAcquisition(:,4), ...
'VariableNames', {'sample', 'time_acquisition', 'ecg', 'respiratory', 'temperature', 'battery'});
Here's a snapshot of the "structuredData"-
Hope this resolves your query!

Etiquetas

Productos


Versión

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by