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

VB 6 et antérieur Discussion :

lecture-ecriture de fichier en mode Random (Get - Put)


Sujet :

VB 6 et antérieur

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mai 2005
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 2
    Points : 1
    Points
    1
    Par défaut lecture-ecriture de fichier en mode Random (Get - Put)
    Bon voila j'ai un petit problème concernant l'utilisation du mode Random dans l'ouverture d'un ficher.
    Je m'explique:
    J'aimerais faire un programme qui remplace les commentaire d'un fichier de programmation (ex: //, ', /* ... */) par un blanc
    Pour cela il faut que je travaille en lecture et en ecriture en meme temps
    et seul le mode Random m'en offre la possibilitée.
    (mode Input pr lire seulement et mode Output pr ecrire seulement)

    le problème c'est que je ne sais pas vraiment comment utiliser le mode Random.
    Les tutoriels de plusieurs site ne m'ont pas beaucoup aidé jusqu'a présent.
    tuto de developpez.com
    tuto de znsoft.free.fr
    même dans le msdn de microsoft ce n'est pas la joie

    J'aimerais savoir si je suis obliger de mettre une taille (len) à l'ouverture du fichier et
    comment déclarer les variable position et tmp.

    Je ne sais pas si le Get lit ligne par ligne ou selon un position dans la ligne

    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
     
    mot1 = "/*"
    mot2 = "*/"
    canal = FreeFile
    chemin = "C:\Program Plus\VB98\Projet Eicw\54_fichier\test.txt"
     
    Open chemin For Random As #canal
    While Not EOF(canal)
        Get #canal, position, tmp
        If ((InStr(tmp, mot1)) > 0) Then
            ou = InStr(tmp, mot1)
            MsgBox ("la phrase " & nb & " contient: " & mot & " a la position: " & ou)
            Put #canal, ou, remplace
        End If
     
        If ((InStr(tmp, mot2)) > 0) Then
            ou = InStr(tmp, mot2)
            MsgBox ("la phrase " & nb & " contient: " & mot & " a la position: " & ou)
            Put #canal, ou, remplace
        End If
        nb = nb + 1
    Wend

  2. #2
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Personellement, quand j'ai à faire face à ce genre de situation, je préfère ouvrir "for output", puis incrire conditionnellement dans une liste en utilisant "Line Input #1, inputdata", puis ouvrir à nouveau en "for append" et réécrire le fichier, ligne par ligne transformée. Ce procédé me laisse le conrôle total des opérations et n'est pas vraiment plus gourmand, ni en code, ni en durée d'exécution.

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Mai 2005
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Donc il n'y à personne qui utilise le mode Random :s
    Co je fais une copie de sauvegarde au tout debut du code,
    je vais devoir travailler en input sur le fichier source et en output
    sur le fichier de copie.

    mon probleme c de pouvoir me positionner au meme endroit sur les 2
    fichiers. elles vont forcement changée si je remplace un mot par un autre
    dans le fichier de copie.

    puis avec get et put, une des variables est justement le positionnement
    qu'on ne retrouve pas avec input et output.

    j'ss complètement perdu :s

  4. #4
    Membre actif Avatar de AdHoc
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 245
    Points : 239
    Points
    239
    Par défaut
    bonjour,
    personnellement, je n'utilise (rarement) le mode random que quand j'ai des enregistrements de taille définie (ie que je connais ou que je peux connaitre). Exemples:
    - enregistrer/Modifier des variables de type utilisateur (=structure, classe)
    - tu peux t'amuser à ecrire une sorte de systeme de gestion de base de données avec.
    Il me semble que cela n'est pas vraiment ton cas donc ce mode n'est pas adapté.
    Pour modifier un fichier texte avec des lignes de longueur variable, le plus simple est la solution de jmfmarques que tu n'as pas compris.
    Tu lis ton fichier d'origine ligne par ligne (ou par n caractere) dans une variable de type chaine (=> accès séquentiel et non aléatoire)
    tu cherche tes chaines dans cette variable, tu les remplace
    Tu ecris cette variable dans ton fichier de destination (vide au départ !!! surtout pas une copie de la source).
    Quand c'est fini, tu detruit ton fichier source et tu renomme ton fichier destination.
    Les sauvegardes, c'est à part, ne mélanges pas tout, on les fait et on n'y touche surtout pas pour travailler.

  5. #5
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut
    Tu peut utiliser le mode Binary :
    Voici une procedure qui ouvreun fichier et remplace tous les // par rien:

    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
    Dim Monfichier As String
    Dim Adresse As String
     
    Adresse="C:\Fichier.txt"
     
    Monfichier=Space(FileLen(Adresse))
     
    Open Adresse For Binary As #1
    Get #1,,Monfichier
    Close #1
     
    Kill Adresse
     
    Monfichier=Replace(Monfichier,"//","")
     
    Open Adresse For Binary As #1
    Put #1,,Monfichier
    Close #1
    La connaissance seule ne suffit pas. La vraie compréhension vient de la mise en expérience.
    Règles|FAQ|Tuto

  6. #6
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 220
    Points
    1 220
    Par défaut
    Citation Envoyé par AdHoc
    Tu ecris cette variable dans ton fichier de destination (vide au départ !!! surtout pas une copie de la source).
    Quand c'est fini, tu detruit ton fichier source et tu renomme ton fichier destination.
    pourquoi ne pas écrire dans le ficier d'origine? à moins q'uil veuillent écrire un enregistrement provisoire en cas d'erreur sur le programme, je ne vois pas l'interet. êtan donné que toutes les manips se font sur une variable (à moins que son fichier dépasse la taille max d'un string), il n'y as pas de problèmes à écrire directement dans le fichier, et ça évite la procédure de renomage...
    salut
    Méphistophélès
    Si la solution ne résout pas votre problème, changez le problème...
    Cours et tutoriels C++ - FAQ C++ - Forum C++.

  7. #7
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut
    La Procedure que j'ai donné ci-dessus ne vous convient pas, si c'est cas dite moi pourquoi, que je sache.
    Merci
    La connaissance seule ne suffit pas. La vraie compréhension vient de la mise en expérience.
    Règles|FAQ|Tuto

  8. #8
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Il est clair qu'on peut toujours utiliser une autre méthode mais...

    Il me semble que la question, ici, est:

    Comment utilise-t-on le mode Random?

    Je ne l'ai pas encore appliqué alors, si quelqu'un l'a déjà fait, il pourra nous expliquer comment ça marche et tout le monde y gagnera.

    Une des questions est: Faut il obligatoirement définir Len?
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  9. #9
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Ceci dit, il est possible que le Random ne puisse pas s'appliquer à ce que veut faire MuShRo_Om.

    Dans ce cas, il serait bon d'expliquer pourquoi.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  10. #10
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Bon !

    Plutôt que de se lancer dans de longues explications sur l'utilité de se servir de l'ouverture en Random (inutile dans le cas de MuShRo_Om) :

    un petit lien qui expliquera à quaoi çà peut servir et quand :

    http://trixar.com/~makai/minidb1.htm


Discussions similaires

  1. [C++] lecture/ecriture dans fichier txt/binary
    Par vince3320 dans le forum C++
    Réponses: 6
    Dernier message: 28/09/2007, 18h00
  2. Lecture/Ecriture de fichiers MAT via .NET
    Par mimic50 dans le forum MATLAB
    Réponses: 3
    Dernier message: 29/03/2007, 11h48
  3. lecture/ecriture de fichier à distance avec indentification
    Par Mat1664 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 22/05/2006, 17h16
  4. Réponses: 4
    Dernier message: 03/02/2006, 13h50

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