begin process at 2012 02 11 08:13:58
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Divers

 > 

Débutant(e)

 > 

Dynamic Array renvoyant une erreur de lecture


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Dynamic Array renvoyant une erreur de lecture

vendredi 27 juin 2008 à 15:41:55 | Dynamic Array renvoyant une erreur de lecture

christophedlr

Membre Club
Bonjour,
Je souhaite pouvoir lire dans un fichier.
Je veux que la variable prenne la taille des données à lire dans le fichier, j'ai donc pensé à un Array of Char auquel j'affecte la taille en question.

Mais voici l'erreur :
Le projet FicEditor.exe a provoqué une classe d'exception EInOutError avec le message 'Lecture au-delà de la fin de fichier'.

Et voici le code :
procedure FEFFormat.ReadFileXML(var Character: String; var Place: String;
        var Idea: String; var Fic: String);
begin
BlockRead(F, CRCFile, 4);
BlockRead(F, SizeFile, 4);

SetLength(FileXML, SizeFile);
BlockRead(F, FileXML, SizeFile);
end;

FileXML est du type Array of Char.
J'ai tenté avec un Array [1..34] of Char et ça fonctionne sans problème.
donc j'en déduit que le soucis provient du Dynamic Array.

Merci d'avance pour l'aide.
vendredi 27 juin 2008 à 17:23:13 | Re : Dynamic Array renvoyant une erreur de lecture

florenth

Membre Club
Réponse acceptée !
Salut,

Bon, alors il y a un truc bon à savoir avec les tableaux dynamiques et les string, c'est leur structure interne.

En fait, FileXML ne renvoie pas vers le tableau mais vers sa taille ! (celle que tu récupères en faisant Length()- oui je sais c'est pas super évident au premier abord).
Pour faire une lecture correcte, il faut donc indiquer FileXML[0] dans BlockRead().

Après, il faut aussi voir si ta variable SizeFile est bien correcte ou non, et pour le savoir, il faudrait voir le code d'écriture.

A+
Flo

PS: c'est vrai que changer tout son code est gonflant, n'empèche que si tu fais un autre programme, tu essayeras de penser aux TStream et compagnie, ça risque de simplifier la vie. Bon j'arrète avec ça.

Ressources Delphi, sources, tutoriaux, actu, ...: www.mx-dev.net [ Lien ]
vendredi 27 juin 2008 à 17:41:30 | Re : Dynamic Array renvoyant une erreur de lecture

christophedlr

Membre Club
Merci pour l'information Florenth, je teste cela se soir.

P.S.: Pas de soucis, j'y penserais, je me rendais compte qu'il allait falloir tôt ou tard penser a passer vers les streams.
vendredi 27 juin 2008 à 18:59:37 | Re : Dynamic Array renvoyant une erreur de lecture

cirec

Membre Club Administrateur CodeS-SourceS
Salut,

j'ai bien compris que tu n'aimes pas tellement utiliser les Streams ... mais moi j'aime pas utiliser BlockWrite/Read etc

donc l'exemple est fait avec les Streams ... c'est juste pour te prouver que ça fonctionne

procedure TForm1.Button1Click(Sender: TObject);
var fs: TFileStream;
    ac: arrayof char;
begin
  fs := TFileStream.Create('EnlargeImage.bin',  fmOpenReadWrite);
  try
    SetLength(ac, fs.size);
    fs.ReadBuffer(ac[0], fs.Size-1);
    RichEdit1.Lines.Text := PChar(ac);
  finally
    Finalize(ac);
    fs.free;
  end;
end;


 
@+
Cirec

vendredi 27 juin 2008 à 19:44:17 | Re : Dynamic Array renvoyant une erreur de lecture

florenth

Membre Club
Rahhh mais non Cirec, il veut pas lire tout le fichier puisqu'il y a un CRC avant puis la taille du bloc "richedit".
Et d'ailleurs, rien ne te dit qu'il n' y a rien après dans le fichier...
vendredi 27 juin 2008 à 20:01:39 | Re : Dynamic Array renvoyant une erreur de lecture

christophedlr

Membre Club
Pas grave Florenth, au moins le code de Cirec me donne un aperçus de la façon de faire avec les streams ce qui en effet m'aidera pour quand j'y passerais, au moins y aura déjà des questions que je n'aurais pas besoin de poser ;)
vendredi 27 juin 2008 à 21:45:23 | Re : Dynamic Array renvoyant une erreur de lecture

christophedlr

Membre Club
Florenth,
Merci pour l'information, cela fonctionne à merveille.
Par contre petite chose, autrement que en faisant une boucle, y a une fonction déjà toute prête pour ensuite utiliser le contenu de mon Dynamic Array dans un String ?
vendredi 27 juin 2008 à 22:00:20 | Re : Dynamic Array renvoyant une erreur de lecture

christophedlr

Membre Club
C'est bon, un simple PChar autour de mon Dynamic Array suffisait ;)
samedi 28 juin 2008 à 10:31:14 | Re : Dynamic Array renvoyant une erreur de lecture

florenth

Membre Club
Sinon, autrement, tu peux utiliser exactement la même technique avec un string :


var
  S: string;
  FileSize: Integer;
begin
  [...]
  SetLength(S, FileSize);
  BlockRead(F, S[1], FileSize);  // version "ancienne"
  FileStream.ReadBuffer(S[1], FileSize); // version "flux"
  [...]
end;


Attention toutefois, les chaînes sont indexées à partir de 1, donc c'est S[1] pour les chaînes qu'il faut transmettre, alors que c'est bien Tab[0] pour les "array of ...".

Ouais, je sais, c'est un peu piégeux !

Ressources Delphi, sources, tutoriaux, actu, ...: www.mx-dev.net [ Lien ]
samedi 28 juin 2008 à 10:32:16 | Re : Dynamic Array renvoyant une erreur de lecture

christophedlr

Membre Club
ok, merci pour l'information Florenth.

1 2

Cette discussion est classée dans : string, erreur, var, array, dynamic


Répondre à ce message

Sujets en rapport avec ce message

Dynamic array vers Fichier [ par balgrim ] J'AI BESOIN D'AIDE !!! Comment envoyer tout un tableau dynamique constitué de classe dans un fichier sans devoir sauvegarder chaque variable 1 par 1.. Fonction qui retourne un array of string [ par arthur07 ] DR@G Bonjour, J'aurais besoin d'aide pour une fonction qui doit retourné un tableau. function Query(Query : string) : arr String et Array [ par xionoxid ] Bonjour C'est une très bete question : à propos des String et Array je voudrais enregistrer la valeur de "paramstr(1); " dans path pour le faire execu BlockRead [ par dxh_master ] Salut a tous je vous en suppppppplie aider moi avec block read voila ma fonction qui me donne erreur e/s 998 : Function Readhexa(Fichier:string;offese Passer d'un String à un dynamic Array et inversement [ par christophedlr ] Bonsoir,J'ai remarqué que pour qu'une donnée s'écrive correctement dans un fichier avec BlockWrite, il fallait un array of  char (par exemple).Mais j' [TP7] Concaténér une chaîne [ par ghuysmans99 ] Bonjour à tous.Je suis en train de faire une fonction de cryptage xor en Turbo Pascal 7.Seul petit problème : il ne veut pas ajouter le caractère cryp Manipuler un tableau dynamique dans une procédure [ par Enkidou ] Bonjour,j'ai un tableau dynamique que j'envoie en paramètre par adresse à une procédure.Cependant lorsque j'essaie de l'y redimensionner il me sort un String & Tstring [ par bidulchouette ] Tout d'abord bonjour a tous, bonne année et meilleurs voeux!!!!Voila je suis en trin de travailler sur une application qui permet incompatibilité de types [ par domsig ] bonjour à tous pour le boulot j'écris un programme en delphi5 qui doit effacer des fichiers. Quand je compile mon source j'ai une erreur "Types incomp Pointeur sur une instance d'objet [ par Hnimsgern ] Bonjour,J'ai besoin d'un tel pointeur pour avoir accés aux variables et aux fonctions d'un objet. L'objet instancié (partiel) est le suivant :type TRe


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,278 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales