IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Question lecture/enregistrement d'un TStringGrid [Débutant]


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Par défaut Question lecture/enregistrement d'un TStringGrid
    Salut,

    J'ai un fichier.txt avec des valeurs séparées par un ";" et je l'affiche dans un TStringGrid
    Grâce à la fonction GoEditing ( je crois que c'est son nom ) je peux éditer directement le TStringGrid et quand je ferme le Form1, il enregistre automatiquement les nouvelles valeurs du StringGrid dans un autre fichier .txt

    Problème:

    1/je voudrais que ce soit le premier fichier ( que j'utilise pour mettre les valeurs dans le StringGrid qui soit écrasé )

    2/ Quand je compile mon projet, il me demande le chemin du fichier .txt pour remplir le StringGrid, ya possibilité qu'il prenne toujours le même fichier qui est dans le répertoire du projet sans me demander à chaque fois le chemin ?

    Voici la lecture et l'enregistrement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
     
     
    int j, row;
    		TReplaceFlags Flags = Flags << rfReplaceAll;
     
    		AnsiString T1 = "Qualité\n";
    		AnsiString T2 = "Prénom\n";
    		AnsiString T3 = "Nom\n";
                    AnsiString T4 = "Poste\n";
                    AnsiString T5 = "Email\n";
                    AnsiString T6 = "Prononciation\n";
     
     
    		AnsiString N =  T1 + T2 + T3 + T4 + T5 + T6;
     
    		if(OpenDialog1->Execute())
    		{
    			TStringList *Fichier = new TStringList;
    			Fichier->LoadFromFile(OpenDialog1->FileName);
    			AdvStringGrid1->RowCount = Fichier->Count+1; // + 1 ligne grisée
     
    			// titres des colonnes
    			AdvStringGrid1->Rows[0]->Text = N;
    			for(j = 0; j < Fichier->Count; j++)
    			{
    				row = j+1;
    				AdvStringGrid1->Rows[row]->Text = StringReplace(Fichier->Strings[j], ";", "\n", Flags);
     
    			}
    			Fichier->Clear();
    			delete Fichier;
     
    		}
     
    }
     
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
    {
    int i,j;
    TStringList *StrGrd=new TStringList();
     
     
       for(i=1;i<AdvStringGrid1->RowCount;i++)
      {
       AnsiString Texte;
       Texte += AdvStringGrid1->Cells[0][i];
       Texte += ";";
       for(j=1;j<7;j++)
       {
        Texte += AdvStringGrid1->Cells[j][i];
        Texte += ";";
       }
       StrGrd->Add(Texte);
      }
     
    StrGrd->SaveToFile(ChangeFileExt( Application->ExeName, ".txt" ) );
     
    delete StrGrd;
    }

  2. #2
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    1) Tu change le chemin de sauvegarde:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //chemin fixe
    StrGrd->SaveToFile( "C:\\MonDossier\\MonFichier.txt" ); 
    //ou repertoire de l'application
    StrGrd->SaveToFile( ChangeFileExt( Application->ExeName, ".txt" ) ) ;
    2) Plutot que d'utiliser Opendialog pour selectionner ton fichier, tu met directement ton nom de fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //	if(OpenDialog1->Execute())
    {
      TStringList *Fichier = new TStringList;
      //Fichier->LoadFromFile(OpenDialog1->FileName);
      Fichier->LoadFromFile("C:\\MonDossier\\MonFichier.txt"); //chemin fixe
      //ou
      Fichier->LoadFromFile(ChangeFileExt( Application->ExeName, ".txt" ) ) //repertoire de l'application;

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Par défaut
    OK, ça marche correctement,
    à nouveau, merci.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Par défaut
    Finalement j'ai utilisé le composant OpenDialog car on doit pouvoir sélectionner le fichier txt qu'on souhaite dans un dossier.

    Seulement comme on fait pour faire en sorte que le fichier XML que je génère à la sortie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XMLDoc->SaveToFile("monfichier.xml");
    s'appelle de la même manière que le fichier txt "d'importation"...

    il y a un moyen? je vois pas trop ....

  5. #5
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Si j'ai bien compris, tu veux que ton fichier XML se sauvegarde au même endroit que ton fichier texte et avec le même nom, par exemple:
    FICHIER D'ENTRÉE
    C:\NomDossier\MonFichier.txt
    FICHIER DE SORTIE
    C:\NomDossier\MonFichier.xml
    Tu peux utiliser la fonction ChangeFileExt qui va te remplacer juste l'extension et garder le reste (chemin+nom de fichier)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if( OpenDialog1->Execute() )
    {
      AnsiString filename = OpenDialog1->FileName ;
    //[...]
      [...]->LoadFromFile( filename ) ;
    //TRAITEMENT
      [...]->SaveToFile( ChangeFileExt( filename, ".xml" ) ) ;
    }

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Par défaut
    Oui tu as tout à fait compris...

    En fait j'utilisais déjà ChangeFileExt (lol) puisque quand je quitte l'application, je sauvegarde les éventuelles modifications du TStringGrid dans le fichier txt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    StrGrd->SaveToFile(ChangeFileExt( Application->ExeName, ".txt" ) );
    Donc ça c'est pour mettre à jour le fichier txt


    et pour le traitement en XML, comme précisé plus haut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    XMLDoc->SaveToFile("monfichier.xml"); // nom donné au hasard

    Le problème c'est que j'ai besoin que le fichier txt continue d'exister car si je souhaite refaire une modification, j'ai besoin de l'avoir sous la main pour le réimporter si besoin est. Donc je ne peux pas simplement changer l'extension txt en xml après le traitement ...
    Par exemple:

    AU départ j'ai un fichier texte.txt que j'importe dans le stringrid et quand je quitte l'application ,j'ai besoin d'avoir un fichier texte.txt mis à jour et un fichier texte.xml...


    problématique tout ça ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Question lecture port // inp32
    Par wokba dans le forum C
    Réponses: 8
    Dernier message: 18/05/2008, 17h36
  2. Lecture enregistrement dans une table
    Par Jean-Luc80 dans le forum VBA Access
    Réponses: 3
    Dernier message: 10/02/2008, 15h13
  3. [Question] lecture d'un .pro ou dll
    Par Esil2008 dans le forum C#
    Réponses: 2
    Dernier message: 28/08/2007, 09h22
  4. [Oracle][JDBC]Lecture / Enregistrement de BLOB
    Par bonnefr dans le forum JDBC
    Réponses: 2
    Dernier message: 09/03/2006, 11h33
  5. Pb lecture enregistrement table liée SQL SERVER
    Par christellel198 dans le forum Access
    Réponses: 3
    Dernier message: 25/10/2005, 09h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo