Avoir accée en lecture et écriture à un fichier .lwl à partir dŽun programme C++

nidhaletec Messages postés 44 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 28 mars 2009 - 13 juin 2008 à 15:50
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 - 16 juin 2008 à 16:39
il y a quelquŽun qui connait lŽéxtention .lwl ?
je cherche à avoir accée à un fichier .lwl pour le modifier avec un programme C++

36 réponses

cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
13 juin 2008 à 16:08
Ben tu l'ouvres avec CreateFile() hé...après c'est à toi de connaître le format pour lire les données aux bons endroits.
0
nidhaletec Messages postés 44 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 28 mars 2009
13 juin 2008 à 16:21
jŽai oublié de notre que je programme sous windows mais je ne veux pas que jŽaurai des problème lorsque jŽéxécute le programme sous Linux.
CreateFile fait lŽaffaire ?
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
13 juin 2008 à 16:47
Tu ne pourras exécuter l'exécutable sous linux et sous windows à moins de faire ton programme en Java, Python ou autre interprété portable.

Si tu vises la portabilité du code (pas de l'exécutable je le répette), faudra utiliser la stdlib: fopen et compagnie.

C++ (@++)<!--
0
nidhaletec Messages postés 44 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 28 mars 2009
13 juin 2008 à 19:00
#include








"stdafx.h"



#include















#include








<fstream>



#include








<string>



using








namespace

std ;



int




a ;fstream fichier ;

 




int




_tmain(


int

argc, _TCHAR* argv[]){

ifstream fichier(



"U:\OpenData\ayadi\TestSoval2.lwl"

, ios::in);


// on ouvre en lecture











if

(fichier)


// si l'ouverture a fonctionné


{


string contenu;





// déclaration d'une chaîne qui contiendra la ligne lue


getline(fichier, contenu);





// on met dans "contenu" la ligne


cout << contenu;





// on affiche la ligne





fichier.close();


}








else


cerr <<





"Impossible d'ouvrir le fichier !"

<< endl;

 Impossible d'ouvrir le fichier !"  sáffiche à lŽéxécution, quelquŽun peut me trouver le problème ?
 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
13 juin 2008 à 19:26
La chaine représentant le chemin de ton fichier est invalide.

Le caractère (affiché) '\' s'écrit '\\' (dans le code).

"U:\\OpenData\\ayadi\\TestSoval2.lwl"

C++ (@++)<!--
0
nidhaletec Messages postés 44 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 28 mars 2009
13 juin 2008 à 19:38
merci  pour ton aide
0
nidhaletec Messages postés 44 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 28 mars 2009
13 juin 2008 à 19:47
je mŽéxcuse je suis encore débutant ;si quelquŽun peut mŽaider à me placer dans le fichier déjà lu en prenant comme repère des mots déja éxistant dans ce fichier .
0
nidhaletec Messages postés 44 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 28 mars 2009
13 juin 2008 à 20:05
je veux me placer et ensuite écrire dans le fichier
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
13 juin 2008 à 20:23
Si tu veux écrire dans le fichier, faudra l'ouvrir en écriture aussi (et donc, je crois, utiliser la classe fstream).

On peut se déplacer dans le fichier avec la méthode seekg.

C++ (@++)<!--
0
nidhaletec Messages postés 44 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 28 mars 2009
13 juin 2008 à 20:30
seekg me permet de me placer parrapport un mot déjà éxistant ? si oui , donne moi un éxemple si c possible .
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
13 juin 2008 à 20:49
Ça veut dire quoi "Un mot déjà existant" ? Tu veux chercher dans le fichier un mot pour le remplacer par un autre ?
Ça risque d'être un peu plus compliqué là surtout si le mot remplaçant n'a pas la même longueur.

On pourrait, par exemple, placer tout le fichier (si pas trop gros) dans un buffer et chercher le mot dans ce même buffer.
Une fois trouvé, on se positionne dans le fichier par rapport à la position du mot dans le buffer.
Ensuite, on écrit le mot remplaçant à la place du mot à remplacer dans le fichier.
Finalement, on écrit le reste du buffer dans le fichier.

Bien entendu, ça reste un exemple de fonctionnement. Si tu as plus de 1000 mots à remplacer, cette méthode s'avèrera beaucoup trop lente.

C++ (@++)<!--
0
nidhaletec Messages postés 44 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 28 mars 2009
14 juin 2008 à 14:58
voila c ce que je veux changer
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
14 juin 2008 à 15:38
Bon, j'ai fais un code rapidement mais en C utilisant la stdlib C. La fonction fait ce que tu demandes mais ce sera à toi de la convertir en C++.

La fonction ouvre le fichier filename, extrait tout le fichier dans un buffer puis cherche dans ce buffer toutes les occurrences de occ pour les remplacer par str.

void replace (char *filename, char *str,  char *occ)
{
    FILE *f = fopen(filename, "rb");
    char *buf;
    int size;

    if(!f) return;

    fseek(f, 0, SEEK_END);
    size = ftell(f);
   
    if((buf = malloc(size+1))) {
        char *pbuf = buf;        int lenocc strlen(occ), lenstr strlen(str), last = 0;

        fseek(f, 0, SEEK_SET);
        buf[fread(buf, 1, size, f)] = 0;

        fclose(f);
       /* On supprime le fichier dans le cas ou str est plus petit que occ ce qui laisserait des caractères "parasites" à la fin du fichier */
        remove(filename);

       /* Cependant, si la création du nouveau fichier échoue, on pert l'ancien OOPS */
        if((f = fopen(filename, "wb"))) {
            while((pbuf = strstr(pbuf, occ))) {
                int pos = (pbuf-buf);
                if(pos) fwrite(&buf[last], 1, (pos-last), f);
   
                fwrite(str, 1, lenstr, f);                pbuf +lenocc; last (pbuf-buf);
            }
   
            fwrite(&buf[last], 1, size-last, f);
        }

        free(buf);
    }

    if(f) fclose(f);
}

Voilà, c'est de base mais ça fonctionne (du moins d'après ce que j'en ais testée, pas le temps de tester en profondeur)

C++ (@++)<!--
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
14 juin 2008 à 15:41
Précision:
"La fonction ouvre le fichier filename, extrait tout le fichier dans un
buffer puis cherche dans ce buffer toutes les occurrences de occ pour
les remplacer par str dans le fichier."

C++ (@++)<!--
0
nidhaletec Messages postés 44 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 28 mars 2009
14 juin 2008 à 23:19
merci pour ce petit programme , je vais éssayer dŽutiliser ce que tu m as donné
0
nidhaletec Messages postés 44 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 28 mars 2009
15 juin 2008 à 19:13
c qoui associer un flux à un fichier ?
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
15 juin 2008 à 19:25
En gros, écrire un flux de donnée dans un fichier.

Cependant, tu pourrais donnée le contexte parce que là, ce n'est pas clair du tout. Quel flux ? Quel fichier ? Qui quoi comment où pouquoi ?

C++ (@++)<!--
0
nidhaletec Messages postés 44 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 28 mars 2009
15 juin 2008 à 19:28
ex ici dans ton programme  FILE *f = fopen(filename, "rb"); // tu as assicié le flux f au fichier filename ;
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
15 juin 2008 à 19:41
J'ai ouvert un flux, je ne l'ai pas associé.

Et puis, pour faire plus simple, on dira: j'ai ouvert un fichier en lecture et/ou écriture. Là au moins, tout le monde sais de quoi on parle.

C++ (@++)<!--
0
nidhaletec Messages postés 44 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 28 mars 2009
15 juin 2008 à 19:48
et j ai pas aussi compris comment ftell () me renvoie le size (normalent c la longuer du fichier en octets non ?) ; car comment j ai lit dans les documentations ftell donne la position courante du pointeur f ;
j éspère que tu ne sera pas dérengé par mes questions succéssifs ; car mon bagage est petit et je suis préssé
0
Rejoignez-nous