C++ Lire Fichier Dat File

Signaler
Messages postés
4
Date d'inscription
lundi 19 mai 2008
Statut
Membre
Dernière intervention
22 juin 2010
-
Messages postés
4
Date d'inscription
lundi 19 mai 2008
Statut
Membre
Dernière intervention
22 juin 2010
-
Bonjour,
j'aurais une question sur la lecture de fichier en C++ a partir d'un code matlab effectué.
Voici le code matlab tout dabord

function [intensity] = readHi3D(filename)

mark = 0;
ccdx = 1536;
ccdy = 512;
q = fopen(filename);
fseek(q, 0, 'eof');
filesize = ftell(q);
fseek(q,0,'bof');
numcolumns = 1536;
numprofiles = filesize/4/numcolumns;
raw8 = fread(q,[3*ccdx + mark, inf], '4616*uint8', 3*ccdx + mark);
fclose(q);
size(raw8);
intensity = raw8(1 + mark:ccdx + mark,:)';
lb = raw8(ccdx+mark+1:2:3*ccdx+mark-1,:)';
hb = raw8(ccdx+mark+2:2:3*ccdx+mark,:)';
range = double(lb) + double(hb)*256;


Ce code permet de lire un fichier du format .dat qui quand on l'ouvre par exemple avec un traitement de texte affiche par exemple
 *440<.**0,2,:24@:<:DH6D<`:8>>>.H<:H6@44HD(  


et lorsqu'on affiche ce fichier avec matlab on obtient une matrice
0 0 0 0 1 1 2
par exemple.

Le code matlab traduit donc les caracteres en chiffre: Le fichier est donc "crypté" on dira pour me simplifier les mots. La traduction en matlab se fait avec le
fread(q,[3*ccdx + mark, inf], '4616*uint8', 3*ccdx + mark); 

qui precise donc le fichier a traduire (q), puis si jai bien compris la taille , le type de byte. A = fread(fileID, sizeA, precision, skip).

Il faudrait a present que je fasse de meme en C++. Les fonction ifstream sont possibles, je peux ouvrir un fichier, je peux le ""lire"" mais je n'obtient pas dutout le meme resultat. Il faudrait que je convertisse les caracteres en chiffre. Et voici la question . Comment peut on ecrire cela en C++ ?
Car lire un simple fichier avec des lettres ou chiffre je sais faire, mais quand j'ai un fichier avec des caracteres cryptés je ne vois pas comment faire. Il faut peut etre preciser les bytes ou je ne sais pas.

Pouvez vous m'aider , cela serait tres gentil de votre part.
Cela peut etre une aide en anglais ou francais ou meme allemand ... cela ne me pose pas de probleme.

Je vous remercie par avance ,
bonne journée

3 réponses

Messages postés
14839
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
12 octobre 2020
92
Hello,
Tu peux, dans un premier temps, utiliser les fonctions fopen(), fseek(),... qui sont disponibles en C. Après, une fois que ton code fonctionnera, tu pourras le "traduire" en C++ avec les ifstream


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
3819
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
28 septembre 2020
113
Un petit exemple de lecture écriture d'un tableau d'entier dans un fichier:
#include 
#include <fstream>

bool read(const std::string& filename, int* buff)
{
  std::ifstream file(filename.c_str(), std::ios::binary);
  if (!file)
    return false;

  file.read((char*)buff, 5 * sizeof (int));

  for (int i = 0; i < 5; ++i)
    std::cout << buff[i] << " ";
  std::cout << std::endl;
  file.close();
}

bool write(const std::string& filename, int* buff)
{
  std::ofstream file(filename.c_str(), std::ios::binary);
  if (!file)
    return false;
  file.write((char*)buff, 5 * sizeof (int));
  file.close();
}

int main()
{
  int buff[1024];
  if (read("file.dat", buff))
    std::cout << "Read succeed !" << std::endl;
  else
    std::cerr << "File not found !" << std::endl;


  buff[0] = 45;
  buff[1] = 3;
  buff[2] = 187565;
  buff[3] = 56;
  buff[4] = 190;

  if (write("file.dat", buff))
    std::cout << "Write succeed !" << std::endl;
  else
    std::cerr << "Can't write to file !" << std::endl;

  return 0;
}


_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
Messages postés
4
Date d'inscription
lundi 19 mai 2008
Statut
Membre
Dernière intervention
22 juin 2010

Merci,
Cest donc bien ce que javais codé, et le probleme vient donc je pense de la taille des bytes dans le read avec le 5 * sizeof (int) quil faut adapter de mon code matlab. Mais bon je pense avoir reussi mais je ne trouve pas les memes chiffres entre le resultat matlab et c++. Mais merci de mavoir aider en tout cas.
Ca ma permis de voir vraiment ce qui nallait pas.

Bonne journée