我有许多带有数据的文本文件,并且想要读取每个文件的特定部分(时间信息),它始终位于每个文件的第一行的末尾。这是一个例子:
%termo2, 30-Jan-2016 12:27:20
即。我想获得"12:27:20"
。
我尝试过使用textscan
,我以前用过类似的问题。我想这行有3列,单个空格作为分隔符。
我首先尝试将这些指定为字符串(%s
):
fid = fopen(fname);
time = textscan(fid,'%s %s %s');
我还尝试使用日期时间格式指定日期和时间:
time = textscan(fid,'%s %{dd-MMM-yyyy}D %{HH:mm:ss}D')
这两个都只产生一个空白单元格。 (我也尝试过多种变体,例如将分隔符定义为'',结果相同)
感谢您的帮助!
这是整个文件(不确定粘贴在这里是正确的方法 - 我是matlab和stackoverflow的新手......):
%termo2, 30-Jan-2016 12:27:20
%
%102
%
%stimkod stimtyp
% 1 Next:Pain
% 2 Next:Brush
% vaskod text
% 1 Obeh -> Beh
% 2 Inte alls intensiv -> Mycket intensiv
% stimnr starttid stimkod vaskod VASstart VASmark VAS
1 78.470 2 1 96.470 100.708 6.912
1 78.470 2 2 96.470 104.739 2.763
2 138.822 1 2 156.821 162.619 7.615
2 138.822 1 1 156.821 166.659 2.496
3 199.117 2 2 217.116 222.978 2.897
3 199.117 2 1 217.116 224.795 5.773
4 258.612 2 1 276.612 280.419 5.395
4 258.612 2 2 276.612 284.145 4.622
5 320.068 1 1 338.068 340.689 4.396
5 320.068 1 2 338.068 346.090 2.722
6 377.348 1 2 395.347 398.809 6.336
6 377.348 1 1 395.347 404.465 3.391
7 443.707 2 1 461.707 464.840 6.604
7 443.707 2 2 461.707 473.703 3.652
8 503.122 1 2 521.122 526.009 4.285
8 503.122 1 1 521.122 529.808 3.646
9 568.546 2 2 586.546 586.546 5.000
9 568.546 2 1 586.546 595.496 6.412
10 629.953 2 1 647.953 650.304 7.034
10 629.953 2 2 647.953 655.600 6.615
11 694.305 1 1 712.305 714.416 4.669
11 694.305 1 2 712.305 721.079 2.478
12 751.537 2 2 769.537 773.511 7.307
12 751.537 2 1 769.537 777.423 8.225
13 813.944 1 2 831.944 834.958 7.731
13 813.944 1 1 831.944 839.255 1.363
14 872.448 2 1 890.448 893.829 6.813
14 872.448 2 2 890.448 899.439 2.600
15 939.880 1 2 957.880 963.811 4.332
15 939.880 1 1 957.880 966.603 2.786
16 998.328 2 1 1016.327 1020.707 5.837
16 998.328 2 2 1016.327 1025.275 2.664
17 1062.911 1 2 1080.910 1082.967 2.792
17 1062.911 1 1 1080.910 1088.674 4.094
18 1125.182 1 1 1143.182 1144.379 0.619
18 1125.182 1 2 1143.182 1151.786 8.992
答案 0 :(得分:3)
如果你没有读完整个文件,你可以使用fgetl
读取第一行,拆分字符串(使用regexp
),然后抓住最后一个元素。
parts = regexp(fgetl(fid), '\s+', 'split');
last = parts{end};
话虽如此,如果您的文件实际上是您的说法,那么您使用textscan
的方式似乎没有任何问题。您可以选择执行以下操作:
parts = textscan(fid, '%s', 3);
last = parts{end}
<强>更新强>
另外,在尝试解析文件之前,请确保使用frewind
回滚文件指针,以确保它从文件顶部开始。
frewind(fid)