Bonjour à tous,

j'aimerais de l'aide pour m'aider à comprendre l'utilisation de la fonction textscan.
Mon fichier se compose d'une en-tête avec différents paramètres que je lis en limitant la lecture complète comme ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
data = textscan(fid, '%s',30, 'delimiter', '\n', 'whitespace', ''); % lit les 30 premières lignes entières
En fonction de cette en-tête, je sais que je vais avoir 420 fois un ensemble de données à lire, le numéro de la ligne où ça va commencé. L'ensemble des données se présente sous la forme suivante : 44 lignes de 44 valeurs séparées par des virgules.
Pour les lire, j'utilise ce code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
delimString = repmat('%d', 1, 44); 
for a=1:420
    startLine = ligne_debut_premiere_frame+(a-1)*(44+2); %correspond vraiment au numéro de ligne de chaque début d'ensemble des données
    Y{a} = cell2mat(textscan(fid, delimString, 44, 'headerlines', 44-1, 'delimiter', ','));
end
Pour la première itération, j'ai bien mon premier ensemble de données, pour le second je n'ai plus que 23 lignes puis je passe à 21 lignes jusqu'à la 28ème itération et finalement, Y{a>28} est vide...

Pourtant si je teste la lecture de mon premier ou dernier ensemble cela fonctionne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
fid = fopen(filename); % ouvre le fichier
temp1=cell2mat(textscan(fid, delimString, 44, 'headerlines', 25-1, 'delimiter', ','));
fclose(fid)
fid = fopen(filename); % ouvre le fichier
temp2=cell2mat(textscan(fid, delimString, 44, 'headerlines', 19299-1, 'delimiter', ','));
fclose(fid)
Par contre, cela ne fonctionne plus dès lors que j'enchaine les textscan. En reprenant, la lecture du premier et du dernier, par exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
fid = fopen(filename); % ouvre le fichier
temp11=cell2mat(textscan(fid, delimString, 44, 'headerlines', 25-1, 'delimiter', ','));
temp21=cell2mat(textscan(fid, delimString, 44, 'headerlines', 19299-1, 'delimiter', ','));
fclose(fid)
J'obtient ce que je veux dans "temp11" mais "temp21" est vide.

Y'aurait-il un truc que je n'aurais pas vu ? Bien sûr si j'ouvre et ferme à chaque itération le fichier, ça doit fonctionner mais quand même, y'a plus jolie !!!

Merci de votre aide

Christophe