read a formated text

3 vues (au cours des 30 derniers jours)
Song
Song le 12 Déc 2014
Commenté : Song le 16 Déc 2014
How can I read the Information from the following text file?
<content d="2000-11-02" o="21.410" h="21.800" c="21.600" l="21.310" v="21014" bl="" />
<content d="2000-11-03" o="21.610" h="21.680" c="21.420" l="21.380" v="7412" bl="" />
<content d="2000-11-06" o="21.420" h="21.450" c="21.370" l="21.330" v="8795" bl="" />
<content d="2000-11-07" o="21.380" h="21.500" c="21.360" l="21.280" v="9994" bl="" />
What interests me are
"2000-11-06", 21.420, 21.450, 21.370, 21.330, 8795
I tried
textscan(fid, '\t<content d="%4d-%2d-%2d" o="%f" h="%f" c="%f" l="%f" v="%f" bl="" />')
or
textscan(fid, '\t<content d="%q" o="%f" h="%f" c="%f" l="%f" v="%f" bl="" />')
But it doesn't work. Anyone can help?
BTW, converting dates using
dates = cellfun(@(x)datenum(x, 'yyyy-mm-dd'), dates);
is kind of slow. Anyone knows a faster way?

Réponse acceptée

dpb
dpb le 12 Déc 2014
Forget the '\t' in the first format string; textscan uses it as one of the default delimiters, anyway.
I pasted one line in to command window --
textscan(s, '<content d="%4d-%2d-%2d" o="%f" h="%f" c="%f" l="%f" v="%f" bl="" />')
ans =
[2000] [11] [2] [21.4100] [21.8000] [21.6000] [21.3100] [21014]
>>
  1 commentaire
Song
Song le 15 Déc 2014
S = ['<?xml version="1.0" encoding="UTF-8"?> />' sprintf('\n') ...
'<control> />' sprintf('\n') ...
' <content d="2000-01-04" o="24.980" h="25.780" c="25.570" l="24.750" v="44961" bl="" />' sprintf('\n') ...
' <content d="2000-01-05" o="25.570" h="25.980" c="25.280" l="25.150" v="52528" bl="" />' sprintf('\n') ...
' <content d="2000-01-06" o="25.180" h="26.300" c="25.990" l="25.050" v="62297" bl="" />' sprintf('\n') ...
' <content d="2000-01-07" o="26.300" h="27.500" c="26.900" l="26.120" v="213553" bl="" />' sprintf('\n') ...
' <content d="2000-01-10" o="27.000" h="27.850" c="27.250" l="26.710" v="165397" bl="" />' sprintf('\n') ...
' <content d="2000-01-11" o="27.250" h="27.300" c="26.200" l="26.120" v="93908" bl="" />' sprintf('\n') ...
' <content d="2000-01-12" o="26.000" h="26.000" c="25.120" l="24.800" v="352749" bl="" />' sprintf('\n') ...
' <content d="2000-01-13" o="25.000" h="25.250" c="24.900" l="24.800" v="79756" bl="" />' sprintf('\n') ...
' <content d="2000-01-14" o="24.880" h="25.000" c="24.200" l="23.910" v="178619" bl="" />' sprintf('\n') ...
' <content d="2000-01-17" o="24.080" h="24.440" c="24.400" l="23.750" v="81015" bl="" />' sprintf('\n') ...
' <content d="2000-01-18" o="24.500" h="24.570" c="24.140" l="23.880" v="76933" bl="" />' sprintf('\n') ...
' <content d="2000-01-19" o="24.140" h="24.290" c="24.130" l="23.980" v="46584" bl="" />' sprintf('\n') ...
' <content d="2000-01-20" o="24.120" h="24.650" c="24.440" l="24.100" v="51144" bl="" />' sprintf('\n') ...
'</control>'];
textscan(S, '<content d="%4d-%2d-%2d" o="%f" h="%f" c="%f" l="%f" v="%f" bl="" />')
I tried your code, but still not working ...

Connectez-vous pour commenter.

Plus de réponses (2)

Song
Song le 15 Déc 2014
As an example to test:
S = ['<?xml version="1.0" encoding="UTF-8"?> />' sprintf('\n') ...
'<control> />' sprintf('\n') ...
' <content d="2000-01-04" o="24.980" h="25.780" c="25.570" l="24.750" v="44961" bl="" />' sprintf('\n') ...
' <content d="2000-01-05" o="25.570" h="25.980" c="25.280" l="25.150" v="52528" bl="" />' sprintf('\n') ...
' <content d="2000-01-06" o="25.180" h="26.300" c="25.990" l="25.050" v="62297" bl="" />' sprintf('\n') ...
' <content d="2000-01-07" o="26.300" h="27.500" c="26.900" l="26.120" v="213553" bl="" />' sprintf('\n') ...
' <content d="2000-01-10" o="27.000" h="27.850" c="27.250" l="26.710" v="165397" bl="" />' sprintf('\n') ...
' <content d="2000-01-11" o="27.250" h="27.300" c="26.200" l="26.120" v="93908" bl="" />' sprintf('\n') ...
' <content d="2000-01-12" o="26.000" h="26.000" c="25.120" l="24.800" v="352749" bl="" />' sprintf('\n') ...
' <content d="2000-01-13" o="25.000" h="25.250" c="24.900" l="24.800" v="79756" bl="" />' sprintf('\n') ...
' <content d="2000-01-14" o="24.880" h="25.000" c="24.200" l="23.910" v="178619" bl="" />' sprintf('\n') ...
' <content d="2000-01-17" o="24.080" h="24.440" c="24.400" l="23.750" v="81015" bl="" />' sprintf('\n') ...
' <content d="2000-01-18" o="24.500" h="24.570" c="24.140" l="23.880" v="76933" bl="" />' sprintf('\n') ...
' <content d="2000-01-19" o="24.140" h="24.290" c="24.130" l="23.980" v="46584" bl="" />' sprintf('\n') ...
' <content d="2000-01-20" o="24.120" h="24.650" c="24.440" l="24.100" v="51144" bl="" />' sprintf('\n') ...
'</control>'];
textscan(S, '<content d="%4d-%2d-%2d" o="%f" h="%f" c="%f" l="%f" v="%f" bl="" />')

Thorsten
Thorsten le 15 Déc 2014
i1 = findstr(S, '<content');
i2 = findstr(S, '/>');
i2 = i2(find(i2>i1(1), 1, 'first'):end) + 1;
for i=1:numel(i1)
R(i,:) = textscan(S(i1(i):i2(i)), '<content d="%4d-%2d-%2d" o="%f" h="%f" c="%f" l="%f" v="%f" bl="" />')
end
  1 commentaire
Song
Song le 16 Déc 2014
Thanks, I figured out the same way.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Data Import and Analysis dans Help Center et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by