Read data with repeat counts
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Geetartha Dutta
am 6 Okt. 2023
Beantwortet: Voss
am 6 Okt. 2023
I have a data file containing numbers with repeat counts denoted by asterisk of the following format: 750.013 2*748.943 2*748.221 ... which is equivalent to 750.013 748.943 748.943 748.221 748.221 ... How can I read this data into a vector? That is, how can I take into account the repeat count operator (*) while reading the data?
0 Kommentare
Akzeptierte Antwort
Voss
am 6 Okt. 2023
str = fileread('file.txt')
C = regexp(regexp(str,'\s+','split'),'\*','split');
idx = cellfun(@isscalar,C);
C(idx) = cellfun(@(x)[{'1'} x],C(idx),'UniformOutput',false);
M = str2double(vertcat(C{:}));
V = repelem(M(:,2).',M(:,1))
0 Kommentare
Weitere Antworten (2)
Mathieu NOE
am 6 Okt. 2023
hello
maybe this ?
data_string = "750.013 2*748.943 2*748.221"; % data imported as string array
data_string2 = split(data_string,' ');
%% main loop
store_value = [];
for k = 1:numel(data_string2)
tmp = char(data_string2(k));
ind = strfind(tmp,"*");
if ~isempty(ind) % we have 2*748.943 data (or alike
factor = str2num(tmp(1:ind-1));
value = str2num(tmp(ind+1:end));
value_all = repmat(value,[factor 1]);
store_value = [store_value;value_all];
else % we have a single value
store_value = [store_value;str2num(tmp)];
end
end
store_value
1 Kommentar
Dyuman Joshi
am 6 Okt. 2023
@Mathieu NOE, rather than growing the output dynamically, a better approach would be to preallocate according to the size of data_string2, find and store the number before asterisk for each element (if it does not exist, assign 1) and then use repelem on the unique elements.
Les Beckham
am 6 Okt. 2023
Here is one approach.
data_strings = ["750.013"; "2*748.943"; "2*748.221"] % sample input data
iData = 1;
for iStr = 1:numel(data_strings)
if contains(data_strings(iStr), "*")
tmp = split(data_strings(iStr), "*");
rpt = str2double(tmp(1));
data(iData:(iData + rpt - 1)) = str2double(tmp(2));
else
rpt = 1;
data(iData) = str2double(data_strings(iStr));
end
iData = iData + rpt;
end
disp(data)
0 Kommentare
Siehe auch
Kategorien
Mehr zu Import, Export, and Conversion finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!