Diviser un fichier texte
Résolu
omarelmidaoui
Messages postés
9
Statut
Membre
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
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
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:
- Diviser un fichier texte
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
2 réponses
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
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)
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)
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();
}
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();
}
out.write(System.lineSeparator());
la methode lineSeparator n'est pas definit
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.
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();
}
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"