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 :

fPositionne() dans un fichier TEXT


Sujet :

WinDev

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2011
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 49
    Points : 40
    Points
    40
    Par défaut fPositionne() dans un fichier TEXT
    Je n'arrive pas à se positionner sur une ligne dans un fichier texte pour insérer.

    contenu du fichier text :

    developpezINSERTION
    developpez2
    developpez3
    :
    :


    D'au prés ma logique j'utilise la fonction fPositionne(Idfich,10,fpDébut) + RC pour qu'il me place au début de la 2éme ligne afin d'insérer , parcontre ce n'est pas le cas, l'insertion s’effectue juste apres le 10éme Octet de la 1ere ligne..

    Merciiii de m'aider par avance..

  2. #2
    Membre actif
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 176
    Points : 297
    Points
    297
    Par défaut
    Bonjour,

    Si je comprend bien ton problème tu voudrait insérer une deuxième ligne.
    Donc fPositionne(Idfich,10,fpDébut) fait ce qu'on lui demande, il se positionne après le 10ème octet du fichier.
    Derrière ton positionnement, tu doit avoir un fEcrit() qui va écrire ta nouvelle valeur dans ton fichier. Donc pour écrire à la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fEcrit(Idfich, RC + "Ma nouvelle valeur")
    Si tu veux te positionner directement en début de deuxième ligne, il faudra ajouter 2 octets supplémentaires (si je ne m'abuse) à ta position pour prendre en compte le RC, puis faire ton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fEcrit(Idfich, "Ma nouvelle valeur" + RC)
    ou plus simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fEcritLigne(Idfich, "Ma nouvelle valeur")
    Bonne continuation.
    L’aléatoire n’existe pas en informatique, c’est juste un moyen de dire que l’on a pas encore compris.

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2011
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 49
    Points : 40
    Points
    40
    Par défaut
    Merci Kyroon de prendre l'initiative et me répondre .

    En fait pour se positionner qu'en 2éme ligne, effectivement j'ajoute les 2 octets en plus la taille du 1ere ligne et me fait l'affaire, dans notre cas , la 1ere ligne est de 10 octets. Alors quand je fais fPositionne(Idfich,12,fpDébut) , il m’amène en 2éme ligne.

    Par contre le grand problème c'est qu'il m'écrase l'écriture existante de la 2éme ligne, parc qu’il s'agit en fait d'un fichier de log cyclique.

    J’insère jusqu’à la 100éme ligne et je reviens à insérer des nouvelles lignes qui commencent de début de fichier et qui en remplacent les anciennes.

    Je me réexplique le problème ..

    J'ai un fichier log de 100 lignes . toute les lignes ont un nombre d'octets fixe (ex : 10 Octets)

    Et mon écriture dans ce fichier doit être effectuer de la manière suivante:

    Si le fichier a déjà écrit sa 100éme ligne la 101éme ligne doit être insérer en 1ére et la 102éme en 2éme en écrasant et remplaçant les lignes.


    insertion 1
    insertion 2
    insertion 3
    insertion 4
    insertion 5
    insertion 6
    .
    .
    .
    insertion 100

    ||
    VV

    insertion 101
    insertion 102
    insertion 3
    insertion 4
    insertion 5
    insertion 6
    .
    .
    .
    insertion 100

    103 doit prendre la place de l'insertion 3 .. etc


    Et pour cela j'aurais besoin de se postionner entre différentes lignes mais pas forcément la 2éme

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 771
    Points
    1 771
    Par défaut
    Il n'y a pas de fonction fInsère() dommage...
    La fonction fEcrit() n'insère pas la chaîne à écrire mais écrase la chaîne existante.

    Voici une procédure qui permet d'insérer une chaîne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    PROCEDURE fLigneInsere(sChemin_fichier est une chaîne,sChaine_a_inserer est une chaîne,nNo_ligne_insertion est un entier)
     
    MonBuffer est un Buffer = fChargeBuffer(sChemin_fichier)
    Nombre_de_ligne est un entier = ChaîneOccurrence(MonBuffer,RC)
    MonBuffer_debut est un Buffer = Gauche(MonBuffer,PositionOccurrence(MonBuffer,RC,nNo_ligne_insertion)+1)
    MonBuffer_fin est un Buffer = Droite(MonBuffer,PositionOccurrence(MonBuffer,RC,Nombre_de_ligne - nNo_ligne_insertion + 1)+3) 
     
    MonBuffer = MonBuffer_debut + sChaine_a_inserer + RC + MonBuffer_fin
     
    fSauveBuffer(sChemin_fichier,MonBuffer)
    exemple d'appel de cette procédure...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    sChemin_fichier est une chaîne    = "d:\log.txt"
    sChaine_a_inserer est une chaîne  = "AAAAAAAAAA"
    nNo_ligne_insertion est un entier = 4		// après la 4ème ligne
     
    fLigneInsere(sChemin_fichier,sChaine_a_inserer,nNo_ligne_insertion)
    Attention si le fichier est très volumineux il peut y avoir un problème mémoire...
    Bon dev
    Laurent

    - C’est génial.
    - Non c’est bizarre.
    - Justement quand c’est simple y’a des milliers de réponses et quand c’est bizarre y’en a aucune.

  5. #5
    Membre éprouvé

    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    402
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 402
    Points : 915
    Points
    915
    Par défaut
    Bonjour
    Pourtant comme dans le code de Kyroon la fonction fecritLigne insère bien une ligne en fin de fichier mais on est d'accord il faut bien charger le fichier complet pour insérer.
    BD

    Perso un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    nIDFichier = fOuvre(cheminFichier, foEcriture)
    SI nIDFichier <> -1 ALORS
    	fPositionne(nIDFichier, 0, fpFin)
    	fEcritLigne(nIDFichier, "bla bla bla bla")
    	fFerme(nIDFichier)
    SINON
    	Erreur()
    FIN
    devrait fonctionner au poil.

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 771
    Points
    1 771
    Par défaut
    Pourtant comme dans le code de Kyroon la fonction fecritLigne insère bien une ligne en fin de fichier mais on est d'accord il faut bien charger le fichier complet pour insérer.
    Insérer une ligne à la fin c'est l'ajouter...

    Je ne connais pas de fonction en windev qui permette d'insérer une ligne entre des lignes à partir d'une ligne choisi, dommage...

    On doit donc charger le fichier dans un buffer ou un variable tableau dynamique et bricoler l'insertion de ligne avant de sauvegarder l'ensemble.
    Bon dev
    Laurent

    - C’est génial.
    - Non c’est bizarre.
    - Justement quand c’est simple y’a des milliers de réponses et quand c’est bizarre y’en a aucune.

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2011
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 49
    Points : 40
    Points
    40
    Par défaut
    ReBonjour,


    J'ai l'impression que la réponse du laurent pourra débloquer la situation , sauf que là je suis surpris que ma version windev ne posséde pas les deux fonctions :
    fChargeBuffer & fSauveBuffer


    Sinon, est ce qu'il y a pas moyen de simuler le fonctionnement de ces deux fonctions sur la Version 15 de Windev.. !!!!??

  8. #8
    Membre éprouvé

    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    402
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 402
    Points : 915
    Points
    915
    Par défaut
    Houlala oui honte sur moi ...
    (shame on me as they say...)

  9. #9
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Premier message
    Citation Envoyé par zakarinalaw Voir le message

    developpezINSERTION
    developpez2
    developpez3
    Explication complémentaire
    Citation Envoyé par zakarinalaw Voir le message
    En fait pour se positionner qu'en 2éme ligne, effectivement j'ajoute les 2 octets en plus la taille du 1ere ligne et me fait l'affaire, dans notre cas , la 1ere ligne est de 10 octets. Alors quand je fais fPositionne(Idfich,12,fpDébut) , il m’amène en 2éme ligne.

    Par contre le grand problème c'est qu'il m'écrase l'écriture existante de la 2éme ligne, parc qu’il s'agit en fait d'un fichier de log cyclique.

    J’insère jusqu’à la 100éme ligne et je reviens à insérer des nouvelles lignes qui commencent de début de fichier et qui en remplacent les anciennes.

    Je me réexplique le problème ..

    J'ai un fichier log de 100 lignes . toute les lignes ont un nombre d'octets fixe (ex : 10 Octets)

    Et mon écriture dans ce fichier doit être effectuer de la manière suivante:

    Si le fichier a déjà écrit sa 100éme ligne la 101éme ligne doit être insérer en 1ére et la 102éme en 2éme en écrasant et remplaçant les lignes.

    .
    insertion 100

    ||
    VV

    insertion 101
    insertion 102
    insertion 3


    103 doit prendre la place de l'insertion 3 .. etc


    Et pour cela j'aurais besoin de se postionner entre différentes lignes mais pas forcément la 2éme
    Bonjour,

    Si je lis l'explication de zakarinalaw ci-dessus, je ne comprends pas le problème et je crois qu'il s'est emmêlé les pinceaux.

    Il nous explique que les lignes supérieures à 100 doivent écraser et remplacer celles de même rang (modulo division par 100 et multiples de 100).
    Il ne s'agit donc pas d'insertion de lignes et in fine, c'est ceci qu'il souhaite faire :
    developpez
    developpez2 ===> REMPLACEMENT par developpez102 et pas INSERTION
    developpez3
    Or, c'est exactement ce que fait fEcrit.
    Mais il semble qu'il ait aussi un problème de positionnement.

    Donc, il doit
    1. se positionner dans le fichier au début du log qu'il veut écrire avec fPositionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    nNoInsertion est un Entier
    nDéplacement est un  Entier
    nDéplacement = 12 * modulo(nNoInsertion, 100) + 1
    fPositionne(NomFichier, nDéplacement, fDébut)
    2. remplacer l'ancien log par le nouveau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    sRemplacement est un Chaîne
    nRemplLongueur est un Entier = 12
    sRemplacement = log + RC
    fEcrit(NomFichier, sRemplacement, nRemplLongueur
    J'ai utilisé des variables partout parce que cela permettra de paramétrer la procédure et donc de répondre à d'éventuelles modification de la taille du log.
    nRemplLongueur est en principe inutile, mais en cas de débordement, cela évitera d'aller écraser les logs qui suivent dans le fichier.

    Hemgé

  10. #10
    Membre actif
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 176
    Points : 297
    Points
    297
    Par défaut
    Bonjour,

    Je pense Hemgé, que zakarinalaw nous décrit ce qu'il se passe, et non pas ce qu'il voudrait d'ou la confusion.

    Comme tu n'a pas les fonctions fChargeBuffer et fSauveBuffer, dans un cas comme celui-ci, on doit pouvoir s'en sortir avec fChargeTexte() et fSauveTexte().

    Maintenant, ne travaillant pas avec des fichiers textes, je ne connais pas leurs limites par rapport à fChargeBuffer, mais dans l'aide on a :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonBuffer est un Buffer = fChargeTexte("C:\MesFichiers\MonFichier.XML")
    donc tu devrais retomber sur tes pattes et le code donné par Laurent.

    Bonne continuation.
    L’aléatoire n’existe pas en informatique, c’est juste un moyen de dire que l’on a pas encore compris.

  11. #11
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    OK kyroon, admettons.

    Mais alors, il se complique drôlement la vie.

    S'il s'agit "d'un fichier de log cyclique" et qu'il veut donc réutiliser les 'enregistrements' au fur et à mesure, on se trouve dans une logique fifo et il faut invariablement insérer le nouveau log en position 1, en repoussant tout l'existant vers la fin du fichier et en amputant ce qui dépasse la limite de 100.

    Sinon, il va encore devoir gérer un compteur quelque part, gérer son parcours s'il veut étudier les logs etc.
    Un petit fichier à accès direct ou indexé serait plus pratique, sauf qu'il n'est peut-être pas maître de la situation.

    Alors, zakarinalaw, si vous nous disiez ce qu'il en est exactement avant qu'on ne ponde inutilement des tonnes de commentaires ?

  12. #12
    Membre actif
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 176
    Points : 297
    Points
    297
    Par défaut
    S'il s'agit "d'un fichier de log cyclique" et qu'il veut donc réutiliser les 'enregistrements' au fur et à mesure, on se trouve dans une logique fifo et il faut invariablement insérer le nouveau log en position 1, en repoussant tout l'existant vers la fin du fichier et en amputant ce qui dépasse la limite de 100.
    Entièrement d'accord
    L’aléatoire n’existe pas en informatique, c’est juste un moyen de dire que l’on a pas encore compris.

  13. #13
    Membre éprouvé

    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    402
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 402
    Points : 915
    Points
    915
    Par défaut
    Bien que probablement hors de propos je m'interroge sur la pertinence de stocker les logs dans un fichier texte.
    Ok on voit ça depuis tout petits et on se dit que les autres avaient sans doute une bonne raison mais...
    Ne pas stocker les logs dans une base de donnée client serveur ok
    Mais quand on a la possibilité de stocker ça dans une belle table (Fichier) en HF classique...
    Quand la table en question peut être stockée en local et qu'elle permet de faire des interrogations de façon tellement plus pertinente qu'en se promenant un fichier texte...
    je m'interroge. La solution pour écrire un fichier texte ok mais la solution au vrai problème est peut-être d'abandonner le fichier texte tout simplement.

  14. #14
    Membre du Club
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2011
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 49
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par Hemgé Voir le message

    S'il s'agit "d'un fichier de log cyclique" et qu'il veut donc réutiliser les 'enregistrements' au fur et à mesure, on se trouve dans une logique fifo et il faut invariablement insérer le nouveau log en position 1, en repoussant tout l'existant vers la fin du fichier et en amputant ce qui dépasse la limite de 100.
    Je vous confirme que ca tourne exactement sous la logique fifo comme il la compris Hemgé.

    Je réexplique brièvement le besoin :
    Prenant le fichier log.txt qui contient les pseudos des intervenant de cette discution:

    La procédure en question doit faire le traitement suivant :
    - Insérer chaque pseudo par ligne jusqu'à qu'elle arrive au 100éme intervenant
    - Une fois la 101éme intervenant existe, la procédure doit l'insérer en 1ere ligne et écraser le contenu de cette dernière, et de même manière elle insère le 102 et 103 .. respectivement en 2éme et en 3éme ligne .. jusqu'elle arrive à la dernière ligne de nouveau qui doit être la 200éme, pour insérer le 201 à la postion de la ligne 101.

    Ex : Prenant la structure ci-dessous.


    ----------
    Kyroon
    laurent30s
    Hemgé
    zakarinalaw
    Atsibat
    .
    .
    .
    Intervenant N°100
    ---------

    Mon fichier log.txt doit devenir comme ceci:

    ----------
    Intervenant 101
    Intervenant 102

    Hemgé
    zakarinalaw
    Atsibat
    .
    .
    .
    .
    Intervenant 100
    ---------


    Une vérification de la position de la dernière insertion est recommandée, pour qu'elle insère dans le bon endroit.


    Cordi

  15. #15
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonsoir zakarinalaw.

    Donc vous confirmez ce que j'avais compris de votre problème.
    Alors, je vous ai fourni la réponse aux deux questions qui se posent : position et remplacement.

    A vous d'essayer et de nous dire si cela coince quelque part.
    Sinon, n'oubliez pas de passer en [Résolu].


    Par contre, vous aurez constaté que nous déconseillons d'adopter un fichier texte et qu'un fichier à accès direct, éventuellement avec une clé DateHeureOpérateur par exemple serait plus pratique et plus rapide à l'usage.

    Bon travail

    Hemgé

  16. #16
    Membre du Club
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2011
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 49
    Points : 40
    Points
    40
    Par défaut
    Bonsoir Hemgé,

    Citation Envoyé par Hemgé Voir le message
    Bonsoir zakarinalaw.

    Donc vous confirmez ce que j'avais compris de votre problème.
    Alors, je vous ai fourni la réponse aux deux questions qui se posent : position et remplacement.
    Oui je confirme que vous avez bien compris qu'il s'agit du principe fifo dont mon application a besoin, sauf que quand j'ai testé avec le code que vous m'avez donné, ca me renvoi toujours qu'au 1ére ligne.


    ..
    .

  17. #17
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Citation Envoyé par Atsibat Voir le message
    Bien que probablement hors de propos je m'interroge sur la pertinence de stocker les logs dans un fichier texte.
    Ok on voit ça depuis tout petits et on se dit que les autres avaient sans doute une bonne raison mais...
    Ne pas stocker les logs dans une base de donnée client serveur ok
    Mais quand on a la possibilité de stocker ça dans une belle table (Fichier) en HF classique...
    Quand la table en question peut être stockée en local et qu'elle permet de faire des interrogations de façon tellement plus pertinente qu'en se promenant un fichier texte...
    je m'interroge. La solution pour écrire un fichier texte ok mais la solution au vrai problème est peut-être d'abandonner le fichier texte tout simplement.
    C'est très simple: un fichier texte est lisible avec un simple Notepad, vi... Et c'est bien plus difficile à "corrompre" qu'un fichier binaire (en cas d'arrêt violent de l'appli et/ou de la machine).

    Tatayo.

  18. #18
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Ho zakarinalaw !

    Pas seulement fifo, mais aussi remplacement au lieu d'insertion et problème de positionnement.

    Maintenant, vous devez aussi coder un peu par vous-même.

    Et si vous montrez votre code, vous avez un tas de personnes qui vont se démener pour vous aider à le corriger ou à l'améliorer.
    Regardez le nombre d'intervenants à cette discussion.
    Mais nous dire : "J'ai testé et cela ne fonctionne pas." ...

    Comment voulez-vous que nous intervenions sur ce code 'virtuel' ?

    Souvenez-vous : "Aide-toi et le Forum t'aidera."

    Hemgé

  19. #19
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 178
    Points : 416
    Points
    416
    Par défaut
    Bonjour,

    Vous pouvez utiliser un caractère non imprimable, par exemple le "Record separator", caract(30) dans windev, pour enregistrer la position du dernier enregistrement.
    Ce caractère ne sera pas visible dans le bloc note et vous pourrez facilement le localiser dans le fichier texte.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    insertion 1[RC]
    insertion 2[RC]
    insertion 3[RC]
    insertion 4[RS][RC]
    insertion 5[RC]
    insertion 6[RC]
    En déterminant la position de [RS] vous savez que vous devez écrire le prochain enregistrement dans la ligne suivante, 5 dans l'exemple.

    C'est pas à l'épreuve des balles mais ça peut éviter de maintenir un compteur quelque part ailleurs.

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 771
    Points
    1 771
    Par défaut
    Tu as envoyé 2 messages pour le sujet.
    Dans le 1er tu parles de log.

    En principe un fichier de log liste chronologiquement les événements/actions que l'on souhaite tracer.

    Je peux comprendre qu'on veuille limiter les log à un certain nombre de ligne même si je pense que ce n'est pas judicieux (quel intérêt ? la taille ? on parle de quelques ko...). Dans ce cas chaque fois qu'on ajoute une ligne on supprime la première.

    Par contre j'ai beaucoup de mal à comprendre qu'il puisse y avoir un intérêt à ce que après un certain nombre de ligne on vienne re-écrire sur les premières. Du coup la chronologie ce trouve à un moment plus respectée...

    ...
    Ligne 123
    Ligne 124
    Ligne 25
    Ligne 26
    ...

    Dans tes lignes si rien n'indique la chronologie, à un moment tu vas être trompé en pensant que la ligne 25 succède à la 124...
    Si la chronologie est indiqué dans tes lignes, il te faut guetter à quel moment elle n'est pas respecté...
    Donc dans tous les cas je ne vois quel intérêt tu as à vouloir procéder ainsi.

    Te retrouver avec ça me semble plus lisible
    Ligne 25
    Ligne 26
    ...
    Ligne 123
    Ligne 124

    enfin bon c'est ton choix, tu dois sans doute avoir tes raisons...

    Le problème dans ton choix c'est qu'il faut pouvoir identifier quelle ligne doit être écrasée/remplacée.
    Soit dans ton fichier la chronologie est indiquée, auquel cas on peut identifier cette ligne en parsant toutes les lignes et en repérant quand la chronologie n'est plus respectée, il s'agit de la ligne à écraser/remplacer...
    Soit dans ton fichier la chronologie n'est pas indiquée auquel auquel cas tu dois tenir un compteur à part et le transmettre à la procédure d'écriture dans le fichier. Il te faut également penser que ce compteur doit être sauvegardé à chaque écriture de ligne pour qu'après un arrêt du programme (y compris plantage) les prochaines écritures se facent sur les bonnes lignes...

    Personnellement je pense que ce que tu veux faire est beaucoup plus compliqué que de simplement ajouter une ligne en fin de fichier et supprimée la première. Aussi je n'entreprendrais cette démarche que si elle a vraiment un intérêt pour la lecture de tes log. Et je t'avoue qu'à la lecture de tes message je n'ai pas encore perçu l'intérêt que tu as à procéder ainsi. Je craints que tu te compliques la vie pour pas grand chose...

    Mais comme je l'ai dit plus haut tu as peut-être des raisons motivées de procéder ainsi...
    Bon dev
    Laurent

    - C’est génial.
    - Non c’est bizarre.
    - Justement quand c’est simple y’a des milliers de réponses et quand c’est bizarre y’en a aucune.

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/07/2004, 09h30
  2. Réponses: 2
    Dernier message: 02/03/2004, 19h38
  3. Réponses: 3
    Dernier message: 22/02/2004, 20h09
  4. [LG]rechercher dans un fichier texte
    Par BadFox dans le forum Langage
    Réponses: 11
    Dernier message: 01/12/2003, 15h57
  5. recherche de doublons dans un fichier texte
    Par portu dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 07/10/2003, 14h13

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