Filter löschen
Filter löschen

How can i read different data types (strings numbers vectors) from one .txt-File?

4 Ansichten (letzte 30 Tage)
At the moment i am using a .txt - File for my data input. (Only numbers with 3 columns)
In this .txt-file I want also store all the relevant formating data for my diagram. -> see attachment file. So i can use this parameters in my matlab code. How can i read them?
This was my old matlab code just with my Data Input:
Input_Matrix = textread('InputXX.txt')
[zeilen,spalten]=size(Input_Matrix)
x = Input_Matrix(:,1)
y = Input_Matrix(:,2)
z = Input_Matrix(:,3)
Thank you guys. Sincelery Philipp
  4 Kommentare
Guillaume
Guillaume am 8 Nov. 2016
There are some existing formats such as xml or json that are text (thus human readable / writable) and that matlab can easily parse if you want to be able to write your input data with a text editor. Or you could write a script that generates matlab variables.
Otherwise, the best way to store this sort of things is in a mat file, but of course it's not something that you can write / edit in a text editor.
Note that parsing your file is not that complicated (depending how fault tolerant you want your parser to be).

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Guillaume
Guillaume am 8 Nov. 2016
As per my comment you could use an xml file and xmlread or a json file and jsondecode (the latter being a lot less verbose) but it means a substantial change of syntax for your input file.
It's not that complicated to write a parser for your current format. This would work (although lacking a lot of syntax validation):
diagramoptions = [];
diagramlimits = [];
inputdata = [];
wholecontent = fileread('InputXX.txt');
sections = regexp(wholecontent, '\**([^*]*)\**([^*]*)', 'tokens');
for section = sections
switch(strtrim(section{1}{1}))
case 'Diagram Options'
keyvalues = regexp(section{1}{2}, '([^\n\r=]*)=([^\n\r=]*)', 'tokens');
diagramoptions = cell2table(vertcat(keyvalues{:}), 'VariableNames', {'Key', 'Value'});
case 'Diagram Limits'
header = strsplit(regexp(section{1}{2}, '[^\n\r]*', 'match', 'once'));
content = textscan(section{1}{2}, repmat('%f', 1, numel(header)), 'HeaderLines', 2);
diagramlimits = table(content{:}, 'VariableNames', header);
case 'Input Data'
inputdata = cell2mat(textscan(section{1}{2}, '%f%f%f', 'HeaderLines', 1));
otherwise
warning('Unknown section: %s', section{1}{1});
end
end
%see the outputs
openvar diagramoptions
openvar diagramlimits
openvar inputdata
  5 Kommentare
Philipp Mueller
Philipp Mueller am 16 Nov. 2016
Bearbeitet: Philipp Mueller am 16 Nov. 2016
@Guillaume ok, i understood thank you :) Last question: For example i have 3 diagrams to plot. That means my inputXX.txt has 9 sections -> 3 times diagram options 3 times input data and 3 times diagram limits. how can i seperate it? Is it possible to use
  • openvar diagramoptions[i]
  • openvar diagramlimits[i]
  • openvar inputdata[i]
i...index -> 1,2 or 3 diagram. Thank you in advance
Guillaume
Guillaume am 16 Nov. 2016
The simplest way would be to append to diagramoptions, diagramlimits, inputdata every time you encounter a new one. It's easily done by replacing the assignment with
diagramoptions{end+1} = cell2table(... %same for the other two
You can then index each section using cell array indexing:
openvar diagramoptions{1}

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Characters and Strings finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by