2016-08-29 8 views
1

У меня есть несколько текстовых файлов с данными и вы хотите прочитать определенную часть каждого файла (информацию о времени), которая всегда находится в конце первого строка каждого файла. Вот пример:Matlab (textscan), читать символы из указанного столбца и строки

%termo2, 30-Jan-2016 12:27:20 

I.e. Я хотел бы получить "12:27:20".

Я пробовал использовать textscan, который я использовал ранее для подобных проблем. Я понял, что есть 3 столбца этой строки, с одним пробелом в качестве разделителя.

Я первый попытался указать их как строки (%s):

fid = fopen(fname); 
time = textscan(fid,'%s %s %s'); 

Я также попытался указать дату и время, используя формат DATETIME:

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 

ответ

2

Если вы не читаете во всей файл, вы можете просто прочитать первую строку, используя fgetl, разделить на строки (используя regexp), а затем захватить последний элемент.

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

Это, как говорится, не кажется, нет ничего плохого с тем, как вы используете textscan если ваш файл на самом деле, как вы говорите. Вы можете поочередно сделать что-то вроде:

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

Update

Кроме того, не забудьте перемотать указатель файла с помощью frewind, прежде чем пытаться разобрать файл, чтобы убедиться, что он начинается в верхней части файла.

frewind(fid) 
+0

благодарит за отзыв! Я пытался играть с regexp и fgetl, но не смог заставить его работать. В конце концов, я сделал это в shell (awk), что было проще для меня, так как я привык работать в unix (но я 'm learning matlab, так что это было по-прежнему полезно) – Neuroguy

+0

@Neuroguy Можете ли вы разместить свой файл? Понятно, что это не так, как вы думаете. – Suever

+0

Я вставлял то, что было в файле, но по какой-то причине некоторые из разрывов строк отсутствуют, поэтому он выглядит по-другому .. во всяком случае, интересуется только верхней строкой, так что, возможно, это будет сделано .. есть ли плата за загрузите настоящий файл здесь? – Neuroguy