Salut à tous,
J'ai un petit pb de lecture de fichier unformatted. Je m'explique.
J'ai un programme qui doit tourner à la fois sous environnement Windows et environnement Linux. Tous deux travaillent en double précision (réels codés sur 64 bits).
Ce programme fait appel (entre autres) à un fichier de données. Il est inenvisageable de stocker les données de ce fichier au format texte car les fichiers occuperaient alors plusieurs Go pour conserver une précision suffisante (donc problème de taille, de temps d'accès / lecture / mise en mémoire, etc.)
Le souci vient, vous vous en doutiez, du fait que le unformatted de Windows n'est pas le même que le unformatted de Linux. Tous deux supposent bien les données elles-même en 64 bits et en little endian, donc jusque là tout va bien... sauf que les marqueurs de début et fin de ligne font 32 bits sous Windows et 64 sous Linux. C'est la seule différence.
Sous Windows :
(marqueur de début sur 32 bits) données sur 64 bits little endian (marqueur de fin sur 32 bits) puis rebelote (marqueur de début sur 32 bits) données sur 64 bits little endian (marqueur de fin sur 32 bits)... etc
Sous Linux :
(marqueur de début sur 64 bits) données sur 64 bits little endian (marqueur de fin sur 64 bits) puis rebelote (marqueur de début sur 64 bits) données sur 64 bits little endian (marqueur de fin sur 64 bits)... etc
Auriez-vous une idée pour que je puisse lire un de ces formats sur les deux plateformes (bien sûr c'est ok que le code de l'un soit différent de l'autre, en revanche le fichier de données doit bien rester le même fichier physique) ?
Avec mes fichiers pour l'instant en 64 bits little endian avec marqueurs sur 64 bits (format Linux, donc qui se lisent parfaitement sous Linux), il me suffirait par exemple de pouvoir dire dans le code de la section Windows de "sauter" 32 bits supplémentaires en début et fin de chaque ligne (comme ça 32 sautés automatiquement pour cause d'en-tête 32 bits plus 32 bonus = 64 = gagné)
En sachant enfin qu'éventuellement, je peux changer de format de fichier (donc je peux choisir d'utiliser du 64 le avec marqueur sur 32 bits par exemple... du moment que je m'y tiens et que je ne fais pas cohabiter deux versions) mais que ça ne peut pas être du texte pour les raisons déjà décrites.
Merci de votre aide...
Partager