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 :

Problème avec iconv et boucle for


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Problème avec iconv et boucle for
    Bonjour,

    J'ai un problème avec iconv. Je lit plusieurs zone de texte dans un fichier que je convertis via iconv. Le 1er passage est bon, mais pas les suivants.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	for (compteur_element = 0 ; compteur_element < nb_element ; compteur_element++)
    	{
    		fgets(nom_lu, taille_nom, fichier_in);
    		iconv(conversion, &pointeur_nom_lu, &taille_nom_lu, &pointeur_nom_lu_utf8, &taille_nom_lu_utf8);
    		fprintf(fichier_out, "%s : %d -> %s : %d \";\n", nom_lu, &pointeur_nom_lu, nom_lu_utf8, &pointeur_nom_lu_utf8);
    		fseek(fichier_in, 16, SEEK_CUR);
    	}
    "nom_lu" change bien mais pas "nom_lu_utf8". Avez-vous une idée d'où ça vient?

    J'ai aussi une autre question. J'ai suivi le tuto suivant pour pouvoir utiliser la fonction iconv.
    http://www.codeproject.com/Articles/...-Visual-Studio

    Par contre j'ai bloqué sur la partie "How to Use" dont j'ai intégré directement les fichiers dans le nouveau projet.
    Comment intégrer les fichiers "libiconv.dll" et "libiconv.lib" dans un autre projet pour utiliser la fonction iconv?
    J'utilise Visual C++ 2010 Express

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    En fait, tu devrais "scinder" les chaines que tu veux traduire...

    Mettons que tu aies une chaines du genre de
    "You have XXX element in your collection YYY" et que XXX et YYY changent à chaque itération.

    (c'est, sommes toutes, fort proche de ce que tu as, n'est ce pas )

    L'idée est de séparer les éléments fixes des autres. C'est à dire que tu traduits "vous avez" comme une chaine de caractères, "dans la collection" comme une autre chaine de caractère et, idéalement, "élément(s)" sous la forme de... deux chaines de caractères sélectionnées de manière conditionnelle:
    La première fournirait la traduction au singulier (élément) pour toute valeur de XXX égale à 0 ou à 1, la deuxième fournissant la traduction au pluriel pour toute valeur de XXX supérieure à 1.

    XXX et YYY peuvent, peu ou prou, rester des chaines non traduites (mais néanmoins converties si nécessaire )

    Ceci dit, je te conseillerais volontiers de t'intéresser à boost format (entre autres) qui a l'avantage d'être une bibliothèque C++ et qui devrait te faciliter la tache au niveau de l'internationnalisation du code (d'ailleurs, elle utilise iconv en interne )

    Enfin, pour intégrer une bibliothèque externe, il faut aller voir du coté des options de ton projet, et trouver les options:
    • relatives aux dossiers dans lesquels chercher les fichier "inclus", afin d'y rajouter le dossier dans lequel se trouve les en-tête de la bibliothèque externe (s'il ne sont pas dans un dossier déjà connu
    • relative à l'édition de liens pour
      1. rajouter le dossier dans lequel se trouve le fichier .lib de ta bibliothèque externe (encore une fois: si le dossier n'est pas déjà connu)
      2. rajouter le fait qu'il faut effectuer l'édition de liens avec le fichier .lib de ta bibliothèque externe
    Je ne sais plus de tete où se trouvent ces options et ne dispose pas de VS pour l'instant. Il m'est donc difficile d'être plus précis, mais elles sont normalement assez faciles à retrouver
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci de ta réponse.

    1er problème résolu en réinitialisant le iconv à chaque utilisation.
    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
    int lecture_nom(FILE* fichier1, FILE* fichier2)
    {
    	iconv_t conversion = iconv_open("UTF-8", "UCS-2LE");
    	int taille_nom = 65;
    	int compteur_lecture = 0;
     
    	char nom_lu[65];
    	char nom_lu_utf8[65];
     
    	char *pointeur_nom_lu = nom_lu;
    	char *pointeur_nom_lu_utf8 = nom_lu_utf8;
     
    	size_t taille_nom_lu = taille_nom;
    	size_t taille_nom_lu_utf8 = taille_nom;
     
    	for (compteur_lecture = 0 ; compteur_lecture < taille_nom-1 ; compteur_lecture++)
    	{
    		nom_lu[compteur_lecture] = fgetc(fichier1);
    	} 
    	//fgets(nom_lu, 65, fichier1); //ko au bout d'un moment
     
    	iconv(conversion, &pointeur_nom_lu, &taille_nom_lu, &pointeur_nom_lu_utf8, &taille_nom_lu_utf8);
    	fprintf(fichier2, "%s\";\n", nom_lu_utf8);
     
    	iconv_close(conversion);
    	return 0;
    }
    Citation Envoyé par koala01 Voir le message
    Enfin, pour intégrer une bibliothèque externe, il faut aller voir du coté des options de ton projet, et trouver les options:
    • relatives aux dossiers dans lesquels chercher les fichier "inclus", afin d'y rajouter le dossier dans lequel se trouve les en-tête de la bibliothèque externe (s'il ne sont pas dans un dossier déjà connu
    • relative à l'édition de liens pour
      1. rajouter le dossier dans lequel se trouve le fichier .lib de ta bibliothèque externe (encore une fois: si le dossier n'est pas déjà connu)
      2. rajouter le fait qu'il faut effectuer l'édition de liens avec le fichier .lib de ta bibliothèque externe
    Je ne sais plus de tete où se trouvent ces options et ne dispose pas de VS pour l'instant. Il m'est donc difficile d'être plus précis, mais elles sont normalement assez faciles à retrouver
    Ca, je n'ai pas réussi à le faire ...
    J'ai trouvé ce post qui indiquait où faire les modifications:
    http://www.developpez.net/forums/d74...-bibliotheque/
    Je pensais avoir réussi, pas de message d'erreur dans le code mais un message d'erreur indiquant que le fichier dll était manquant lors de l’exécution.
    S'il faut déplacer le fichier dll dans un répertoire de windows ce n'est pas génial ...
    On ne peut pas simplement déplacer les fichiers libiconv.dll et libiconv.lib dans un répertoire du nouveau projet?

    Je regarderais "boost format" lorsque j'arriverais a utiliser une bibliothèque externe

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bon, je galère toujours pour la 2ème partie.

    J'ai normalement bien compilé la librairie libiconv.
    J'ai dans "C:\Users\xxx\Documents\Visual Studio 2010\Projects\libiconv\Debug_Win32" les fichiers suivants:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    libiconv.dll
    libiconv.exp
    libiconv.ilk
    libiconv.lib
    libiconv.pdb
    Je devrais ajouter les lignes suivante dans le nouveau projet pour pouvoir utiliser iconv qui se trouve la librairie libiconv (Créée en tant que Win32 Project / DLL):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #pragma comment (lib, "libiconv.lib")
    #include <iconv.h>
    Que faut-il modifier dans visual c++ 2010 express pour qu'il sache où se trouve iconv.h? Sans doute un paramètre car je doute qu'on doive copier les fichiers à chaque fois.

    Désolé, mais je débute donc j'ai beaucoup de mal à trouver comment intégrer la librairie d'un autre projet.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Personne ne peut expliquer comment intégrer une librairie dans un autre projet? Ca fait plus de 4 jours que je galère dessus ...

  6. #6
    Invité
    Invité(e)
    Par défaut
    Finalement j'ai laissé tombé. C'est beaucoup plus simple en C# (toutes les fonctions dont j'ai besoin y sont d'origine).

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

Discussions similaires

  1. [Débutant] Gros problème avec ma deuxième boucle for
    Par djobadi dans le forum MATLAB
    Réponses: 4
    Dernier message: 15/01/2014, 23h54
  2. [XL-2003] VBA problème avec la une boucle for range.end(xlup).row après suppression de lignes
    Par JohnNC115 dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 25/01/2011, 10h21
  3. [Tableaux] problème avec str_replace en boucle
    Par kev2259 dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2007, 16h46
  4. Ksh, problème avec une simple boucle for
    Par herzleid dans le forum Linux
    Réponses: 4
    Dernier message: 22/03/2006, 14h45
  5. [VB6] Problème contrôle Timer et boucle For-Next ...
    Par Stéphane BEHMENBURG dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 01/12/2005, 17h36

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