Aide pour ajouter un texte ( java2/sequentialfile )

sikove Messages postés 90 Date d'inscription lundi 17 mars 2008 Statut Membre Dernière intervention 31 mars 2010 - 17 mars 2008 à 19:37
vaan3713 Messages postés 48 Date d'inscription jeudi 19 avril 2007 Statut Membre Dernière intervention 23 avril 2013 - 4 avril 2008 à 23:30
salut tout le monde

vous pourrais m'aider svp dans ce truc: ça concerne les fichiers, il me faudrait obligatoirement savoir la technique de cet ajout

"ajouter
un nom sur le fichier, mais dans la bonne place car le fichier est
sensé etre trié alphabetiquement, genre cmine emine zmine ... et si tu
ajoutes dmine ça doit etre ajouté apres cmine"

voila le code :

import biputil.*;
import java.util.*;

// ajout par ordre alphabetique

public class ajout2 {
public static void main (String args[]) {
int j=0;
Vector tab=new Vector();
SequentialFile fichier=new SequentialFile();

boolean bok=fichier.open("ajout.txt",'r');
if (!bok) System.out.println("erreur");
String Ligne=fichier.read();
while (!fichier.EndOfFile)
{
tab.addElement(Ligne);
Ligne=fichier.read();
}
fichier.close();

System.out.print("infos ici : ");
String info=Keyboard.getString();

boolean trouve=false;
int i=0;
while ((i<tab.size()) && (!trouve))
{
String st=fichier.fieldOf(Ligne,1);
String st2=fichier.fieldOf(info,1);
int m=st.compareTo(st2);
if (m>0)
{
tab.setElementAt(info,i);
trouve=true;
}
i++;
}

fichier.open("ajout.txt",'w');
for (int p=0; p<tab.size(); p++)
{
String str=(String)tab.elementAt(i);
fichier.write(str);
}
fichier.close();

while (j<tab.size())
{
String str2= (String) tab.elementAt(j);
System.out.println(str2);
j++;
}

}
}

merci

8 réponses

uhrand Messages postés 491 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 15 juillet 2012 9
19 mars 2008 à 04:28
...
        while ((i < tab.size()) && (!trouve)) {
            Ligne = (String) tab.elementAt(i);//<-----------------------------
            String st = fichier.fieldOf(Ligne, 1);
            String st2 = fichier.fieldOf(info, 1);
            int m = st.compareTo(st2);
            if (m > 0) {
                tab.insertElementAt(info, i);//<-------------------------------
                trouve = true;
            }
            i++;
        }
        fichier.open("ajout.txt", 'w');
        for (int p = 0; p < tab.size(); p++) {
            String str = (String) tab.elementAt(p);//<-----------------------------
            fichier.write(str);
        }
...
0
sikove Messages postés 90 Date d'inscription lundi 17 mars 2008 Statut Membre Dernière intervention 31 mars 2010
19 mars 2008 à 17:05
ah merci beaucoup monsieur uhrand ^^

sinon des petites questions ( je suis encore un noob ) :

       while ((i < tab.size()) && (!trouve)) {
            Ligne = (String) tab.elementAt(i);
            String st = fichier.fieldOf(Ligne, 1);
            String st2 = fichier.fieldOf(info, 1);
....

- à quoi sert fieldof, chercher sur le fichier ? on doit pas l'ouvrire d'abord ?
- c'est quoi la difference entre "set" et "insert" ?
( tab.insertElementAt(info, i); )
- le fieldof(ligne,1) le 1 ça veut dire chercher dans le premier champ n'est ce pas ? comment faire si on veut chercher dans un 2eme champ ? j'ai bien remplacé 1 par 2 et dans le fichier de traitement j'ai mis :

aa,az,asas
bss,baz,bds

mais l'ajout se fait directement sur la premiere ligne

merci encore pour ton aide
0
uhrand Messages postés 491 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 15 juillet 2012 9
20 mars 2008 à 04:49
Salut sikove, je ne connais pas du tout la méthode "fieldOf". Elle se trouve dans la classe "SequentialFile" qui n'est pas du standard java, et je ne saurais pas te dire non plus où tu pourrais la trouver. Cependant, à mon avis tu dois pouvoir t'informer dans ton entourage proche. La méthode "set" permet d'actualiser une ligne existante, tandis que "insert" insère une nouvelle ligne (comme le nom l'indique). Malheureusement, je ne peus pas du tout t'aider sur les fonctionalités de la classe "SequentialFile". Bon courage quand même, André.
0
sikove Messages postés 90 Date d'inscription lundi 17 mars 2008 Statut Membre Dernière intervention 31 mars 2010
1 avril 2008 à 18:02
salut andré, je me suis beaucoup progressé depuis le jour où j'ai posté le code grace à des sites auto formation et ton aide, merci encore

maintenant je debute l'orienté objet, avec comme exercice remplacement d'un nom dans un fichier par un autre,  en se basant aussi sur une class ecriture pour  taper un texte mais aussi la methode fieldof ( que j'ignore encore son deroulement lol )

le voila :

import java.io.*;
import java.util.*;
public class objet {
    public static void main (String args [])throws IOException {
        Vector tab=new Vector();
        BufferedReader fichier=new BufferedReader(newFileReader "ajout.txt");
        String ligne=fichier.readline();
        while (ligne!=null)
        {tab.addElement(ligne);
        ligne=fichier.readline();}
        fichier.close();
        System.out.println("ancien nom");
        String anc_nom=ecrire();
        System.out.println("nouveau nom");
        String nov_nom=ecrire();
        int i=0;
        boolean trouve=true;
        while(i<tab.size() && trouve)
        {
            ligne=(String)tab.elementAt(i);
            String str=fichier.fieldOf(ligne,1);
            if(anc_nom.equals(ligne))
                {
                ligne=ligne.replaceAll(anc_nom,nov_nom);
                tab.setElementAt(ligne,i);   
                trouve=false;
                }
            i++;
        }
        
         PrintWriter fichier=new PrintWriter (new FileOutputStream ("ajout.txt"));   
         for ( int j=0; j<tab.size(); j++)
         { ligne=(String) tab.elementAt(j);
           fichier.println(ligne);
         }       
         fichier.close();
                        
    }
}

public static String ecrire() throws IOException
{
BufferedReader f=new BufferedReader(new InputStreamReader(System.in));
String str=f.readline();
return str;
}

String fieldOf(String ligne, int indice, int separateur)
{ int position,occurence,positionfinal, positiondebut;
position=0;
for (int i=1; i<=index; i++)
{ occurence=ligne.indexOf(separateur,position);
positiondebut=position;
position=occurence+1; }
positionfinal=occurence;
return(ligne.subString(positiondebut,positionfinal);)
}

mais comme toujours y'a des erreurs, et cette fois ci je suis vraiment coincé ... tu pourrais m'aider stp andré ? j'en ai vraiment besoin de tes sages conseils, car la avec l'objet ça commence à se compliquer 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
uhrand Messages postés 491 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 15 juillet 2012 9
1 avril 2008 à 22:43
Voici une possibilité de mise en forme de ton petit programme:

package demo;
/*
 * UpdateFile.java
 */

import java.io.*;
import java.util.*;

public class UpdateFile {
    private BufferedReader systemIn = new BufferedReader(new InputStreamReader(System.in));
    private String filename = "ajout.txt";

    public UpdateFile() throws IOException {
        List<String> tab = new ArrayList<String>();//"ArrayList" est plus performant que "Vector"
        BufferedReader reader = new BufferedReader(new FileReader(filename));
        String ligne = reader.readLine();
        while (ligne != null) {
            tab.add(ligne);
            ligne = reader.readLine();
        }
        reader.close();
        
        String anc_nom = readIn("ancien nom");
        String nov_nom = readIn("nouveau nom");
        for (int i = 0; i < tab.size(); i++) {
            ligne = tab.get(i);
            if (anc_nom.equals(fieldOf(ligne, 1, " "))) {
                ligne = ligne.replaceAll(anc_nom, nov_nom);
                tab.set(i, ligne);
                break;
            }

        }
        
        PrintWriter writer = new PrintWriter(new FileOutputStream(filename));
        for (String string : tab) {
            writer.println(string);
        }
        writer.close();
    }

    private String readIn(final String str) throws IOException {
        System.out.println(str);
        return systemIn.readLine();
    }

    private String fieldOf(final String ligne, final int indice, final String separateur) {
        return ligne.split(separateur)[indice];
    }

    public static void main(final String args[]) throws IOException {
        new UpdateFile();
    }
}
0
vaan3713 Messages postés 48 Date d'inscription jeudi 19 avril 2007 Statut Membre Dernière intervention 23 avril 2013
2 avril 2008 à 12:50
bonjour, je voudrais s'il vous plait savoir a quoi sert la line suivante dans le code que vous avez proposé:
List<String> tab = new ArrayList<String>();
est ce que c'est pour créer un tableau dynamique comme en C++?
0
uhrand Messages postés 491 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 15 juillet 2012 9
2 avril 2008 à 16:33
 List<String> (ou ArrayList<String>) est un type paramétrisé qui fournit simplement la sûreté du type au moment de la compilation et élimine le besoin d'un "cast".
0
vaan3713 Messages postés 48 Date d'inscription jeudi 19 avril 2007 Statut Membre Dernière intervention 23 avril 2013
4 avril 2008 à 23:30
merci beaucoup c'est moin flou pour moi.
0
Rejoignez-nous