Avoir accée en lecture et écriture à un fichier .lwl à partir dŽun programme C++
nidhaletec
Messages postés44Date d'inscriptionjeudi 12 juin 2008StatutMembreDernière intervention28 mars 2009
-
13 juin 2008 à 15:50
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 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++
A voir également:
Avoir accée en lecture et écriture à un fichier .lwl à partir dŽun programme C++
nidhaletec
Messages postés44Date d'inscriptionjeudi 12 juin 2008StatutMembreDernière intervention28 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 ?
nidhaletec
Messages postés44Date d'inscriptionjeudi 12 juin 2008StatutMembreDernière intervention28 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 .
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 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.
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 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.
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)
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 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."
nidhaletec
Messages postés44Date d'inscriptionjeudi 12 juin 2008StatutMembreDernière intervention28 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é