2016-08-29 654 views
1

我有許多帶有數據的文本文件,並且想要讀取每個文件(時間信息)的特定部分,它總是位於第一個每個文件的行。這裏有一個例子:Matlab(textscan),從指定的列和行中讀取字符

%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和計算器..):

%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 

回答

2

如果你不是在整個閱讀文件,你可以使用fgetl讀取第一行,分割字符串(使用regexp),然後抓取最後一個元素。

parts = regexp(fgetl(fid), '\s+', 'split'); 
last = parts{end}; 

話雖這麼說,似乎沒有要什麼毛病你使用textscan如果你的文件實際上是怎麼說的方式。你可以交替做類似:

parts = textscan(fid, '%s', 3); 
last = parts{end} 

更新

另外,一定想解析該文件以確保它開始在文件的頂部之前倒帶利用frewind文件指針。

frewind(fid) 
+0

感謝您的迴應!我試着玩正則表達式和fgetl,但無法使它工作..最後,我在shell(awk)中做到了這一點,這對我來說更容易,因爲我習慣於在unix中工作(但我'm學習matlab,所以這仍然有用) – Neuroguy

+0

@Neuroguy你能發佈你的實際文件嗎?顯然這不是你所想的。 – Suever

+0

我粘貼了文件中的內容,但由於某些原因,某些換行符丟失了,所以它顯得不同..無論如何,只對現在的頂行感興趣,所以也許這樣做..是否有支付在這裏上傳實際的文件? – Neuroguy

相關問題