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 :

Problème de boucles/Manip fichier [WD17]


Sujet :

WinDev

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 187
    Par défaut Problème de boucles/Manip fichier
    Bonjour,

    j'ai un problème que je n'arrive pas à résoudre et difficile à expliquer.

    J'ai un fichier type texte, un champ liste qui a des éléments en commun avec les données de mon fichier et une table de plusieurs colonnes (variables) dont les données sont des résultats classés dans le même ordre que mon champ liste. Le but est de créer un nouveau fichier à partir de ces 3 éléments contenant les info de ma table. Cela devient compliqué...

    Le fichier n°1 est du type :

    Var3
    Var5
    Var6

    Mon champs liste :

    Var1
    Var2
    Var3
    Var4
    Var5
    Var6
    ....

    Mon champ table horizontal:

    Ligne1: donnée1 Autredonnée1 .....
    Ligne2: donnée2 Autredonnée2 ......
    Ligne3 : donnée3 Autredonnée3
    Ligne4 : donnée4 Autredonnée4
    Ligne5 : donnée5 Autredonnnée5
    Ligne6 : donnée6 Autredonnée6
    .... ... ....

    Mon fichier ainsi créer doit être du type :

    donnée3;donnée5;donnée6
    Autredonnée3;Autredonnée5;Autredonnée6


    Voilà pour le schema. J'arrive à créer mon fichier correctement lorsque ma table n'a qu'une colonne de donnée, par contre sur plusieurs colonnes je n'y arrive pas.

    Mon code qui marche est le suivant :

    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
     
     
    i,nfich sont des entiers
    sDon est une chaine
     
     
    SI fFichierExiste("c:\donnees.temp") ALORS fSupprime("c:\donnees.temp")
     
    nFich=fOuvre("c:\monfich.var",foLecture)
     
    TANTQUE sDon <> EOT
     
    sDon=fLitLigne(nFich)
     
     
     
    	POUR i=1 A LISTE_Variables..Occurrence
     
     
     
    	SI sDon=LISTE_Variables[i] ALORS EcritDonnees(TABLE_Donnees[1,i])				
     
    	FIN
     
     
    FIN
     
    fFerme(nFich)
     
    FIN
     
     
    PROCEDURE EcritDonnees(MaDonnee)
     
    nFich est un entier
     
    SI fFichierExiste("c:\donnees.temp") ALORS nFich=fOuvre("c:\donnees.temp",foAjout) SINON nFich=fCrée("c:\donnees.temp",foEcriture)
     
    fEcrit(nFich,MaDonnee+";")
     
    fFerme(nFich)
    Si quelqu'un a une idée lorsque j'ai plusieurs colonne dans ma table ?

    J'espère que j'ai bien réussi à exposer le problème...

    Merci d'avance pour votre aide.

  2. #2
    Membre chevronné Avatar de jimmypage
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 314
    Par défaut
    Salut,

    Je sais pas si j'ai bien saisi ton problème mais en faisant quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    col est un entier = 1
    SI sDon=LISTE_Variables[i] ALORS 
      TANTQUE TableEnumereColonne(TABLE_Donnees,col) <> ""
        EcritDonnees(TABLE_Donnees[col,i])
        col ++
      FIN
    FIN

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 187
    Par défaut
    Bonjour,

    Merci pour ta réponse Jimmypage mais le code ne marche pas.

    J'ai une erreur de type :

    "Vous avez appelé l'opérateur [] sur le champ TABLE_Donnees.
    L'indice spécifié [293] est invalide.
    Les valeurs valides sont comprises entre 1 et 292 (inclus)."

    J'ai remplacé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TANTQUE TableEnumereColonne(TABLE_Donnees,col) <> ""
    Par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TANTQUE TableEnumereColonne(TABLE_Donnees,col) < table_donnees..occurence+1
    Et là pas d'erreur à l'exécution mais le fichier "donnees.temp" reste vide.

    ??????

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 187
    Par défaut
    Bonjour,

    Peut-être que si je reformule ma question cela sera un peu plus facile de trouver de l'aide.

    Alors je vais essayer de poser le problème différemment et par étape.

    La première question c'est :

    Comment copier une ligne d'un champ table dans un fichier ".txt" ou chacune des données qui se trouve dans les colonnes sont séparée dans le fichier ".txt" par un ";".

    Puis comment copier x lignes de ce champ table dans un fichier ".txt" avec un retour chariot pour chaque ligne.

    J'espère que cette fois-ci cela sera plus digeste comme question.

    Merci d'avance.

  5. #5
    Membre Expert Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 889
    Par défaut
    Essaye avec ç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
    i,j,nfich,nNb_var,nNo_col sont des entiers
    sLigneLue,sChaine_var,sChaine_don est une chaîne
    nNb_col est un entier = TableOccurrence(TABLE_Donnees)
     
    SI fFichierExiste("d:\donnees.temp") ALORS fSupprime("d:\donnees.temp")
    nFich=fOuvre("d:\monfich.var",foLecture)
     
    SI nFich = -1 ALORS
    	Erreur(ErreurInfo(errMessage));RETOUR
    SINON
    	BOUCLE 
    		sLigneLue = fLitLigne(nfich)		
    		SI sLigneLue = EOT OU sLigneLue = "" ALORS SORTIR	
    		sChaine_var += sLigneLue + ";"
    		nNb_var += 1
    	FIN
    	sChaine_var = Gauche(sChaine_var,Taille(sChaine_var)-1)
    FIN
     
    POUR TOUTE LIGNE DE TABLE_Donnees
    	i += 1
    	sChaine_don = ""
    	POUR j = 1 A nNb_var
    		nNo_col = ListeCherche(LISTE_Variables,ExtraitChaîne(sChaine_var,j,";"))
    		SI nNo_col <> -1 ALORS
    			sChaine_don += TABLE_Donnees[i,j] + ";"
    		FIN	
    	FIN
    	sChaine_don = Gauche(sChaine_don,Taille(sChaine_don)-1)
    	EcritDonnees(sChaine_don)
    FIN
    Il faut également légèrement modifier ta procédure puisque tu vas écrire des lignes en non pas une concaténation de données...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    PROCEDURE EcritDonnees(MaDonnee)
    nFich est un entier
    SI fFichierExiste("d:\donnees.temp") ALORS nFich=fOuvre("d:\donnees.temp",foAjout) SINON nFich=fCrée("d:\donnees.temp",foEcriture)
    fEcritLigne(nFich,MaDonnee)
    fFerme(nFich)

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 187
    Par défaut
    Merci beaucoup Laurent30s, je commence a approcher du résultat.

    Mon fichier "donnees.temp" est correct dans sa structure mais les info du fichier ne sont pas les bonnes.

    Je m'explique :

    Avec ton code :

    Par exemple dans mon fichier ".var" si j'ai 15 données, je vais au final enregistrer les 15 premieres lignes de "Table_donnees".

    Alors que je dois comparer les données du fichier ".var" avec "liste_variable", si cela corresponds prendre le n° de ligne de l'élément correspondant dans "liste_variable" et aller chercher la donnée dans la table "table_donnees" qui se trouve au même n° de ligne que dans "liste_variable".

    J'ai essayé d'ajouter à ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    k est un entier
     
    POUR k=1 A LISTE_Variables..Occurrence
     
    		SI sChaine_var=LISTE_Variables[k] ALORS 
    			EcritDonnees(sChaine_don)
    		FIN
    	FIN
    Mais du coup le fichier "donnees.temps" ne se crée même pas et pas de message d'erreur.

    Il me reste plus que cela à solutionner et tout sera OK.

    Merci d'avance.

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

Discussions similaires

  1. problème de boucle et écriture dans un fichier!
    Par pontarose dans le forum Langage
    Réponses: 3
    Dernier message: 25/11/2011, 19h54
  2. Problème de création de fichiers .txt en boucle
    Par droledelolo dans le forum C++
    Réponses: 23
    Dernier message: 29/08/2008, 17h59
  3. [XML] générer un fichier xml avec du php : problème de boucle
    Par freija dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 19/02/2007, 18h25
  4. problème dans boucle for de lecture de fichier ini
    Par chourmo dans le forum Delphi
    Réponses: 3
    Dernier message: 06/07/2006, 09h31
  5. [langage] Problème de taille de fichier à mettre dans
    Par And_the_problem_is dans le forum Langage
    Réponses: 10
    Dernier message: 13/08/2002, 09h41

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