Is it possible to use two textscan statements in a row ?
    3 ビュー (過去 30 日間)
  
       古いコメントを表示
    
Hello,
I am trying to extract some data from a text file.
My text file contains several lines written this way:

I want to extract the parameters after the colons.
Here's my code :

It is supposed to return me C1 = "Mars 2022" and C2 = "16:17:50".
I get the following error message :

It seems like I cannot use two textscan statements in a row. In the workspace, C1 = "Mars 2022" but C2 is an empty cell.
Two additional questions :
- how to handle the empty string after 'nom' ? I would like that C3 = "".
- 'affaire' has multiple occurences within my textfile, but I'm only interested in the first one. How to do so ?
Any help would be greatly appreciated,
Gwendal
採用された回答
  Stephen23
      
      
 2022 年 3 月 28 日
        
      編集済み: Stephen23
      
      
 2022 年 3 月 28 日
  
      "Is it possible to use two textscan statements in a row ?"
Yes, you can call TEXTSCAN as many times as you want on one file, I have often used this to read blocks of data separated by intermediate "header" lines. Quite handy, but probably not the best approach for your data file.
str = fileread('textscan_error.txt');
tmp = regexpi(str,'(?<=INFORMATION\s*\{\s*)[^\}]+','once','match');
tkn = regexp(tmp,'(\w+)\s*:\s*"([^"]*)','tokens');
tkn = vertcat(tkn{:}).';
out = struct(tkn{:})
out.heure
out.affaire
If you really want to use TEXTSCAN:
opt = {};
fmt = '%s:%q';
[fid,msg] = fopen('textscan_error.txt','rt');
assert(fid>0,msg)
str = 'X';
while ~startsWith(str,'INFORMATION')
    str = fgetl(fid);
end
tmp = textscan(fid,fmt,opt{:});
fclose(fid);
tmp{:}
その他の回答 (0 件)
参考
カテゴリ
				Help Center および File Exchange で Characters and Strings についてさらに検索
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

