Bonjour à tous,
C'est encore moi ! J'ai à présent un problème un peu plus subtile que je souhaiterais résoudre. Je suis en train d'écrire une fonction qui est chargée de récupérer des données à l'aide de fread mais seulement entre certaines bornes prédéfinies. J'ai écrit un code qui fonctionne mais je ne suis pas sûr de récupérer effectivement les données au bon endroit.
Je m'explique, voici d'abord le code simplifié et les commentaires juste après :
Cette fonction prend en paramètre un certain répertoire et des nombres début et fin. Dans la fonction je calcule de nouvelles valeurs entre début et fin, par exemple disons que j'ai debut=1000 et fin=2000. Ensuite, je recherche un répertoire à l'aide du strcat qui contient des données que je veux exploiter depuis un fichier .int (peu importe le format .int, j'ai simplement des données stockées dedans qu'il me faut récupérer). Je l'ouvre (fopen) puis à l'aide du fseek et de fread je voudrais simplement lire ce .int entre debut et fin.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 function X=lire_50(repertoire,debut,fin) debut=(1 + 50*(debut-1)); fin=50*fin; nomfichier0=strcat('C:\MATLAB701\work\IMP\DATA\',repertoire,'\',repertoire,'-50\','Imp1.int'); fid0=fopen(nomfichier0); fseek(fid0,2*debut,'bof'); valeurs_Imp1=fread(fid0,(fin-debut),'short');
Il se trouve que tel que j'ai écris ces lignes, le code fonctionne mais ne semble pas lire les vraies données. Sans le fseek, cela marche aussi mais ce qui est dans valeurs_Imp1 est clairement faux. En effet si je rajoute une ligne valeurs_Imp1_bis=fread(fid0,'short') et qu'ensuite je fais quelque chose comme valeurs_Imp1_bis(debut:fin) je n'obtiens pas les mêmes résultats qu'en intégrant directement fin-debut dans le fread. Bref le problème vient sans doute du fseek et de l'usage du 'short' dans le fread dont je ne peux pas me passer dans le contexte.
Bref, pour résumer c'est assez simple : il faut imaginer que dans le .int j'ai une colonne de données et que je cherche à récupérer seulement ces données entre début et fin, moyennant les problèmes induits par 'short'. J'ai besoin de faire ceci car la fonction va être appelée une bonne centaine de fois
et je voudrais m'éviter de récupérer toutes les données dans valeurs_Imp1 (il y a des millions de nombres dans les .int) mais seulement ce qui nécessaire entre début et fin à chaque fois.
Partager