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

WinDev Discussion :

Différence constatée entre FChargeTexte et FlitLigne


Sujet :

WinDev

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Points : 619
    Points
    619
    Par défaut Différence constatée entre FChargeTexte et FlitLigne
    Bonjour,

    Je voudrais ouvrir un fichier texte et le lire ligne par ligne
    Pour information le fichier de test comprend 3 lignes
    J'ai donc écrit le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	LN_FH = fOuvre(LC_Fichier)
    	SI LN_FH < 0 ALORS
    		RETOUR
    	FIN
    	BOUCLE
    		LC_Ligne = fLitLigne(LN_FH)
    		SI LC_Ligne = EOT ALORS SORTIR
    	FIN	
    	fFerme(LN_FH)
    Dès la première ligne j'obtiens un EOT. Le traitement s'arrête alors que le fichier comprend 3 lignes.

    J'ai modifié mon code de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	LC_Lecture = fChargeTexte(LC_Fichier)
    	ChaîneVersTableau(LC_Lecture, LT_Lecture, RC)
    	i est un entier
    	POUR i = 1 _A_ TableauOccurrence(LT_Lecture)
    		LC_Ligne = LT_Lecture[i]
    		ChaîneVersTableau(LC_Ligne, LT_Ligne, ";")
    	FIN
    Et là cela fonctionne. Les 3 lignes sont bien lues.
    Je voudrais comprendre la différence entre ces deux traitements : pourquoi l'un fonctionne pas l'autre.

  2. #2
    Membre confirmé
    Homme Profil pro
    Admin - Gestion reconverti en informatique
    Inscrit en
    Septembre 2017
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Admin - Gestion reconverti en informatique

    Informations forums :
    Inscription : Septembre 2017
    Messages : 328
    Points : 493
    Points
    493
    Par défaut
    Bonjour,

    Concernant la première méthode, ça fonctionne correctement.
    La valeur EOT concerne le renvoi de la fin du fichier.
    Faire un Trace() pour voir les 3 premières lignes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    BOUCLE
    	LC_Ligne = fLitLigne(LN_FH)
    	Trace(LC_Ligne)
            SI LC_Ligne = EOT ALORS SORTIR
    FIN
    Une autre façon de faire, en mettant le contrôle,
    juste après la lecture de la 1ère ligne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    LC_Ligne = fLitLigne(LN_FH)
     
    TANTQUE LC_Ligne <> EOT
            Trace(LC_Ligne)
            LC_Ligne = fLitLigne(LN_FH)
    FIN
    fFerme(LN_FH)

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Points : 619
    Points
    619
    Par défaut
    Bonjour,

    Merci.
    J'avais déjà essayé la seconde méthode mais le résultat est le même.
    Sur le premier point je n'avais pas mis de trace mais un point d'arrêt. J'ai vu EOT. C'est bien ce qui me préoccupe.

    Je précise que mon logiciel est programmé en WinDev Mobile 20 et que le projet est orienté vers des tablettes Android.

  4. #4
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Questions à 2 sous :
    - As-tu regardé le format de ton fichier (les RC sont bien des RC ?) avec un éditeur Hexa par exemple ou notepad++ (en activant l'option afficher tous les caractères) ?
    - Je te conseille également de regarder au niveau de la tablette, quels sont les caractères utilisés : Pas sûr que le RC soit bien interprété. Le jeu de caractères tablette n'est sûrement pas celui de Windows.

    Pour en revenir à la question de départ, la différence entre les 2 méthodes : tu va avoir 3 accès en lecture dans le premier cas (sans compter ouverture et fermeture), un seul dans le 2°.
    Pour l'avoir testé sur PC, j'ai rapidement opté pour le fchargetexte, beaucoup plus rapide (fchargetexte + pour toute chaine sMachaine de sChaineTotale separée par RC).
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Points : 619
    Points
    619
    Par défaut
    As-tu regardé le format de ton fichier (les RC sont bien des RC ?)
    Non (et je ne peux pas essayer maintenant) mais vu que dans la seconde méthode j'utilise RC pour splitter la chaine reçue en tableau je pense que ce sont bien des retours chariot.
    Je n'ai pas installé sur la tablette. J'ai fait mes tests avec l'émulateur.
    Le fichier de test a été saisi avec le bloc note de Windows.

    Ma question entre les 2 méthodes était plus sur l'aspect technique.
    Sur le principe je connais. J'ai eu le cas d'une application sur laquelle j'ai dû intervenir et où un petit malin avait chargé tout le fichier en mémoire. Ca a fonctionné 2 ans. Un jour le client a voulu traiter un fichier très gros et le traitement a éclaté.
    C'est pour l'anecdote : je ne vois pas ce genre de chose sur une tablette mais ça m'a fait réfléchir.
    Mais j'essaie de comprendre et WinDev me déroute souvent.

  6. #6
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    Avec flitligne, je n'ai jamais rencontré le problème que tu signales.

    Dans fOuvre(), j'ai pour habitude de préciser foLecture. Le paramètre par défaut est foLectureEcriture. Je ne vois pas pourquoi ça changerait le résultat ... mais peut-être.
    Et je boucle systématiquement comme dans le code proposé par Midou23175 (Tantque lig <> EOT ...) . Là encore, je ne vois pas pourquoi ça changerait le résultat, ce serait même encore plus inquiétant.

    Dans le tout premier code que tu donnes, tu as bien une instruction en plus entre la ligne 6 et la 7, pour concrétiser ton traitement ... et c'est cette instruction qui ne s'exécute qu'une fois ?
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  7. #7
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Points : 619
    Points
    619
    Par défaut
    Oui, moi aussi dans FOuvre j'avais le paramétre foLecture. Je l'ai retiré au cours de mes différents essais.
    Dans mon code j'avais mis le traitement entre les lignes 7 et 8, APRES le test si EOT

    Je ne pense pas que le fait de "réparer" le projet change quelque chose mais j'essaierai ce soir ou demain.
    J'ai eu 2 cas comme celui-ci, totalement illogiques ce week-end. A chaque fois j'ai trouvé une solution de contournement mais cela me fait peur.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 120
    Points : 153
    Points
    153
    Par défaut
    Essaye avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    LC_Lecture = fChargeTexte(LC_Fichier)
     
    POUR TOUT CHAÎNE sLigne DE LC_Lecture SEPAREE PAR RC
    	SI sLigne=EOT CONTINUE
     
    	//Traitement de la ligne
    FIN

  9. #9
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Points : 619
    Points
    619
    Par défaut
    J'avais mis le projet entre parenthèses pour avancer sur ce que je dois livrer.
    Je vais poursuivre mes essais dès que je peux mais, à première lecture, pour un 'non WinDev' lire "Si EOT Alors Continue" ça peut choquer...

    A bientôt

  10. #10
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Effectivement, ça me choque aussi. Du coup, en modifiant le code de Programming-Z
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    LC_Lecture = remplace(fChargeTexte(LC_Fichier), EOT,"")
     
    POUR TOUT CHAÎNE sLigne DE LC_Lecture SEPAREE PAR RC
     
    	//Traitement de la ligne
    FIN
    Çà doit revenir au même mais ça pique moins les yeux.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  11. #11
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 952
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 952
    Points : 9 281
    Points
    9 281
    Par défaut
    hello,
    dans ton fichier texte, il n'y a aucune raison qu'il y ait le caractère EOT. C'est en fait la fonction fLigne qui renvoit un EOT (caractère 4) quand elle détecte une fin de fichier. Donc dans ton cas :
    Soit il y a un ou des caractère(s) parasite(s) dans ton fichier (caractère 4) ou soit c'est la fonction fLigne qui détecte mal la fin du fichier.
    Normalement le code de Programming-Z devrait fonctionner sans test de l' EOT.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    LC_Lecture est une chaine  = fChargeTexte(LC_Fichier)
    POUR TOUT CHAÎNE sLigne DE LC_Lecture SEPAREE PAR RC
    	//Traitement de la ligne
    FIN
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  12. #12
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2003
    Messages : 942
    Points : 1 933
    Points
    1 933
    Par défaut
    Bonjour,

    Je pense que ce qui t'arrive est tout à fait normal. Tu as du créer ton fichier sous Windows donc en ANSI. Or Android travaille en Unicode et donc ton fichier est ouvert en Unicode. Le codage étant différent, le résultat est différent.

    Lorsque tu fais un fChargeTexte, le texte est automatiquement transformé en Unicode et donc ton test fonctionne.

    Il faut faire attention aux différentes plateformes qui n'utilisent pas toutes le même codage.
    Philippe,


    N'hésitez à lever le pouce si mon aide vous a été utile.

Discussions similaires

  1. Réponses: 0
    Dernier message: 19/09/2015, 18h07
  2. [VBA] différence concrète entre ! et .
    Par gatsu07 dans le forum Access
    Réponses: 4
    Dernier message: 08/08/2006, 13h19
  3. Différence(s) entre Pentium, Celeron et AMD
    Par tarbala dans le forum Composants
    Réponses: 3
    Dernier message: 13/05/2006, 19h12
  4. différence durée entre date jour/date champ
    Par debdev dans le forum Access
    Réponses: 9
    Dernier message: 30/11/2005, 16h55
  5. Réponses: 3
    Dernier message: 28/10/2005, 09h01

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