フィルターのクリア

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

4 ビュー (過去 30 日間)
Philipp Mueller
Philipp Mueller 2016 年 11 月 8 日
コメント済み: Guillaume 2016 年 11 月 16 日
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 件のコメント
Guillaume
Guillaume 2016 年 11 月 8 日
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).
Philipp Mueller
Philipp Mueller 2016 年 11 月 8 日
do you have some links for me? thx

サインインしてコメントする。

採用された回答

Guillaume
Guillaume 2016 年 11 月 8 日
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 件のコメント
Philipp Mueller
Philipp Mueller 2016 年 11 月 16 日
編集済み: Philipp Mueller 2016 年 11 月 16 日
@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 2016 年 11 月 16 日
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}

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeCharacters and Strings についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by