Bonjour,
Je cherche désespérément à lire des données dans un fichier texte (tab-delimited), et assigner ces données à des variables dont les noms sont aussi à récupérer dans le header du fichier en question.
Le fichier est organisé de manière assez classique :
- la première ligne contient une info pas utile
- la deuxieme ligne contient les noms des variables que je souhaite utiliser
- les lignes suivantes contiennet les données que je souhaite assigner aux variables sus-mentionnées
J'ai donc tant bien que mal écrit le script suivant, qui ne me fait pas d'erreur à la compilation, mais le résultat ne me convient pas. En effet il semble que les variables ne sont pas reconnues comme telles, mais plutôt comme des cell arrays.
Ca m'arrangerait beaucoup si vous pouviez jeter un oeil sur ce code. Je suis assez confus par rapport à l'utilisation des structures ou des cell arrays en particulier.
J'ai mis en PJ un exemple de fichier que je veux traiter. A noter que j'utilise la fonction 'readline' disponible ici :
http://www.mathworks.com/matlabcentr...exchange/20026
Un énorme merci pour votre aide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 clear all; close all; numsujet = 3; % le numero du sujet numsession = 1; % la session fname = ['chemin/Encodage' num2str(numsession) '_Sujet' num2str(numsujet) '_Data.txt']; % Open text file fid = fopen(fname); % Find out number of rows in file r=0; x=0; % Loop through data file until we get a -1 indicating EOF while(x~=(-1)) x=fgetl(fid); r=r+1; end r = r-1; % nb of rows disp(['Number of rows = ' num2str(r)]) frewind(fid); % Create varnames from second line of datafile Vs = readline(fname,2); colheaders = textscan(Vs,'%s'); colheaders = genvarname(colheaders{1,1}); c = length(colheaders); % nb of columns disp(['Number of columns = ' num2str(c)]) fclose(fid); % Use textscan to read each field as (possibly quoted) text % Then step through every text field and replace it with an actual % number if sscanf can convert it to one. for i=3:r; line_i = readline(fname,i); line_i = textscan(line_i,'%q','delimiter','\t'); for j=1:c; parsedisnum = sscanf(line_i{1,1}{1,1},'%f'); % case sscanf fails to detect a float if isempty(parsedisnum) || numel(parsedisnum)<1 a = line_i{1}(j); % case sscanf detects a float else a = parsedisnum; end suj.(colheaders{j})(i-2) = a; end end
Partager