Diviser un fichier texte

Résolu/Fermé
omarelmidaoui Messages postés 9 Date d'inscription mardi 11 décembre 2012 Statut Membre Dernière intervention 27 juin 2019 - 11 déc. 2012 à 11:23
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 11 déc. 2012 à 23:43
Bonjour,


j'ai un fichier texte de la forme :

.Doc1
The present study is a history of the DEWEY Decimal
Classification. The first edition of the DDC was published
in 1876, the eighteenth edition in 1971, and future editions
will continue to appear as needed.
.X
1004 2 1
1024 2 1
.Doc2
This report is an analysis of 6300 acts of use
in 104 technical libraries in the United Kingdom.
Library use is only one aspect of the wider pattern of
information use. Information transfer in libraries is
restricted to the use of documents.
.X
2 2 2
2 2 2
...
...etc.

je veux pouvoir lire ce fichier, et faire un traitement pour les termes contenus dans chaque Doc present dans ce fichier.

pour ce la je ve une methode qui va lire ce fichier et prendre chaque document et le mettre dans un fichier a part.

c'est a dire :
document1.txt va contenire

.Doc1
The present study is a history of the DEWEY Decimal
Classification. The first edition of the DDC was published
in 1876, the eighteenth edition in 1971, and future editions
will continue to appear as needed.
.X
1004 2 1
1024 2 1

et document2.txt va contenire :

.Doc2
This report is an analysis of 6300 acts of use
in 104 technical libraries in the United Kingdom.
Library use is only one aspect of the wider pattern of
information use. Information transfer in libraries is
restricted to the use of documents.
.X
2 2 2
2 2 2

et ainsi de suite


Merci pour votre aide
A voir également:

2 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
Modifié par KX le 11/12/2012 à 14:13
Ce que tu essayes de faire est très compliqué, il n'est pas du tout nécessaire de maintenir des données en mémoire (à part la ligne courante), il ne s'agit que de faire des lectures et écritures ligne par ligne. Exemple :

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

public class Test
{
    public static void decouperFichier(File fichier,File path) throws IOException
    {
        Scanner in = new Scanner(fichier);
        
        FileWriter out = null;
        
        while (in.hasNextLine())
        {
            String line = in.nextLine();
            
            if (line.startsWith(".Doc"))
            {
                if (out!=null)
                    out.close();
                
                out = new FileWriter(new File(path,line+".txt"));
            }
            
            if (out!=null)
            {
                out.write(line);
                out.write(System.lineSeparator());
            }
        }
        
        if (out!=null)
            out.close();
        
        in.close();
    }
    
    public static void main(String[] args) throws IOException
    {
        decouperFichier(new File("C:/test.txt"),new File("C:/"));
    }
}
La confiance n'exclut pas le contrôle
1
omarelmidaoui Messages postés 9 Date d'inscription mardi 11 décembre 2012 Statut Membre Dernière intervention 27 juin 2019
11 déc. 2012 à 14:29
j'ai une erreur dans :


out.write(System.lineSeparator());

la methode lineSeparator n'est pas definit
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015 > omarelmidaoui Messages postés 9 Date d'inscription mardi 11 décembre 2012 Statut Membre Dernière intervention 27 juin 2019
11 déc. 2012 à 14:44
C'est à ça que l'on voit qui code en Java 6, et qui code en Java 7 ;-)
Tu peux remplacer System.lineSeparator() par System.getProperty("line.separator");
Il s'agit en fait soit de "\n" pour Linux, soit de "\r\n" pour Windows.
0
omarelmidaoui Messages postés 9 Date d'inscription mardi 11 décembre 2012 Statut Membre Dernière intervention 27 juin 2019 > omarelmidaoui Messages postés 9 Date d'inscription mardi 11 décembre 2012 Statut Membre Dernière intervention 27 juin 2019
11 déc. 2012 à 14:48
we c'est fait merci beaucoup, ton code m'as beaucoup aider
0
omarelmidaoui Messages postés 9 Date d'inscription mardi 11 décembre 2012 Statut Membre Dernière intervention 27 juin 2019
11 déc. 2012 à 22:17
bonsoir, KX, j'ai un petit problem, j'ai essayer d'utiliser le code de decoupage dont tu m'as poster, en modifiant un peux pour inclure mon traitement.

bon j'ai pas su où poser mon traitement pour traiter document par document :

voila ce que j'ai fait :



public class Test
{
public static void decouperFichier(String chemin) throws IOException
{


File f = new File(chemin);
Scanner in = new Scanner(f);

FileWriter out = null;

while (in.hasNextLine())
{
String line = in.nextLine();

if (line.startsWith(".Doc"))
{
if (out!=null)
out.close();

out = new FileWriter(new File("document.txt"));


TraitementFichier("document.txt"));

}

if (out!=null)
{
out.write(line);
out.write("\r\n");
}
}





if (out!=null)
out.close();

in.close();
}
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
11 déc. 2012 à 23:43
Peut-être parce que ton document porte toujours le même nom : "document.txt".
Dans mon code, chaque fichier était nommé avec la première ligne, ce qui permettait d'avoir des noms différents, avec ton exemple cela donnait ".Doc1.txt" et ".Doc2.txt"

File fic = new File(path, line+".txt");
out = new FileWriter(fic);
traitementFichier(fic.getAbsolutePath());
0
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
11 déc. 2012 à 12:01
C'est super simple.
Tu lis le fichier, ligne par ligne, et tu écris dans un nouveau document, à chaque fois renommé, ce que tu viens de mettre en mémoire, dans un tableau par exemple .. à chaque fois que tu rencontre ".Docx" (le "x" étant un nombre)
0
omarelmidaoui Messages postés 9 Date d'inscription mardi 11 décembre 2012 Statut Membre Dernière intervention 27 juin 2019
11 déc. 2012 à 12:47
les documents debut pas des .Doc 'x' et pas .Doc'x' et se termine par .X

bon voila ce que j'ai fait :

public void chargerDoc(String chemin) throws IOException {

File f = new File(chemin);
Scanner s = new Scanner(f);
int numDoc = 0;


while(s.hasNextLine()) {

StringTokenizer scc=new StringTokenizer(s.nextLine()," ");


while(scc.hasMoreTokens()) {

String mot = scc.nextToken();


if(mot.equals(".Doc")) {

numDoc++;
textArea2.append("Doc ["+numDoc+"] lu \n");

}

while( scc.hasMoreTokens() && !mot.equals(".X") ) {

/*tant que on a pas arriver au .X : c-a-d la fin du .Doc "x"
je copie le document dans le fichier documentx.txt */

try {

FileWriter lu = new FileWriter("document"+numDoc+".txt",true);
BufferedWriter out = new BufferedWriter(lu);

out.append(mot+" ");
out.close(); }

catch (IOException er) {;}

mot = scc.nextToken(); }



if(mot.equals(".X")) {


// je met les termes du document dans une liste

listedoc = bdd.lireBD("document"+numDoc+".txt");
listdoc = bdd.getListe();

// je supprime les mot vide de la listdoc et mettre le resultats dans list3

list3 = effacerMotsVides(listSW, listdoc);

// je met la list3 dans une textArea

resultatdanstextAreaapreelimination(textArea3, list3);

// j'ecrase le contenue du documentx.txt, par le contenue du textArea3

try
{ FileWriter lu = new FileWriter("document"+numDoc+".txt");
BufferedWriter out = new BufferedWriter(lu);

out.write(textArea3.getText());
out.close(); } catch (IOException er) {;}

// Stemming et indexation du document en cours

stemmer.getStemsWords().clear();
stemmer.Stemming("document"+numDoc+".txt");
liststemmed= stemmer.getStemsWords();
table.clear();
table= occurences(liststemmed);

// et j'affiche l'indexation dans une autre textArea

MapOToTextAreas(table,textArea4);


}
}
}

s.close();

}
0
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
11 déc. 2012 à 13:36
Pourquoi autant de "while" ?
Est-ce vraiment indispensable .. car le seul que je vois indispensable est la boucle de lecture tant que l'on est pas arrivé sur le fin du fichier, non ?
0
omarelmidaoui Messages postés 9 Date d'inscription mardi 11 décembre 2012 Statut Membre Dernière intervention 27 juin 2019
11 déc. 2012 à 13:45
je parcours le fichier terme par terme doc jai besoin de deux boucle while une pour les lignes et une autres pours les termes et j'ais ajouter une autre while imbriquee pour separer les document contenue dans le fichier globale c tt
0
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92 > omarelmidaoui Messages postés 9 Date d'inscription mardi 11 décembre 2012 Statut Membre Dernière intervention 27 juin 2019
11 déc. 2012 à 13:50
ok.
Et ça marche ?
0
omarelmidaoui Messages postés 9 Date d'inscription mardi 11 décembre 2012 Statut Membre Dernière intervention 27 juin 2019 > omarelmidaoui Messages postés 9 Date d'inscription mardi 11 décembre 2012 Statut Membre Dernière intervention 27 juin 2019
11 déc. 2012 à 13:52
ca marche pour pour un fichier contnat 1400 doc, le traitement devien tress louuurd
0