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. #21
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    oula bizard, pour max_Chars = 26 , fichierSortie = fichierEntree identique

    mais pour max_chars = 25 j'obtient une seule ligne dans fichierSOrtie contenant mes trois ligne de fichierEntree

    pkoi ??

    (j'ai choisi de tester avec 25 car c'est le nb de carac de ma premiere ligne)

  2. #22
    Membre éprouvé
    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
    Points : 935
    Points
    935
    Par défaut
    il doit manquer un retour à la ligne

    peut-être après le while quand il a finir de découper la phrase

    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
    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]);  //<!- retour à la ligne que pour le découpage
    		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 ...
     }
    //a la fin de la phrase un retour à la ligne ??
    bw.write("\n");

  3. #23
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    et bien ca me change le resultats, j'obtiens les 3 meme lignes qu'avec fichierEntree dans fichierSortie pour max_chars = 25 mais le probleme, est que je devrais avoir 4 ligne car la derniere ligne comporte plus de 25 chars, donc resultats devrait etre seul sur la ligne 4 ...

    une idée du probleme ?
    Merci pour les rectifications precedentes en tout cas

  4. #24
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    resultats pour max_chars = 25
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    jespere que ca va marcher 
    on prie, on prie, on prie 
    Et hop on observe le resultat
    resultat pour max_chars = 15

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    jespere que ca 
    va marcher 
    on prie, on prie, 
    on prie 
    Et hop on observe 
    le resultat
    je comprends pas :S

  5. #25
    Membre éprouvé
    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
    Points : 935
    Points
    935
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    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 !
    }
    C'est dommage de controler la taille avant d'ajouter le mot

  6. #26
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    je ne comprends pas ce que tu veux dire ... :S

  7. #27
    Membre chevronné

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    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
    Points : 1 954
    Points
    1 954
    Par défaut
    Peux-tu poster le code complet de la fonction de formatage ?

  8. #28
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    Avec plaisir, j'ai d'ailleur modifié l'incrementation de sumchars je l'ai sorti du if comme voulais surement me dire fnobb

    Mais encore bug (un peu moins mais bug quand meme )

    J'ai aussi viré le nbMots completement naze de ma part j'utilise que i ca suffit

    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
    public class FichierVersFichier {
     
    	public static void main(String args[]){
    		BufferedReader br ;
    		BufferedWriter bw ;
    		String ligne;
    		int max_chars = 16;
     
    		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 = 0;
    								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(i!=temp.length)
    									{	
    										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 !
     
    										if(sumChars < max_chars) //si la longueur max chars n'est pas atteinte 
    										{
    											bw.write(temp[i] + " ");
    										}
    										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
    										}
     
    										i++; //j'incremente pour pouvoir changer de case du tableau split
    									}
    									bw.write("\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");
    				}
    			}
    	}
    }

  9. #29
    Membre éprouvé
    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
    Points : 935
    Points
    935
    Par défaut
    Bon je m'explique
    le principe est de vérifier que si on ajoute le mot alors la ligne ne dépassera pas la taille et non de vérifier que la ligne est moins longue que le maximum avant d'ajouter le mot

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if(sumChars + temp[i].length() + 1 < max_chars) //si la longueur max chars n'est pas atteinte avec le mot que l'on va ajouter
    {
    	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 !
    }

  10. #30
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    J'oubliais, fichierEntree.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    jespere que ca va marcher
    on prie, on prie, on prie
    Et hop on observe le resultat
    fichierSortie.txt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vide avant execution du programme

  11. #31
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    ta modification reviens au meme que la mienne on s'etait donc compris, mais elle ne change donc pas le resultat snif on y est presque j'en suis sur, et merci de ta (votre) persévérance !

  12. #32
    Membre éprouvé
    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
    Points : 935
    Points
    935
    Par défaut
    Le dernier problème vient du fait que la ligne "jespere que ca va marcher" fait 25 caractères mais "jespere que ca va marcher " fait 26 caractères

  13. #33
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    hum, bin en reflechissant, je me suis dit que si je mets max_chars = 1, je ne devrais plus qu'avoir un mot par ligne dans mon fichierSortie (car il met au moins un mot par ligne et qu'il ne doit pas les couper donc il en mets au moins un, et apres l'avoir mis, la taille de la ligne etant forcement superieure a 1, alors on passe a la ligne suivante ...etc ), or ce n'est pas le cas, avec max_chars = 1

    avec 4 lignes en tout dans fichierSortie

  14. #34
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    oui sauf que (pour repondre au post #32) la derniere ligne elle, fait plus de 25 caracteres et resultats devrait donc etre sur une ligne suivante ...

  15. #35
    Membre chevronné

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    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
    Points : 1 954
    Points
    1 954
    Par défaut
    Pas mal d'erreurs dans ton code (mauvaise gestion des espaces entre autre).
    Je te propose cette version.

    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
     
    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
    						// on stock les mots dans le tableau TEMP[]
    						String temp[] = ligne.split(" ");
     
    						// somme temporaire des caractères sur la ligne en cours
    						// d'écriture au moins égale au nombre de caractère du
    						// premier mot
    						int sumChars = 0;
     
    						for (int i = 0; i < temp.length; ++i) {
    							if (temp[i].length() + sumChars + 1 > max_chars) {
    								if (i != 0) {
    									// Dépassement de ligne on écrit sur la
    									// suivante
    									bw.write("\n");
    								}
    								// même si le mot dépasse le max dans sa
    								// longueur
    								bw.write(temp[i]);
    								sumChars = temp[i].length();
     
    							} else {
    								if (sumChars != 0) {
    									// Espace inter-mot
    									bw.write(" ");
    								}
    								bw.write(temp[i]);
    								sumChars += temp[i].length();
    							}
    						}
    						bw.write("\n");
     
    					}
    				}

  16. #36
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    j'ai l'impression que ton code ne compte pas les espaces ... du coup je me retrouve avec des lignes de plus de 25 caracteres par exemple

    Mais sinon, tu as quasiment fais ce que je voulais, donc merci, je regarde pour la gestion des espaces et je posts si je l'ai résolu, merci a toi

  17. #37
    Membre chevronné

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    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
    Points : 1 954
    Points
    1 954
    Par défaut
    Yep manque le +1 dans le sumChars... si on ajoute un espace...

  18. #38
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    hum encore un autre probleme, on doit enlever le br.write("\n") en sorti de while il ne sert pas, pire, il fait sauter une ligne apres chaque dernier mots des temp[] meme si la ligne n'atteint pas les max_chars

    Une fois enlevé. J'observe que tu as oublié de gerer l'espace qu'il doit y avoir entre "prie" et "Et" par exemple ou encore entre "marcher" et "on" si on a pas sauter de ligne en la fin d'un temp() et le début d'une nouvelle ligne de fichierEntree.

    Ce a quoi je n'ai pas remedié

    et a part cela, un autre probleme (cf ligne 3 plus de 12 chars)

    Avec max_chars = 12

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    jespere que
    ca va
    marcheron prie, on
    prie, on
    prieEt hop on
    observe le
    resultat
    comment cela est possible ?

  19. #39
    Membre chevronné

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    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
    Points : 1 954
    Points
    1 954
    Par défaut
    Citation Envoyé par Archange21 Voir le message
    hum encore un autre probleme, on doit enlever le br.write("\n") en sorti de while il ne sert pas, pire, il fait sauter une ligne apres chaque dernier mots des temp[] meme si la ligne n'atteint pas les max_chars
    Mmm, chez moi ca fonctionne...

  20. #40
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    Ok je vais manger la mais peux tu m'envoyer en MP ta classe ? peut etre qu'on a une difference quelque part, et puis regarde pour max_chars = 12 et 24 ...

    A tout a l'heure

    Sinon post ici ta classe stp

    merci a toi

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

Discussions similaires

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

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