FORUM Syndrome-OC - Jacky-PC


  Programmation


  Langage haut niveau(C, Pascal...)


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

 




ratur Godet Ln2 et Azote liquide : Xyala, 3 utilisateurs anonymes et 8 utilisateurs inconnus

 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°5789
Deton@tor
Never change, just update...
Posté le 09-06-2005 à 20:36:37  profilanswer
 

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 :-(

mood
Google
Posté le 09-06-2005 à 20:36:37  profilanswer
 

n°5790
nicodache
marmotte en chocolat concept ©
Posté le 09-06-2005 à 20:39:55  profilanswer
 

affiche (cout << ) ce que tu lis, pour voir si déja ca c'est bon...


---------------
modérateur inside [:nicodache] plankaivoo [:nicodache] - ici powered - Je roule en micra 1l 55cv et je t'emmerde :o
n°5791
Deton@tor
Never change, just update...
Posté le 09-06-2005 à 23:35:45  profilanswer
 

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. String 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é :

Citation :


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


 
 
 
 
 

n°5792
Deather2
OpenBSD: the way to go!
Posté le 09-06-2005 à 23:50:57  profilanswer
 

Si tu fais du C++, n'utilise pas les standards C..
fstream est ton ami ;)

n°5793
Deton@tor
Never change, just update...
Posté le 10-06-2005 à 00:00:57  profilanswer
 

En fait j'ai appris le C et j'ai fais quelques heures de C++ en cours. Donc je connais pas les fonctions. Comment on peut utiliser fstream dans mon cas ?

n°5794
Deather2
OpenBSD: the way to go!
Posté le 10-06-2005 à 00:24:23  profilanswer
 

Alors, comment ouvrir un fichier avec fstream:

Code :
  1. #include <fstream>
  2. fstream File("chemin_vers_le_fichier", ios::in | ios::out);  // tu peux ne mettre que ios::int pour readonly, on ios::out pour write only
  3. File.close();


 
Grosso modo c'est comme ca.
Pour les I/O:
http://cplusplus.com/ref/iostream/fstream/index.html
Tres bon site au passage.
En general, on utilise getline ou get, ainsi que les operateurs << et >>. :)
 
et juste un conseil, au lieu de:

Code :
  1. char p_virgule=';';
  2. char saut_de_ligne='\n'


tu fais:

Code :
  1. #define SEMICOLON ';'
  2. #define EOL '\n'


(tu peux mettre en francais si tu veux, note que tout les defines sont en MAJUSCULES ;))
 
Ca bouffera 2 octets en moins et c'est plus propre :D


Message édité par Deather2 le 10-06-2005 à 00:24:58
n°5795
Deton@tor
Never change, just update...
Posté le 10-06-2005 à 01:02:34  profilanswer
 

Erreur trouvée (sur un autre forum) :
 
avant :

Code :
  1. cellule=Tableau->Cells[colonne][ligne].c_str();
  2. fwrite(&cellule,cellule.Length(),1,hfile_enreg);


 
après :

Code :
  1. cellule=Tableau->Cells[colonne][ligne];
  2. fwrite(cellule.c_str(),cellule.Length(),1,hfile_enreg);


 
Ca marche nikel maintenant
 
En résumé, il fallait transformer l'AnsiString en char* au moment de l'écriture dans le fichier ".c_str()" alors que là où il était avant, il ne servait à rien...
 
Sinon merci beaucoup pour le site, je vais étudier ca :jap: Il a l'air pas mal niveau explications :)

n°5796
Deather2
OpenBSD: the way to go!
Posté le 10-06-2005 à 01:32:20  profilanswer
 

Oui, c'est un tres bon site :)
 
Je te conseil, quand tu fais du C++, d'eviter comme la peste les standards C. Il y'a quasiment toujours une fonction C++ equivalente.
Y'a aussi ce site qui est pas mal pour le C++:
http://cppreference.com/
 
Bonne chance :)

mood
Google
Posté le 10-06-2005 à 01:32:20  profilanswer
 


Aller à :
Ajouter une réponse

  FORUM Syndrome-OC - Jacky-PC


  Programmation


  Langage haut niveau(C, Pascal...)


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

 

Hit Parade