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

avec Java Discussion :

Modifier avec RandomAccessFile


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 12
    Par défaut Modifier avec RandomAccessFile
    Bonjour

    Tout débutant, voici mon problème :

    Avec RandomAccessFile (Texte du programme joint) :
    - Je crée un fichier de noms d'auteurs (MonFichierAut) : OK, ça marche !
    - J'ajoute à la fin un auteur ("Shakespeare") : OK, ça marche !
    - Je voudrais remplacer dans le fichier l'auteur "Toto" par l'auteur "Mansfield" :
    est-ce possible ?, si oui :

    1) Quelle méthode utiliser pour savoir si la ligne que je viens de lire est "Toto"
    2) Si j'arrive à déterminer si c'est la ligne de "Toto",
    j'espère remplacer "Toto3 par "Mansfield",
    après avoir relevé la position de la ligne où est "Toto" :
    aut.seek (position);
    aut.writeUTF("Mansfield");


    Voici le texte de mon programme avec en commentaire gras les 3 lignes
    correspondant à mon problème :

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
            try {         
                 
             // CREER
                 
             RandomAccessFile aut =new RandomAccessFile("/Users/gimac/Desktop/MonFichierAut","rw");
             String auteurs [] = new String [6];
             String ecr [] = new String [7];
             int i = 0;
                          
                          auteurs [0] = "Pef"; 
                          auteurs [1] = "Murail"; 
                          auteurs [2] = "Morgenstern";
                          auteurs [3] = "Toto";
                          auteurs [4] = "Dahl"; 
                          auteurs [5] = "Morpurgo";
                          
                          // Créer dans MonFichierAut
                          for (i = 0; i < auteurs.length; i++) {
                          aut.writeUTF(auteurs[i]);                }     
                          
                          System.out.println ("***** Pause Lire *****");
                          // Lire dans ecr ce qui a été créé dans MonFichierAut
                          
                          aut.seek (0); // Pointer au début du fichier
                          for (i=0; i<auteurs.length; i++) {
                          ecr[i] = aut.readUTF ();
                          System.out.println (ecr[i]);         }
    
            // AJOUTER A LA FIN
                          
                          aut.seek(aut.length()); // Pointer en fin de fichier
                          aut.writeUTF("Shakespeare");
                          
                          System.out.println ("***** Pause Allonger *****");
                          // Relire MonFichierAut : Shakespeare a bien été ajouté
                          
                          aut.seek (0); // Pointer au début du fichier
                          for ( i=0; i<auteurs.length+1; i++) {
                          ecr[i] = aut.readUTF ();
                          System.out.println (ecr[i]);           }
                          
            // REMPLACER
          
                          aut.seek (0); // Pointer au début du fichier
                          long position = 0; // Position dans MonFichierAut
                          
                          for (i=0; i<auteurs.length+1; i++) {
                            position = aut.getFilePointer(); // Relevé position  
                            ecr[i] = aut.readUTF ();
                            
                          // Si ecr[i] est Toto (COMMENT COMPARER ?) alors :
                          // aut.seek (position); // Positionnement ligne de "Toto"
                          // aut.writeUTF ("Mansfield"); 
                                                             }
                          
                          System.out.println ("***** Pause Remplacer *****");
                          // Relire MonFichierAut et voir "Mansfield"
                          // Actuellement, pas de substitution
                          
                          aut.seek (0); // Pointer au début du fichier
                          for (i=0; i<auteurs.length+1; i++) {
                          ecr[i] = aut.readUTF ();
                          System.out.println (ecr[i]);           }
                          
                  aut.close(); // Fermeture de MonFichierAut       
                          
                  }          
              catch (IOException e) { 
                  e. printStackTrace ();}

    Merci beaucoup si quelqu'un a la patience
    de se pencher sur mon problème.

  2. #2
    regseb
    Invité(e)
    Par défaut
    Citation Envoyé par Macareux Voir le message
    1) Quelle méthode utiliser pour savoir si la ligne que je viens de lire est "Toto"
    2) Si j'arrive à déterminer si c'est la ligne de "Toto",
    j'espère remplacer "Toto3 par "Mansfield",
    après avoir relevé la position de la ligne où est "Toto" :
    aut.seek (position);
    aut.writeUTF("Mansfield");
    Pour comparer deux Strings, il faut utiliser la méthode equals ().
    Ici, ça va être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (ecr[i].equals ("Toto")) {
        // A faire
    }
    Ensuite, tu ne peux pas remplacer Toto par Mansfield. Car, les deux Strings n'ont pas la même taille.

    Pour remplacer une ligne dans un fichier, tu devrais lire le fichier en entier grâce à un BufferedReader et stocker chaque ligne dans une ArrayList. Ensuite tu peux modifier facilement l'ArrayList. Et quand tu as fini les modifications, tu parcours l'ArrayList et réécris tous les auteurs dans le fichier avec un PrintWriter.
    Dernière modification par regseb ; 23/10/2008 à 15h50.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 12
    Par défaut
    Bonjour

    et merci, regseb, pour ta réponse qui me débloque.

    J'ai vu, en effet, en imprimant les positions, que chacun des auteurs est séparé par 2 caractères non utilisateurs.

    J'ai donc complété mon programme, sur tes indications, en remplaçant Toto par Titi de même taille et donc dans ce cas c'est OK. Je reproduis ci-après la séquence REMPLACER pour d'autres qui seraient intéressés (sait-on jamais !).

    Je prends aussi bonne notes de tes conseils relatifs à BufferedReader, Vector et PrintWriter.

    Par la suite, j'envisageais de faire suivre chaque nom d'auteur d'une courte biographie à peu près de même taille pour tous, laisser des espaces inutilisés en fin de chaque auteur et gérer ainsi des entités de tailles fixes. En rangeant les auteurs par ordre alphabétique, je pourrai les rechercher plus rapidement (que séquentiellement dans la plupart des cas) en commençant par le milieu du fichier puis en fonction de la comparaison continuer par le milieu du milieu, etc (dichotomie).

    Voici donc la séquence REMPLACER modifiée :
    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
    aut.seek (0); // Pointer au début du fichier
                          long position = 0; // Pour positionner dans MonFichierAut
                          for ( i=0; i<auteurs.length+1; i++) {
                          position = aut.getFilePointer(); // Relevé position
                          ecr[i] = aut.readUTF ();
                          System.out.println (ecr[i]);
                          if (ecr[i].equals ("Toto")) {
                          aut.seek (position); // Positionnement sur "Toto"
                          aut.writeUTF ("Titi");      }  // Remplacement dans MonFichierAut                                               
                                                              }
     
                          System.out.println ("***** Pause Remplacer *****");
                          // Relire et imprimer voir si Titi a pris la place de Toto
     
                          aut.seek (0); // Pointer au début du fichier
                          for (i=0; i<auteurs.length+1; i++) {
                          ecr[i] = aut.readUTF ();
                          System.out.println (ecr[i]);           }

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

Discussions similaires

  1. [ODBC] Liste modifiable avec saisie intuitive
    Par ploxien dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 14/07/2006, 22h39
  2. [CR] modifier avec CR11 des etats exploités sous CR8
    Par PasHyperPon dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 15/04/2006, 22h09
  3. [AJAX] Modifier avec AJAX une image générée avec GD
    Par thsantac dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/03/2006, 19h34
  4. Réponses: 5
    Dernier message: 06/09/2005, 02h50
  5. Simuler Vue modifiable avec postgresql
    Par mijoya dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 04/04/2005, 16h48

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