Diviser un fichier texte
Résolu
omarelmidaoui
Messages postés
9
Date d'inscription
Statut
Membre
Dernière intervention
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
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"