1

I have a number of text files with data, and want to read a specific part of each file (time information), which is always located at the end of the first row of each file. Here's an example:

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

I.e. I would like to get "12:27:20".

I've tried using textscan, which I have used before for similar problems. I figured there are 3 columns of this row, with single white space as delimiter.

I first tried to specify these as strings (%s):

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

I also tried to specify the date and time using datetime format:

time = textscan(fid,'%s %{dd-MMM-yyyy}D %{HH:mm:ss}D')

Both of these just produce a blank cell. (I've also tried a number of variations, such as defining the delimiter as ' ', with the same result)

Thanks for any help!

Here's the entire file (not sure pasting here is the right way to do this - i'm new to both matlab and 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
Suever
  • 64,497
  • 14
  • 82
  • 101
Neuroguy
  • 131
  • 1
  • 1
  • 9

1 Answers1

3

If you're not reading in the entire file, you could just read the first line using fgetl, split on the strings (using regexp) and then grab the last element.

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

That being said, there doesn't seem to be anything wrong with the way you're using textscan if your file is actually how you say. You could alternately do something like:

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

Update

Also, be sure to rewind the file pointer using frewind before trying to parse the file to ensure that it starts at the top of the file.

frewind(fid)
Suever
  • 64,497
  • 14
  • 82
  • 101
  • thanks for the response! I tried playing around with regexp and fgetl, but wasn't able to make it work.. In the end, I did this in shell (awk), which was easier for me since I'm used to working in unix (but i'm learning matlab, so this was still useful) – Neuroguy Aug 30 '16 at 15:00
  • @Neuroguy Can you post your actual file? Clearly it isn't what you think it is. – Suever Aug 30 '16 at 15:00
  • i pasted what was in the file, but for some reason some of the line breaks are missing, so it appears different.. anyway, only interested in the top row for now, so maybe this will do.. is there a pay to upload the actual file here? – Neuroguy Aug 30 '16 at 15:25
  • @Neuroguy If you copy/paste what you just pasted into your question into a new file and then try to run your code, does it work? – Suever Aug 30 '16 at 15:26
  • I tried now, and the same result.. Ending up with an empty cell – Neuroguy Aug 30 '16 at 15:31
  • @Neuroguy And you're sure you're not reading anything from the file before trying to process it with `textscan`? If you do, you have to call `frewind(fid)` first – Suever Aug 30 '16 at 15:47
  • yes! that solved it, thanks a lot! Like you suggested, my script read subsequent lines earlier - i didn't realize that it was continuing from where it last read (stopped). That was useful lesson to learn - thanks again! – Neuroguy Aug 31 '16 at 18:51
  • @Neuroguy I added this clarification to the answer above. – Suever Aug 31 '16 at 20:43