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 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 11 déc. 2012 à 23:43
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 11 déc. 2012 à 23:43
A voir également:
- Diviser un fichier texte
- Fichier rar - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Ouvrir un fichier .bin - Guide
- Fichier host - Guide
2 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
Modifié par KX le 11/12/2012 à 14:13
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
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
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)
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)
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
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();
}
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();
}
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
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 ?
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 ?
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
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
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
11 déc. 2012 à 13:50
ok.
Et ça marche ?
Et ça marche ?
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
11 déc. 2012 à 13:52
ca marche pour pour un fichier contnat 1400 doc, le traitement devien tress louuurd
11 déc. 2012 à 14:29
out.write(System.lineSeparator());
la methode lineSeparator n'est pas definit
11 déc. 2012 à 14:44
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.
11 déc. 2012 à 14:48
11 déc. 2012 à 22:17
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();
}
11 déc. 2012 à 23:43
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"