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

 


Dernière réponse
Sujet : [VC++]Récupérer des valeurs d'un fichier texte dans des variables !
Flying 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

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
Flying 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
Rebel 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:
z51 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]

Flying 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
z51 Utilise sscanf.
 
if (fgets(Buffer, 255, fStream) )
{
   sscanf(Buffer, """%s""=""s""", chaine1, chaine2);
}
Rebel 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 ??
Rebel 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 ;)
Flying As-tu bien :
#include "stdafx.h" dans ton programme ?
 
Sinon essaies aussi : #include <afx.h>
 
mais avec le premier cela devrait fonctionner ...
 
@+
Flying
Flying 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
Rebel 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 ?
zop 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 .
Flying 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]

Rebel 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 !

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)