Gérer le forum:  Aide  •  Rechercher  •  Liste des Membres  •  Groupes d'utilisateurs   •  S'enregistrer  •  Profil  •  Se connecter pour vérifier ses messages privés  •  Connexion 
 [Java] Fichier texte Voir le sujet suivant
Voir le sujet précédent
Poster un nouveau sujetRépondre au sujet
Auteur Message
oceane751
Forumeur fréquent
Forumeur fréquent


BTS IG - Option développeur 2ème année
Sexe: Sexe:Féminin
Messages: 93

MessagePosté le: Mer 27 Juil 2005 - 17:16 Répondre en citantRevenir en haut

bonjour
voilà j'ai delà un code qui est presque fini mais je me suis aperçu que pour modifier ou rajouter des elemnts il fallait aller dans le code, ce qui n'est pas tres pratique...
alors l'utilisation d'un fichier texte (et non dune base de données, inutile dans ce que je veux faire)serait beaucoup plus approprié...

mais voilà, je voudrais savoir si je suis obligé de refaire totalement mon code, car je suis debitante et j'ai un peu les boulles de devoir tout refaire car j'ai vraiment du mal

alors je vous donne mon code et dites moi ce que je dois faire :

Code:



// penser à mettre l'opportunité de choisir plusieurs fois le meme element

package com.creperiee.test;

import java.awt.Button;

import java.awt.Checkbox;

import java.awt.Color;

import java.awt.FlowLayout;

import java.awt.Frame;

import java.awt.Label;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.math.BigInteger;

import java.util.Enumeration;

import java.util.Hashtable;
import javax.swing.JOptionPane;
import javax.swing.*;
import java.awt.Choice;


public class Cartee extends Frame

{

Label entree = new Label("entree");

Checkbox salade = new Checkbox("salade");
    Choice maCombo = new Choice();



Checkbox melon = new Checkbox("melon");

Label cs = new Label("crepe salee");

Checkbox jf = new Checkbox("jambon fromage");

Checkbox complete = new Checkbox("complete");

Label csu = new Label("crepe sucree");

Checkbox su = new Checkbox("crepe au sucre");

Checkbox choc = new Checkbox("crepe au chocolat");

Label boi = new Label("boisson");

Checkbox coca = new Checkbox("coca cola");

Checkbox cidre = new Checkbox("cidre");

Button bout = new Button("ticket");

Button quitter = new Button("quitter l'application");

Hashtable associationProduitsPrix;

public Cartee()

{

super("creperie");

initFrame();

addBouton();

initPrix();





initBoutonsListeners();

}

private void initFrame()

{

setSize(250, 250);

setLayout(new FlowLayout()); //sinon n'affiche qu'un seul element ds la fenetre

setVisible(true);

setBackground(Color.yellow);

setForeground(Color.black);

}

private void addBouton()

{

add(entree);

add(salade);
    add(maCombo);
    maCombo.add("1");
    maCombo.add("2");

add(melon);

add(cs);

add(jf);

add(complete);

add(csu);

add(su);

add(choc);

add(boi);

add(coca);

add(cidre);


add(bout);

add(quitter);

}

private void initPrix()

{

associationProduitsPrix = new Hashtable();

associationProduitsPrix.put(salade, new BigInteger("10"));

associationProduitsPrix.put(melon, new BigInteger("5"));

}

private void initBoutonsListeners()

{

quitter.addActionListener(new ListenerQuitter());

bout.addActionListener(new ActionListener()

{

    public void actionPerformed(ActionEvent e)

{

BigInteger total = new BigInteger("0");

Enumeration enu = associationProduitsPrix.keys();

while (enu.hasMoreElements())

{

Checkbox check = (Checkbox)enu.nextElement();

if (check.getState())

{

BigInteger prix = (BigInteger)associationProduitsPrix.get(check);

total = total.add(prix);
}
  }
  JOptionPane.showMessageDialog(null, "Total : " + total+ " \u20ac");





}

});

}






class ListenerQuitter implements ActionListener

{

public void actionPerformed(ActionEvent e)

{

System.exit(0);

}

}

public static void main(String[] args)

{

Frame f = new Cartee();

}

}



voilà merci pour votre aide car suis vraiment degoutée... Crying or Very sad
Voir le profil de l'utilisateurEnvoyer un message privé

N'oubliez pas de vous inscrire à la communauté pour participer. Si vous êtes déjà membre, connectez-vous pour faire disparaître ce bandeau publicitaire.
Yipyip
Modérateur
Modérateur



Sexe: Sexe:Féminin
Messages: 1163
Localisation: Ici, là, pas loin ...

MessagePosté le: Mer 27 Juil 2005 - 19:41 Répondre en citantRevenir en haut

deja, pour traiter un fichier texte tu aura besoin de
Code:

#import java.io.*;    //pour utiliser les fichiers texte
#import java.util.*;   //pour traiter les chaine de caractère du fichier
#import java.lang.*;   //je sais plus pour quoi là, mais c'est nécessaire


La je vais te filer le code pour extraire d'un fichier texte des elements. Ne le recopie pas tel quel mais adapte le à ton code

Code:

public static double rechercher_total_compte (String fic, int place_prix, int nb_lignes, int ligne_debut) throws IOException
  {
    //variables
    String ligne;
    String montant_chaine;  //le montant (prix trouvé sur la chaine)
    FileReader fichier_lu = null;  //le fichier n'a pas encore été lu
    RandomAccessFile raf = new RandomAccessFile (fic, "r");  //le fichier est lu en lecture
    double total = 0.0;  //le total trouvé, à 0.0 au debut
     
    int i=0; //pour trouver la place du nombre à ajouter
    int j=0; //pour le nombre de ligne
   
    // récupération des montants directement dans le fichier
    try
    {
      while ( (ligne = raf.readLine() ) != null)
      {
        if ( (j < nb_lignes) && (j > ligne_debut) )
   {
     StringTokenizer st = new StringTokenizer(ligne, ";");
     while (st.hasMoreTokens() )
     {
       montant_chaine = st.nextToken();
       if (i == place_prix)
       {
         System.out.println ("Le montant de l'opération est : " + montant_chaine);
         Double D = new Double(montant_chaine);
         double d = D.doubleValue();
         total = total + d;
       }
       i++;
     }
     i = 0;
        }
   j++;
      }
    } 
    catch (IOException e)
    {
      System.out.println ("Erreur : " + e);
      System.out.println ("Impossible de lire le fichier en cours ....");
    }
   
    return total;
  }


Cette méthode parcours un fichier texte ou les lignes sont de type de type. Elle cherche le montant des articles sur le fichier texte pour en faire un total.

Code:

date_ajout;code_produit; libelle_produit;prix_produit
27-07-2005;cps001;crepe au sucre;3
27-07-2005;cpc002;crepe au chocolat;4
27-07-2005;cpc003; crepe chocolat coco;4.5

_________________
Image
Image
Voir le profil de l'utilisateurEnvoyer un message privé
oceane751
Forumeur fréquent
Forumeur fréquent


BTS IG - Option développeur 2ème année
Sexe: Sexe:Féminin
Messages: 93

MessagePosté le: Mer 27 Juil 2005 - 20:44 Répondre en citantRevenir en haut

deja merci pour ta reponse
puis te dire que il y a un petit probleme dans le code ;
il me dit en soulignant en rouge le "double" : class ou interface attendu
j'ai tenté de faire :
Code:

public class rechercher_total_compte  // jai repris ton code pour le tester
{
 
static double (String fic, int place_prix, int nb_lignes, int ligne_debut) throws IOException
    {
....


mais à coté du "double" il y a aussi une erreur : "identificateur attendu "
Voir le profil de l'utilisateurEnvoyer un message privé
queskispace
Accro à Web-IG
Accro à Web-IG


BTS IG - Option développeur Diplômé
Sexe: Sexe:Masculin
Messages: 194
Localisation: En ce moment, derrière mon pc

MessagePosté le: Mer 27 Juil 2005 - 21:11 Répondre en citantRevenir en haut

Non tu n'est pas obligé de tout recommencer bien sur !!!
Si tu veux utiliser un fichier texte, ce que tu peux faire c'est ecrire une fonction qui vas lire ton fichier ligne par ligne, par exemple, la premiere ligne c'est le nom de l'article, la deuxieme pour le prix.
Le problème c'est pour les catégories des articles, ce que tu peu faire c'est par exemple decider que si le nom est entre crochet, c'est le nom d'une catégorie et dans ce cas les articles suivant apartiendront a cette catégorie.
Ou alors une autre solution un peu plus simple peut etre a programmer, c'est d'avoir deux fichiers, un pour les articles et un pour les catégories.
Dans celui des articles, tu a une ligne pour le nom, une pour le prix et une pour l'identifiant de ta catégorie.
Dans le deuxième fichier tu as un ligne pour le nom de la catégorie et une ligne pour l'identifiant.
Un petit exemple :
Le fichier catégorie :
Code:
Boisson
1
Crepes
2
Plats
3

Le fichier produits
Code:
Coca
1.12
1
Orangina
1.12
1
Crepes au chocolat
2.5
2
Salade composé
1.21
3


Apres ta fonction analyse ces fichiers et renvoie une table de hashage pour les produits et pour les catégorie, et tu te sert de cette table de hashage pour créer tes elements.

Code:

Enumeration labelProduits = produits.keys();
while (labelProduits.hasMoreElements()) {
// Tu récupère le label du produit (la clé de la table de hashage
  String unProduit = (String) labelProduits.nextElement();
  // Tu rajoute le prix et le label dans ta table d'association de prix
  associationProduitsPrix.put(unProduit, produits.get(unProduit));
  // Tu crée et ajoute le label
  add(new Checkbox(unProduit));
}


Bon il faut faire des modifs a ce code pour qu'il fonctionne, mais ca peu pt etre t'aider.

Si tu as besion d'un code plus complet demande moi

Sinon comme tu debute je sais pas qu'elle editeur tu utilise pour java mais je te conseille Eclipse qui a le gros avantage de mettre en surbrillance toutes les erreurs de syntaxe et il te propose meme des aide pour les corriger.
Et aussi te decourage pas pour la programmation, tout le monde galere au debut, mais apres ca va tt seul Very Happy

Voila @+

_________________
Tout a une fin sauf le saucisson qui en a deux
Voir le profil de l'utilisateurEnvoyer un message privéMSN Messenger
queskispace
Accro à Web-IG
Accro à Web-IG


BTS IG - Option développeur Diplômé
Sexe: Sexe:Masculin
Messages: 194
Localisation: En ce moment, derrière mon pc

MessagePosté le: Mer 27 Juil 2005 - 21:16 Répondre en citantRevenir en haut

oceane751 a écrit:
deja merci pour ta reponse
puis te dire que il y a un petit probleme dans le code ;
il me dit en soulignant en rouge le "double" : class ou interface attendu
j'ai tenté de faire :
Code:

public class rechercher_total_compte  // jai repris ton code pour le tester
{
 
static double (String fic, int place_prix, int nb_lignes, int ligne_debut) throws IOException
    {
....


mais à coté du "double" il y a aussi une erreur : "identificateur attendu "


C'est parce que tu as pas mis le nom de la fonction rechercher_total_compte apres static double :
Code:
public static double rechercher_total_compte (String fic, int place_prix, int nb_lignes, int ligne_debut) throws IOException

_________________
Tout a une fin sauf le saucisson qui en a deux
Voir le profil de l'utilisateurEnvoyer un message privéMSN Messenger
oceane751
Forumeur fréquent
Forumeur fréquent


BTS IG - Option développeur 2ème année
Sexe: Sexe:Féminin
Messages: 93

MessagePosté le: Mer 27 Juil 2005 - 21:21 Répondre en citantRevenir en haut

merci c'est gentil..
voila un peu ce que j'ai mis dans mon fichier :
Code:


libelle; prix
jambon fromage; 10
coca; 3



ya pas beaucoup de truc, mais pour l'instant pas besoin de plus Wink
et seul le libelle et le prix m'interesse vraiment...

et sinon, j'ai un bout de code qui m'a l'air pas mal et dis moi ce que t'en pense :

Code:


Properties props;
 ...
  props.load( anInputStream ); // chargement du fichier
 ...
 Checkbox jf = new Checkbox( props.getProperty( "CheckBox_JF" ));


enfin on m'a aidé et je pense que ca peux aussi me mettre sur la voie...

mais est ce que je suis obligé de creer un class pour la connection à mon fichier?

merci de comprendre que je suis debutante et que je galere un peu Embarassed
Voir le profil de l'utilisateurEnvoyer un message privé
oceane751
Forumeur fréquent
Forumeur fréquent


BTS IG - Option développeur 2ème année
Sexe: Sexe:Féminin
Messages: 93

MessagePosté le: Mer 27 Juil 2005 - 21:36 Répondre en citantRevenir en haut

j'ai fais un truc que voila :

Code:


Properties props = new Properties();
    FileInputStream in = new FileInputStream ("carte.txt");
    props.load (in);  ==> erreur



    Label entree = new Label("entree");

    Checkbox salade = new Checkbox(props.getProperty("libelle"));


mais il y a une erreur entre load et (in) ==W "identificateur attendu "
a quoi ceci est du?
Voir le profil de l'utilisateurEnvoyer un message privé
queskispace
Accro à Web-IG
Accro à Web-IG


BTS IG - Option développeur Diplômé
Sexe: Sexe:Masculin
Messages: 194
Localisation: En ce moment, derrière mon pc

MessagePosté le: Jeu 28 Juil 2005 - 11:39 Répondre en citantRevenir en haut

Ben c'est bizarre chez moi j'ai pas d'erreur...
Est ce que tu a bien importé FileInputStream et Properties ?
Est ce que tu gère bien les exceptions FileNotFound et IOException ?

Voila mon code :
Code:

Properties props = new Properties();
FileInputStream in;
try {
  in = new FileInputStream ("carte.txt");
  props.load (in);
} catch (FileNotFoundException e) {
  e.printStackTrace();
} catch (IOException e) {
  e.printStackTrace();
}
      
Label entree = new Label("entree");
Checkbox salade = new Checkbox(props.getProperty("libelle"));

_________________
Tout a une fin sauf le saucisson qui en a deux
Voir le profil de l'utilisateurEnvoyer un message privéMSN Messenger
queskispace
Accro à Web-IG
Accro à Web-IG


BTS IG - Option développeur Diplômé
Sexe: Sexe:Masculin
Messages: 194
Localisation: En ce moment, derrière mon pc

MessagePosté le: Jeu 28 Juil 2005 - 11:55 Répondre en citantRevenir en haut

oceane751 a écrit:

et sinon, j'ai un bout de code qui m'a l'air pas mal et dis moi ce que t'en pense :

Code:


Properties props;
 ...
  props.load( anInputStream ); // chargement du fichier
 ...
 Checkbox jf = new Checkbox( props.getProperty( "CheckBox_JF" ));



C'est un très bon bout de code, j'avais oublié que l'on pouvait passer par la classe properties, ca t'evitera d'ecrire directement dans le fichiers.
Par contre il ne faut surtout pas que t'ecrive directement le nom des elements dans ton code, ce qu'il faut faire c'est utiliser la méthode keys() de Properties qui vas te renvoyer une énumération de toute les clés de ton fichiers, et apres pour chaque clé tu fait getProperty pour avoir le prix.

Voila un code qui peut pt etre t'aider :
Code:

Properties props = new Properties();
      
// Rajout d'element avec leur prix dans le fichier propriété
props.put("Jambon fromage", "1.5");
props.put("Coca", "1.2");
      
Enumeration listeProduit = props.keys();
while (listeProduit.hasMoreElements()) {
  String produit = (String) listeProduit.nextElement();
  String prix = props.getProperty(produit);
  System.out.println(produit+" : "+prix);
}


oceane751 a écrit:

mais est ce que je suis obligé de creer un class pour la connection à mon fichier?


Tu ai obligé d'instancier une classe, mais tu n'a pas besoin de réécrire une classe juste pour la connexion a ton fichier.

oceane751 a écrit:

merci de comprendre que je suis debutante et que je galere un peu Embarassed

C'est pas grave, le plus important c'est que quand tu maitrisera bien java t'aide aussi les autres en difficulté sans les traité de newb Very Happy

_________________
Tout a une fin sauf le saucisson qui en a deux
Voir le profil de l'utilisateurEnvoyer un message privéMSN Messenger
oceane751
Forumeur fréquent
Forumeur fréquent


BTS IG - Option développeur 2ème année
Sexe: Sexe:Féminin
Messages: 93

MessagePosté le: Mar 09 Aoû 2005 - 21:36 Répondre en citantRevenir en haut

me revoila !!

j'ai essayé de faire quelque chose mais voila il y a un truc qui ne marche pas dans mon code...
j'essaye de mettre des elements de mon fichier texte dans un un checkbox
je vous donne les elements de mon fichier texte :
libelle = jambon fromage
prix = 10
libelle2 = coca
prix2 = 3

bon il n'y a pas grand chose... mais quand mon code marchera j'en mettrais beaucoup plus!!

et voici mon code :




Code:

package com.creperiee.test;

import java.awt.Button;
import java.awt.Checkbox;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.math.BigInteger;
import java.util.Enumeration;
import java.util.Hashtable;
import javax.swing.JOptionPane;
import javax.swing.*;
import java.awt.Choice;
import java.util.Properties;
import java.io.*;
import java.awt.*;

public class Cartee extends Frame
{


    File propertiesFile;
    Properties props = new Properties() ;
    FileInputStream propertiesStream;
    Hashtable associationProduitsPrix;


    GridLayout grid = new GridLayout(5, 0); //(ligne,colonne)

    Label entree = new Label("entree");

    Checkbox salade = new Checkbox(props.getProperty("libelle"));
    Label lab = new Label(props.getProperty("prix"));
    Choice maCombo = new Choice();

    Checkbox melon = new Checkbox(props.getProperty("libelle"));

    Label cs = new Label("crepe salee");

    Checkbox jf = new Checkbox("jambon fromage");

    Checkbox complete = new Checkbox("complete");

    Label csu = new Label("crepe sucree");

    Checkbox su = new Checkbox("crepe au sucre");

    Checkbox choc = new Checkbox("crepe au chocolat");

    Label boi = new Label("boisson");

    Checkbox coca = new Checkbox("coca cola");

    Checkbox cidre = new Checkbox("cidre");

    Button bout = new Button("ticket");

    Button quitter = new Button("quitter l'application");


    public Cartee()

    {

        super("creperie");

        initFrame();

        addBouton();

        // initPrix();

        // initBoutonsListeners();

          Properties props = new Properties();
        File propertiesFile = new File("carte.txt");

        try {
            FileInputStream propertiesStream = new FileInputStream(
                    propertiesFile);

        }
        catch (FileNotFoundException e)
        {
            System.err.println("Fichier non trouvé");
        } catch (IOException e)
        {
            System.err.println("Impossible de lire");
        }



        //props.load(propertiesStream);
        // propertiesStream.close();
        quitter.addActionListener(new ListenerQuitter());
        //  bout.addActionListener(new ActionListener());



    }

    private void initFrame()

    {

        setSize(250, 250);

        setLayout(new FlowLayout()); //sinon n'affiche qu'un seul element ds la fenetre

        setVisible(true);

        setBackground(Color.yellow);

        setForeground(Color.black);

    }

    private void addBouton()

    {

        add(entree);

        add(salade);
        add(lab);
        add(maCombo);
        maCombo.add("1");
        maCombo.add("2");

        add(melon);

        add(cs);

        add(jf);

        add(complete);

        add(csu);

        add(su);

        add(choc);

        add(boi);

        add(coca);

        add(cidre);

        add(bout);

        add(quitter);

    }

    //private void initPrix()

    //{

    //    associationProduitsPrix = new Hashtable();

    //   associationProduitsPrix.put(salade, new BigInteger("10"));

    //   associationProduitsPrix.put(melon, new BigInteger("5"));

    // }

    private void initBoutonsListeners()

    {

        quitter.addActionListener(new ListenerQuitter());
    }


    public void ActionPerformed(ActionEvent e)

    {

        BigInteger total = new BigInteger("0");

        Enumeration enu = associationProduitsPrix.keys();

        while (enu.hasMoreElements())

        {

            Checkbox check = (Checkbox) enu.nextElement();

            if (check.getState())

            {

                BigInteger prix = (BigInteger)
                                  associationProduitsPrix.get(
                                          check);

                total = total.add(prix);
            }

            JOptionPane.showMessageDialog(null,
                                          "Total : " + total +
                                          " \u20ac");

        }
    }


    class ListenerQuitter implements ActionListener

    {

        public void actionPerformed(ActionEvent e)

        {

            System.exit(0);

        }

    }
        public static void main(String[] args)

        {

            Frame f = new Cartee();

        }
    }



j'ai mis :

Code:


Checkbox salade = new Checkbox(props.getProperty("libelle"));
    Label lab = new Label(props.getProperty("prix"));




--------------------------------------------------------------------------------


mais je n'arrive pas à afficher les elements que je veux dans mon checkbox, je ne comprends pas
donc si quelqu'un pourrait m'aider...

merci !
Voir le profil de l'utilisateurEnvoyer un message privé
Montrer les messages depuis:      
Poster un nouveau sujetRépondre au sujet
 Sauter vers:   



Voir le sujet suivant
Voir le sujet précédent
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum