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

Entrée/Sortie Java Discussion :

question de tableau char (RandomAccessFile)


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut question de tableau char (RandomAccessFile)
    Bonjour,

    Je suis occupé à m'exercer sur un exercice mais il y'a quelque chose d'étrange.

    Je remplie un fichier à accès direct de cette façon :

    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
    import java.io.*;
    public class RevisionsRAF 
    {
    	public static void main (String [] args) throws IOException
    	{
    		long tailleRec = 12;
    		int nbRec = 4;
    		String rep, categorie;
    		double prix, taux, prixTTC, taxe;
    		RandomAccessFile raf = new RandomAccessFile("c:\\work\\fichiersTaxes.dat","rw");
     
    		raf.writeChars("LI");raf.writeDouble(1.45);
    		raf.writeChars("DI");raf.writeDouble(1.60);
    		raf.writeChars("CD");raf.writeDouble(1.75);
    		raf.writeChars("DV");raf.writeDouble(1.85);
    J'appelle ensuite une méthode qui va lire à l'écran, le contenu du RAF :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		System.out.println(readFile(raf,tailleRec));
    le code de cette méthode contient ce code :

    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
    public static String readFile(RandomAccessFile raf, long tailleRec) throws IOException
    	{
    		String s = "Categorie\tTaux\n";
    		long nbRec = raf.length()/tailleRec;
    		raf.seek(0);
    		for (long i=0; i<nbRec;i++)
    		{
    			char cat [] = new char [2];
    			cat[0] = raf.readChar(); cat[1] = raf.readChar();
    			
    			String sCat = new String(cat);
    			System.out.println("ici " + sCat);
    			
    			s+= sCat + "\t\t";
    			s+= raf.readDouble()+"\n";
    			
    		}
    		return s;
    	}
    ce qui m'inquiête, c'est ce qui est en rouge.

    J'ai l'impression que cat[0] prend une valeur (exemple LI) et cat[1] prend une autre valeur (DI par exemple).

    Si je retire le for, il me montre bien qu'une seule valeur, LI.

    En écrivant ce message, je me demande si deux cases d'un tableau char ne sont pas nécessaire pour pouvoir mettre un char (dans le cas d'un raf) ?

    J'espère que vous pourrez m'aider.
    Merci d'avance.

    beegees

  2. #2
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 44
    Par défaut
    readChar ne peux pas lire "LI", il ne lit que "L"
    cat[0] = raf.readChar(); cat[1] = raf.readChar();

    Dans cat[0] tu as : "L", et dans cat[1] tu as "I",
    ensuite tu fait :

    String sCat = new String(cat);

    Donc tu crée une chaine qui contient "L" + "I" => "LI"

    et tu l'affiches
    System.out.println("ici " + sCat);

  3. #3
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Re Yaltar,

    Merci pour ton explication simple et précise.

    Même question que dans mon message précédent, combien d'octet par caractère, 2 ???

    Merci pour ton dévouement.

    Beegees

  4. #4
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 44
    Par défaut
    La réponse est au dessus ...
    La méthode prends un int

  5. #5
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    Corrigez moi si je me trompe, mais en java les caractères sont codés en UNICODE ( UTF16 il me semble ) donc sur 16 bits, ce qui nous fait donc bien 2 octets.
    Par contre j'ai un petit doute ( et la flemme de faire le test ) : les méthode writeChar et readChar ne font-elle pas une conversion dans le charset par défaut de l'OS ( UTF8 sous windaube par exemple ), ce qui fait qu'il ne font plus qu'un octet DANS le fichier ?... A Tester.

    EDIT : je retire ce que j'ai dit pour la conversion en UTF8... J'ai testé. En fait j'ai confondu avec le PrintWriter.println(String)...

  6. #6
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Bonjour Iohack,

    Merci pour ta réponse.

    Donc char c'est bien 2 octects.

    A part la documentation de sun, y'a-t'il moyen de trouver un tableau récapitulatif avec la taille des Write... ?

    Un super grand merci à vous deux pour votre aide.

    beegees

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

Discussions similaires

  1. Question sur tableau à deux dimenssions
    Par Loack- dans le forum C++
    Réponses: 19
    Dernier message: 29/10/2006, 18h55
  2. [langage] question sur tableau
    Par vince2005 dans le forum Langage
    Réponses: 1
    Dernier message: 24/10/2006, 14h12
  3. Limitation, declaration d'un tableau Char[]
    Par semby dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 16/06/2006, 19h01
  4. [Question] - Decalage Tableau
    Par apdcanari dans le forum C
    Réponses: 3
    Dernier message: 23/11/2005, 18h55
  5. Réponses: 3
    Dernier message: 26/05/2004, 23h03

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