[C++] TStringGrid vers Fichier => Help !!!

TStringGrid vers Fichier => Help !!! [C++] - C++ - Programmation

Marsh Posté le 09-06-2005 à 20:43:26    

Salut à tous,
 
Je suis en 1ere année de BTS Informatique et réseau et je fais un stage de 6 semaines en entreprise.
 
Mon projet est la création d’une interface permettant de saisir et modifier des champs a partir d’un fichier .CSV.
 
Ce fichier est sous forme de textes séparé par des points-virgules pour délimiter les colonnes et des retours chariot (\n) pour les lignes.
J’ai donc décider de le lire le fichier caractère après caractère en détectant les « ; » et « \n » pour tout insérer dans une TStringGrid.
Mais pour réécrire le tout dans un nouveau fichier, je n’ai que des hiéroglyphes.
 
J’utilise le fread pour lire. Mais pour écrire, j’ai des petits problemes avec fwrite.
 
Help-me SVP, sinon j’aurrai une sale note a mon projet  :cry:

Reply

Marsh Posté le 09-06-2005 à 20:43:26   

Reply

Marsh Posté le 09-06-2005 à 23:23:49    

fread et fwrite c'est du C, pas du C++ :o
Il faudrait que tu postes un petit bout de code de comment t'écris.  
Je devine que tu balances des AnsiString directement dans le fichier (chaînes Borland/C++ mélangées à des fonction C... ça ne fait pas bon ménage)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 09-06-2005 à 23:46:55    

Ben c'est peut-etre un peu ca  :sweat:  
 
 
En fait, les données sont OK, même à l'affichage, c'est juste quand je l'écris ds le fichier que ca ne va pas.
 
Mon bout de code permettant l'écriture :
 

Code :
  1. int colonne=1;
  2. int ligne=1;
  3. char p_virgule=';';
  4. char saut_de_ligne='\n';
  5. FILE *hfile_enreg = fopen("totosave.csv","a" );   // fichier destination
  6. AnsiString cellule;  // chaine contenant la case du tableau
  7.         do
  8.         {
  9.         colonne=1; // initialise à la 2eme colonne (la 1ere colonne du tableau est fixe)
  10.                 do
  11.                 {
  12.                 cellule=Tableau->Cells[colonne][ligne].c_str();  // on met la case du tab ds cellule
  13.                 fwrite(&cellule,cellule.Length(),1,hfile_enreg);  // On écrit la cellule ds hfile_enreg
  14.                 fwrite(&p_virgule,1,1,hfile_enreg);  // On ecrit un point-virgule au changement de colonne
  15.                 colonne++;
  16.                 }while(colonne<=22); // jusqu'à 22 colonnes
  17.         ligne++;
  18.         fwrite(&saut_de_ligne,1,1,hfile_enreg); // on insere le caractere '\n' a chaque fin de ligne
  19.         }while(ligne<Tableau->RowCount); // jusqu'a balayage total du tableau
  20. }


 
Contenu Brut du fichier de départ :

Citation :


od2_A21103C;Con_gelifica;ANA;EQUIP1;OW23531;100;0;300;0;300;0;Cp;;WINGATES;VALEUR;;N;;;;;
od2_A21103M;Mes_gelifica;ANA;EQUIP1;OW23530;100;0;300;0;300;0;Cp;;WINGATES;VALEUR;;N;;;;;
od2_A21103V;Van_gelifica;ANA;EQUIP1;OW23532;100;0;100;0;100;0;%;;WINGATES;VALEUR;;N;;;;;
od2_A21302C;Con_av_pots;ANA;EQUIP1;OW23534;100;0;300;0;300;0;Cp;;WINGATES;VALEUR;;N;;;;;
od2_A21302M;Mes_av_pots;ANA;EQUIP1;OW23533;100;0;300;0;300;0;Cp;;WINGATES;VALEUR;;N;;;;;


 
Contenu brut du fichier d'arrivé obtenu :

Citation :


€óŠ ÷ Šy;˜óŠ ÷ Šy@;´óŠ;ÄóŠ ÷;ØóŠ ÷;ìóŠ;ü; ôŠ;;,ôŠ;<;Lô;;€óŠ ÷ ;˜óŠ ÷;;€;;;;;;
€óŠ ÷ Šy;˜óŠ ÷ Šy@;´óŠ;ÄóŠ ÷;ØóŠ ÷;ìóŠ;ü; ôŠ;;,ôŠ;<;Lô;;€óŠ ÷ ;˜óŠ ÷;;€;;;;;;
€óŠ ÷ Šy;˜óŠ ÷ Šy@;´óŠ;ÄóŠ ÷;ØóŠ ÷;ìóŠ;ü; ôŠ;;,ôŠ;<;L;;€óŠ ÷ ;˜óŠ ÷;;€;;;;;;
€óŠ ÷ Šy;˜óŠ ÷ Šy;°óŠ;ÀóŠ ÷;ÔóŠ ÷;èóŠ;ø;ôŠ;;(ôŠ;8;Hô;;€óŠ ÷ ;˜óŠ ÷;;€;;;;;;
€óŠ ÷ Šy;˜óŠ ÷ Šy;°óŠ;ÀóŠ ÷;ÔóŠ ÷;èóŠ;ø;ôŠ;;(ôŠ;8;Hô;;€óŠ ÷ ;˜óŠ ÷;;€;;;;;;


 
Comme il y a surement plus propre comme code, si vous avez un petit morceau de code, ca serait super!
 
THX d'avance :hello:


Message édité par Deton@tor le 10-06-2005 à 00:46:46
Reply

Marsh Posté le 09-06-2005 à 23:56:36    

C'est quoi ça comme type "String" ? :??: std::string ? ou AnsiString ?
 
// On écrit la cellule ds hfile_enreg
en fait tu écris l'adresse de la cellule :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 10-06-2005 à 00:15:44    

Je sais bien que mon code n'est pas terrible...

 

Mon but est d'écrire des AnsiString venant du tableau dans un fichier texte.

 

Toutes les idées sont les bienvenues :jap:


Message édité par Deton@tor le 29-02-2008 à 03:27:49
Reply

Marsh Posté le 10-06-2005 à 00:21:14    

Réponds à ma question :o
Et vire le & devant "cellule" quand tu l'écris...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 10-06-2005 à 00:28:22    

C'est du AnsiString, j'ai mal recopié le code en écrivant.
Si je vire le &, Borland me dit :
Mauvaise correspondance de type dans le paramètre '__ptr'('const void*' désiré, 'AnsiString' obtenu)


Message édité par Deton@tor le 29-02-2008 à 03:28:17
Reply

Marsh Posté le 10-06-2005 à 00:37:06    

bah oui mais il manque un c_str() à la fin :o (par contre à la ligne d'au-dessus il est inutile).
fwrite il connaît pas les AnsiString
(puis une AnsiString c'est un objet dans un fichier c'est pas super utile...)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 10-06-2005 à 00:44:54    

A ouai, ca marche nikel comme ca.
Je pensais qu'il fallait le mettre à la case du tableau directement le c_str().
 
Bon cela à été résolu rapidement merci encore antp :jap:
 
PS. :o   :D

Reply

Marsh Posté le 10-06-2005 à 00:45:59    

c_str() génère un char*, pour les échanges avec des fonctions C donc (ou pour les trucs de C++ qui ne sont pas faits par Borland, càd pas prévus pour des AnsiString)


Message édité par antp le 10-06-2005 à 00:46:32

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 10-06-2005 à 00:45:59   

Reply

Marsh Posté le 10-06-2005 à 00:50:14    

A OK merci pour toutes ces infos tu me sauves mon projet car sans écriture dans un fichier, ca n'aurrai plus d'interêt.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed