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++ Discussion :

Remplacer une chaine de caractères dans un fichier REG


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 103
    Points : 48
    Points
    48
    Par défaut Remplacer une chaine de caractères dans un fichier REG
    Bonjour,

    j'ai un besoin assez simple, je voudrais remplacer toutes les occurences d'une chaîne de caractère dans un fichier résultant de l'exportation d'une branche de la base de registre (fichier .reg)...

    J'ai tenté ça :

    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
     
    char line[1000];
    char *p;
     
    CString pathOldReg = _T("C:\\Device\\testOld.reg");
    CString pathNewReg = _T("C:\\Device\\testNew.reg");
     
    // on ouvre la source en lecture
    FILE *ficOldReg = fopen(pathOldReg, "r");
    // on ouvre la cible en écriture
    FILE *ficNewReg = fopen(pathNewReg, "w");
     
    if( !ficOldReg || !ficNewReg ) return FALSE;
     
    while(fgets(line, sizeof line, ficOldReg)){
    <div style="margin-left:40px">
    // on récupère la ligne lue jusqu'au retour-chariot
    p = strchr(line, '\n');
     
    if(!p){
    <div style="margin-left:40px">
    //"Read line is too long"
    return FALSE;</div>}  
     
    //on transforme le tableau line en chaîne de caractères
    *p = '\0';
     
    std::string sMyLine = line;
    CString sLine(sMyLine.c_str());
     
    sLine.Replace(_T("\\bhou"), _T("\\blah"));
     
    // on écrit dans le fichier final
    if(fprintf(ficNewReg, sLine.GetString()) == EOF){
    <div style="margin-left:40px">
    // "Cannot write new Reg file"
    return FALSE;</div>}</div>}
     
    fclose(ficNewReg);
    fclose(ficOldReg);
     
    return TRUE;

    Voilà, je passe tout le temps dans l'erreur "Read line is too long", sinon avec les autres méthodes que j'ai essayé, je n'obtenais rien de bon en sortie...


    Cela ne semble pas très compliqué, pourtant...quelqu'un a-t-il une idée ?

    Merci d'avance !

  2. #2
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Pourquoi ne pas utiliser std::ifstream et std::getline pour récupérer les lignes de ton fichier ?
    Voir http://c.developpez.com/faq/cpp/?pag...ture_par_ligne

  3. #3
    Membre confirmé Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Points : 488
    Points
    488
    Par défaut
    Tu mélanges C, C++, MFC..

    Les .reg sont au format Unicode depuis la version 5 de regedit.

    Edit: Tu peux toujours exporter en version 4
    L'itération est humaine; la récursion, divine.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 103
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par Mayti4
    Tu mélanges C, C++, MFC..
    En effet. Où est le problème ?

    Citation Envoyé par Mayti4
    Les .reg sont au format Unicode depuis la version 5 de regedit.

    Edit: Tu peux toujours exporter en version 4
    Le fait que cela soit au format Unicode va certainement me poser un problème de conversion lorsque je vais stocker mes lignes dans des string/CString/etc....c'est ça ?

  5. #5
    Membre confirmé Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Points : 488
    Points
    488
    Par défaut
    Citation Envoyé par pataguillon
    En effet. Où est le problème ?
    Imagine une personne te parler 3 langages en même temps.

    Le fait que cela soit au format Unicode va certainement me poser un problème de conversion lorsque je vais stocker mes lignes dans des string/CString/etc....c'est ça ?
    Oui, tu l'as remarqué je pense.

    Soit tu utilises Unicode, soit tu utilises les .reg version 4.
    L'itération est humaine; la récursion, divine.

Discussions similaires

  1. [AC-2010] Remplacer une chaine de caractères dans un fichier texte
    Par jpg75014 dans le forum VBA Access
    Réponses: 4
    Dernier message: 23/06/2015, 15h38
  2. [Débutant] Alterner remplacement d'une chaine de caractère dans un fichier texte
    Par zazoudandan dans le forum MATLAB
    Réponses: 1
    Dernier message: 08/05/2015, 09h38
  3. Rechercher/remplacer une chaine de caractères dans plusieurs fichiers
    Par _shuriken_ dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 31/07/2011, 20h06
  4. Remplacer une chaine de caractère dans un fichier texte.
    Par Empty_body dans le forum VBA Access
    Réponses: 1
    Dernier message: 19/01/2008, 11h16
  5. Réponses: 7
    Dernier message: 27/09/2005, 11h54

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