IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Compter caractere et reformater texte


Sujet :

Langage Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Par défaut Compter caractere et reformater texte
    Bonjour,

    Je programme en java et j'aimerais faire la chose suivante :

    recuperer les caracteres d'un fichier texte par exemple, compter les nombre de caractere par ligne et si il y'en plus que 50 sur une meme ligne, faire un retour à la ligne et copier le tout dans mon nouveau fichier .txt. Je ne veux biensur pas couper un mot (donc il faut faire une exception?)...

    Je sais recuperer les caracteres d'un fichier (filereader bufferedreader etc ...)
    a moins que vous n'ayez une methode meilleur (print ?)
    Mais je ne sais pas du tout comment les traiter pour compter et couper les phrases trop longues etc ... Alors j'attends avec impatience votre aide !

    Et merci beaucoup par avance

    PS: En gros c'est un sorte de reformatage de texte dans un autre fichier créé.

  2. #2
    Membre éclairé Avatar de habasque
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Septembre 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 530
    Par défaut split ou stringTokenizer
    Salut,

    Tu peux découper les lignes de ton fichier texte avec split ou stringTokenizer.
    Et au fur à mesure, tu concatènes les différentes token tant que la longueur de la chaine concaténée ne dépasse pas 50...

    A+

  3. #3
    Membre émérite
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Par défaut
    Bonjour,

    Voici ma vision des choses :
    1) lire le fichier ligne par ligne. BufferedReader.readline()
    2) pour chaque ligne
    Si le nombre de caractères < 50 copie de la ligne dans le fichier de sortie
    Sinon
    2-1) decoupage de la ligne en mots String.split()
    2-2) reconstruction d'une ligne mot par mot tant que taille < 50
    2-3) ecriture de la ligne dans le fichier de sortie puis (retour à 2-2).
    3) un fois fini, flush du fichier de sortie et close des fichiers d'entrée et de sortie.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Par défaut
    Ok merci de vos reponse je teste ca au plus tard demain ou samedi et je donne des news

    Merci encore

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Par défaut
    Bonjour, alors j'ai un probleme ... j'arrive pas a ecrire le code permettant de decouper en 50 caractere, voici le code que je suis en train d'ecrire : (copie d'un fichier vers un autre fichier)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    package projet1;
     
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
     
    public class FichierVersFichier {
     
    	public static void main(String args[]){
    		BufferedReader br ;
    		BufferedWriter bw ;
    		String ligne;
     
    		File entree = new File("fichierEntree.txt");
    		File sortie = new File("fichierSortie.txt");
     
    		if(entree.exists()){
    			try
    			{
    				br = new BufferedReader(new FileReader(entree));//preparation du fichier d'entrée - Sera variable plus tard -
    				bw = new BufferedWriter(new FileWriter(sortie));//preparation du fichier de sortie
     
    				while(!(ligne=br.readLine()).equals(" "))
    				{
    					bw.write(ligne + "\n");
    				}
    				bw.close();
    				System.out.println("Opération terminée avec succès");
    			}
    			catch(IOException e)
    			{
    				System.err.println("Le fichier n'existe pas... Changez de source");
    			}
    		}
     
    	}
    }
    Probleme meme ça pour le moment ca marche pas ... (en gros j'ai crée un fichier "fichierEntree.txt" dans lequel jai ecris des chose, puis j'ai creer un fichierSortie.txt vide)
    Mais a l'execution rien ne se passe ... help plz ...

    Merci d'avance

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Par défaut
    si, il me mets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Exception in thread "main" java.lang.NullPointerException
    	at projet1.FichierVersFichier.main(FichierVersFichier.java:29)

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Par défaut
    jarrive a transferer d'un fichier a l'autre !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    package projet1;
     
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
     
    public class FichierVersFichier {
     
    	public static void main(String args[]){
    		BufferedReader br ;
    		BufferedWriter bw ;
    		String ligne;
     
    		File entree = new File("fichierEntree.txt");
    		File sortie = new File("fichierSortie.txt");
     
    		/*try
    		{*/
    			if(entree.exists())
    			{
    				try
    				{
    					br = new BufferedReader(new FileReader(entree));//preparation du fichier d'entrée - Sera variable plus tard -
    					bw = new BufferedWriter(new FileWriter(sortie));//preparation du fichier de sortie
     
    					while((ligne = br.readLine())!= null)
    					{
    						bw.write(ligne + "\n");
    						bw.flush();
    					}
     
    					bw.close();
    					br.close();
    					System.out.println("Opération terminée avec succès");
    				}
    				catch(IOException e)
    				{
    					System.err.println("Le fichier n'existe pas... Changez de source");
    				}
    			}
    		/*}
    		catch(NullPointerException e)
    		{
    			System.err.println("ERREUR");
    		}*/
    	}
    }
    Comment on limite a 50 caracteres par ligne now ?

    Merci encore

  8. #8
    Membre Expert

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Par défaut
    fnobb t'as donné l'algorithme pour le faire.

    Citation Envoyé par fnobb Voir le message
    Bonjour,

    2) pour chaque ligne
    Si le nombre de caractères < 50 copie de la ligne dans le fichier de sortie
    Sinon
    2-1) decoupage de la ligne en mots String.split()
    2-2) reconstruction d'une ligne mot par mot tant que taille < 50
    2-3) ecriture de la ligne dans le fichier de sortie puis (retour à 2-2).
    3) un fois fini, flush du fichier de sortie et close des fichiers d'entrée et de sortie.
    Le nombre de caractères c'est :

    Le découpage comme indiqué c'est split.

    reconstruction d'une ligne c'est '+' (pas optimisé, mais l'amélioration se fera dans un second temps).

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Par défaut
    Merci beaucoup, le length ... je savais pas ... lol

    Merci beaucoup a toi jsuis nul j'espere que ca va s'arranger lol

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Par défaut
    Bon désolé mais je vois pas du tout comment faire pour reecrire une phrase coupé en la limitant a 50 caractere vu qu'apres un split ce sont des mots que j'obtiens ... -_- je sais j'ai du mal ...

    Je fais bien mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(ligne.length() < 50)
    {
     bw.write(ligne + "\n");
    }
    mais pour le else je vois pas du tout comment le construire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    else
    {
     ligne.split(" ");
     while(ligne.length() < 50){
     bw.write(ligne);
    }
    ??

    }

  11. #11
    Membre Expert

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Par défaut
    Faudrait peut être récupérer le résultat du split, qui, comme tu le sais retourne la liste des mots.

    Ensuite ajouter dans une ligne temporaire les mots 1 par 1 tant que la taille de cette ligne ne dépasse pas 50. Il faut donc faire une boucle sur les mots.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Par défaut
    Bon et bien nous y voila, mon code ne retourne pas d'erreur mais il ne marche pas, je ne comprends guère pourquoi, alors je vais vous le donner en espérant que vous trouviez le probleme ...
    Le voici, apres toutes les modifications que mon cerveau a pu lui apporter ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    public class FichierVersFichier {
     
    	public static void main(String args[]){
    		BufferedReader br ;
    		BufferedWriter bw ;
    		String ligne;
    		int max_chars = 50;
     
    		File entree = new File("fichierEntree.txt");
    		File sortie = new File("fichierSortie.txt");
     
    			if(entree.exists())
    			{
    				try
    				{
    					br = new BufferedReader(new FileReader(entree));//preparation du fichier d'entrée - Sera variable plus tard -
    					bw = new BufferedWriter(new FileWriter(sortie));//preparation du fichier de sortie
     
    					while((ligne = br.readLine())!= null)
    					{		
    							if(ligne.length() < max_chars) //si ligne < max chars, on l'ecrit puis on saute une ligne
    							{
    								bw.write(ligne + "\n");
    							}
    							else //sinon on transforme la ligne en tableau de mots
    							{
    								String temp[] = ligne.split(" "); //on stock les mots dans le tableau TEMP[]
    								int i = 1;
    								int nbMots = ligne.split(" ").length;//nbMots est le nombre de mots de mon split
    								int sumChars = 0; //somme temporaire des caractères sur la ligne en cours d'écriture au moins égale au nombre de caractère du premier mot
     
    								if(temp[1].length() > max_chars) //CAS PARTICULIER : si le premier mot du tableau est superieur a max chars, on a pas le choix, on l'ecrit
    								{
    									bw.write(temp[1] + "\n");
    								}
    								else //sinon, on boucle tant que tout les mots de la ligne n'ont pas été placés
    								{
    									while(nbMots == 0)
    									{											
    										if(sumChars < max_chars) //si la longueur max chars n'est pas atteinte 
    										{
    											bw.write(temp[i] + " ");
    											sumChars = sumChars + temp[i].length() + 1; //la somme des caractères de la ligne en train d'etre ecrite
    											//le + 1 correspond a l'espace ... il compte pour un caractère !
    										}
    										else //si le mot (qui est forcement le deuxieme au moins, fait depasser la ligne de max chars, alors on saute la ligne directement puis on l'ecritdans une nouvelle ligne
    										{
    											bw.write("\n" + temp[i]);
    											sumChars = temp[i].length() + 1; //on réinitialise le compteur de caractère de la ligne
    										}
     
    										nbMots = nbMots - 1 ; //comme un mot a été placé, il y'en a un de moins a placer
    										i++; //j'incremente pour pouvoir changer de case du tableau split
    										//pas besoin de mettre de condition sur i, car il est lié avec le nbMots ... il y'aura autant d'incrémentation que de nombre de mots dans mon tableau temp[], normal ...
    									}
    								}
    							}
    					}
    					bw.flush();
    					bw.close();
    					br.close();
    					System.out.println("Opération terminée avec succès");
    				}
    				catch(IOException e)
    				{
    					System.err.println("Le fichier n'existe pas... Changez de source");
    				}
    			}
    	}
    }
    Encore un gros merci d'avance pour l'aide que vous allez m'apporter, et merci aussi pour les conseil précédents

  13. #13
    Membre Expert

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Par défaut
    • Fais attention que les indices de tableaux commencent à 0.
    • Attention de ne pas rajouter d'espace inutile en fin de ligne

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Par défaut
    Pour le 0, je l'ai modifié OK
    Mais pour l'espace en fin de ligne, ca c'est de l'optimisation, deja j'aimerais bien que mon programme fonctionne ...

    Quelqu'un pourrait il me corriger et me dire ce qui ne va pas (et ou ca ne va pas ...)

    Merci d'avance

  15. #15
    Membre émérite
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Par défaut
    Quel est le problème ?

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Par défaut
    cf post #12
    Mon programme ne me renvoie rien dans mon fichier sortie

  17. #17
    Membre émérite
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Par défaut
    Est-ce qu'il lit bien le fichier d'entrée ?


  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Par défaut
    le fichierEntreeexiste pas de probleme la dessus
    le fichierSortie egalement

    dans mon fichier entree j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    jespere que ca va marcher
    on prie, on prie, on prie
    Et hop on observe le resultat
    Ecrit tel quel

    Quand je mets J'obtiens ce qu'il ya dans mon fichierEntree ecrit pareil dans mon fichierSortie

    Quand je mets => plus rien dans mon fichierSortie.

    Donc je situerai le probleme plutot au niveau du code

    PS : désolé pour le retard de la reponse le serveur dev.com a planté apparement trop de monde lol

  19. #19
    Membre émérite
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Par défaut
    Donc le problème vient de la partie de code faisant le découpage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    else //sinon, on boucle tant que tout les mots de la ligne n'ont pas été placés
    {
    	while(nbMots == 0) <---- ??? on boucle tant que le nombre de mot est 0 ? c'est pas plutôt le contraire ?

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Par défaut
    Biensur que c'est le contraire ... merci, meme si y'a encore un bug, je regarde ca et je post si toujours pas reglé lol mercciiiii deja cette erreur de noob c'est nul lol

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Réponses: 10
    Dernier message: 06/11/2008, 15h45
  2. nombre caractere zone de texte
    Par tomtom02000 dans le forum IHM
    Réponses: 1
    Dernier message: 10/10/2007, 22h41
  3. [langage] Compter des chaines de caractères
    Par julfra dans le forum Langage
    Réponses: 2
    Dernier message: 26/05/2004, 18h42
  4. [langage] compter des caracteres dans une chaine
    Par louisis dans le forum Langage
    Réponses: 3
    Dernier message: 18/05/2004, 23h39
  5. Réponses: 2
    Dernier message: 02/03/2004, 20h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo