Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1764 connectés 

  FORUM HardWare.fr
  Programmation

  [VC++]Récupérer des valeurs d'un fichier texte dans des variables !

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VC++]Récupérer des valeurs d'un fichier texte dans des variables !

n°24246
Rebel
Posté le 12-04-2001 à 12:16:42  profilanswer
 

J'ai un fichier texte style *.ini, qui se présente sous la forme suivante :
 
"CATEGORIE1"="Valeur1"
"CATEGORIE2"="Valeur2"
"CATEGORIE3"="Valeur3"
etc...
 
J'aimerais pouvoir récupérer les valeurs de chaque catégorie pour ensuite les renvoyer des des Edit Box et les modifier par l'intermédiaire d'une dialog box...Coment faire pour récupérer ces valeurs ?
Je précise que je suis sous VC++ et que évidemment, je programme en C++.
J'ai cherché du coté des fonctions fgets(), etc, mais je n'arrive à rien...
Pourriez-vous me dépannez, avez-vous des exemples, des sources, y'a pas moyen de faire ce que je veux avec les MFC ?
 
Merci d'avance !

mood
Publicité
Posté le 12-04-2001 à 12:16:42  profilanswer
 

n°24251
Flying
Posté le 12-04-2001 à 12:33:46  profilanswer
 

Ce n'est peut-être pas la méthode la meilleure pour charger des fichiers mais moi j'emploie le code suivant pour gerer mes fichiers textes et ca fonctionne très bien :
 
CString filename = "unfichier.txt"
CFile fictext;
 
BOOL hr = fictext.Open(filename, CFile::modeReadWrite);
if (hr == 0)
{
//////////////////////////////////////////////////////////
// Le fichier n'existe pas////////////////////////////////
 
}
else
{
 // Fichier existant, on le lit
 CString encours = "";
 CStringArray temp;
 long compteur = 1;
 char data[1];
 char rt[2] = "\r"; char ln[2] = "\n";
 do
 {
  fictext.Read(data, 1);
  if (data[0] != rt[0] && data[0] != ln[0])
   encours = encours + data[0];
  else
  {
   fictext.Seek(1, CFile::current);
   temp.SetAtGrow(compteur, encours);
   compteur++; encours = "";
  }
 }
 while (fictext.GetLength() != fictext.GetPosition());
 fictext.Close();
 
En sortie, tu as un tableau de CString (temp) contenant chacun une ligne du fichier texte.
Il te reste à analyser chaque ligne (.Find) pour trouver à quelle variable cela correspond.
Le nombre d'éléments est dans "compteur" (de 1 à compteur)
 
Si tu as d'autres questions n'hésites pas !
@+
Flying

 

[edit]--Message édité par Flying--[/edit]

n°24254
zop
1 world, 1 web, 1 Windows
Posté le 12-04-2001 à 12:40:14  profilanswer
 

Si ton fichier est un vrai fichier d'initialisation il existe une floppé(e ?) de fonction pré-câblée :
getprivateprofilestring(...)
getprivateprofileint(...)
 
jettes-y un oeil .

n°24269
Rebel
Posté le 12-04-2001 à 13:26:20  profilanswer
 

Justement, ce n'est pas un vrai fichier d'initialisation, je ne peux donc pas utiliser les fonctions "précablées"...
Merci Flying, décidemment, c'est toujours toi qui t'occupes de moi :)
C'est super cool ;)
Par contre, y'a un truc qui va pas : je peux pas compiler, parce que il veut pas que j'utilise CFile comme classe...est-ce qu'elle marche pour une dialogbox ?? Que faut il faire alors ?

n°24272
Flying
Posté le 12-04-2001 à 13:41:16  profilanswer
 

Ben oui cela fonctionne dans une dialogbox, d'ailleurs j'ai fait un copier-coller d'un de mes programmes qui est sous forme de boite de dialogue.
 
Par contre je vois pas pq il veut pas compiler !!!! Il ne faut aucun include je pense.
Qu'as-tu comme message d'erreur ?
 
@+
Flying

n°24273
Flying
Posté le 12-04-2001 à 13:42:48  profilanswer
 

As-tu bien :
#include "stdafx.h" dans ton programme ?
 
Sinon essaies aussi : #include <afx.h>
 
mais avec le premier cela devrait fonctionner ...
 
@+
Flying

n°24394
Rebel
Posté le 12-04-2001 à 18:00:51  profilanswer
 

Non, ben, c'est bon, en fait j'avais pas vu, mais il manquait un ridicule ";" à la fin de la première ligne :)
C'est bête, mais tout plantait, je vais enfin pouvoir continuer : merci à toi ;)

n°24423
Rebel
Posté le 12-04-2001 à 20:41:14  profilanswer
 

Bon, maintenant, j'ai un autre problème :
 
J'ai grâce au code de Flying beaucoup avancé, mais j'ai récupéré des CString sous la forme :
CString szChaine1 = ""CATEGORIE1"="Valeur1"";
Ce qui fait que dans mes EDIT BOX ce sont des trucs du styles :
"CATEGORIE1"="Valeur1" qui apparaissent, avec les guillemets, et le titre de la rubrique (CATEGORIE1), or j'aimerais obtenir à partir de cette CString une CString du genre : Valeur1 : TOUT COURT !
 
Comment puis-je retirer les guillemets, et le "CATEGORIE1" de la chaîne ??

n°24449
z51
Posté le 12-04-2001 à 22:43:48  profilanswer
 

Utilise sscanf.
 
if (fgets(Buffer, 255, fStream) )
{
   sscanf(Buffer, """%s""=""s""", chaine1, chaine2);
}

n°24450
Flying
Posté le 12-04-2001 à 23:12:39  profilanswer
 

Tu peux aussi faire comme cela :
 
CString var = "CATEGORIE1=Valeur1"; // La variable "brute"
CString clean_var = "";          // La variable "nettoyée"
long i, len;
 
len = strlen(var); // Longeur de la chaine
i = var.Find("=", 0); // index d'un caractère de controle
clean_var = var.Mid(i+1, len-(i+1)); // On récupère ce qui nous intéresse
 
@+
Flying

mood
Publicité
Posté le 12-04-2001 à 23:12:39  profilanswer
 

n°24451
z51
Posté le 12-04-2001 à 23:19:53  profilanswer
 

euh ... petite précision : l'utilisation de sscanf remplace tout, fStream pointe sur le fichier ini.
La fonction complète donne ça :
 
char Buffer[256], chaine1[256], chaine2[256];
FILE *fStream = fopen("toto.ini", "r" );
if (fStream)
{
   while (fgets(Buffer, 255, fStream) )  
   {  
      sscanf(Buffer, """%s""=""%s""", chaine1, chaine2);  
   }
}
 
bon évidemment dans mon exemple t'écrase chaine1 et chaine2 à chaque fois, faut affiner...

 

[edit]--Message édité par z51--[/edit]

n°24458
Rebel
Posté le 13-04-2001 à 00:44:36  profilanswer
 

Bon, et bien un grand merci à vous deux, pour la lecture, maintenant, c'est no problemo :) !
Ca marche impec' ! Par contre, je me heurte à un autre problème (eh oui, encore, le chemin pour arriver à la connaissance est long et semé d'embûches ;)), et pas des moindres : l'enregistrement...
Toutes les chaînes que j'ai récupéré dans mes editbox sont modifiées, et j'aimerais enregistrer les modifications, comment dois-je faire ?
Vous me ferez pensez à vous offrir un cadeau à Noël parce que sans vous je me serais surement pendu à l'heure qu'il est  :crazy:

n°24462
Flying
Posté le 13-04-2001 à 01:11:47  profilanswer
 

Bah tu effaces le fichier et en ré-écrit un nouveau.
 
Vois la documentation pour info complète (CFile)
 
Methode Write() pour écrire
CFile::Remove() pour effacer
BOOL hr = fictext.Open(filename, CFile::modeReadWrite|CFile::modeCreate); pour créer le fichier
 
Bonne nuit
Flying


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [VC++]Récupérer des valeurs d'un fichier texte dans des variables !

 

Sujets relatifs
fichier texte en php[JAVA] Comment récupèrer l'encoding d'un document XML ???
!!!!!!!!!!! Index Server + fichier exotiques !!!!!! ?Passer des variables dans un lien vers un autre fichier en PHP
un moyen d'afficher toutes les variables serveur en phpfichier ZIP avec bad CRC dans un seul fichier....comment réparer?
[VC++] et passage de valeurs[VB] Comment fait-on pour lire/recuperer des donnees avec BD Access?
Plus de sujets relatifs à : [VC++]Récupérer des valeurs d'un fichier texte dans des variables !


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR