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

VB.NET Discussion :

Besoin d'aide pour une fonction de justification de texte


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 20
    Par défaut Besoin d'aide pour une fonction de justification de texte
    Bonjour.

    Je recherche votre aide pour réaliser une fonction de justification de texte.
    Je développe des rapports Reporting services mais la fonction de justification n'existe pas et je me vois dans l'obligation d'en réaliser une sous VB (langage que je ne connais pas du tout mais ... pas du tout ^^)

    Je regarde à droite à gauche un peu partout sur le web mais l'aide est souvent peu exploitable ou très peu expliqué.

    Donc mon objectif est de réaliser une fonction qui prendrait 2 paramettres : la chaine à traiter et le nombre de caractere par ligne souhaité.
    La derniere ligne n'est pas justifié

    Voici ce que j'ai déjà reussis à faire :

    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
    Public Function Justify(ByVal chaine As String, ByVal nbCaractereParLigne As Integer) As String
     
        'Calcul du nombre de ligne réalisable avec la chaine non formatée.   
        Dim nombreLigne = Len(chaine )/nbCaractereParLigne  
     
        'Boucle basée sur le nombre ligne
        Dim compteur As Integer
        For compteur = 1 to nombreLigne-1 step 1 'On ne justifie pas la dernière ligne
     
            'Si le caractere positionné à "nbCaractereParLigne"*"compteur" n'est pas un espace
    			'Si le caractere suivant n'est pas un espace
    				'Regarder ou est le dernier caractere du dernier mot entier de la ligne
    				'Calculer le nombre de caractere entre les deux pour donner le nombre d'espace à rajouter
    				'Calculer le nombre d'espace total entre le début de phrase et le dernier caractere du dernier mot entier
    				'Si le nombre d'espace à rajouter est supérieur au nombre d'espace dans la phrase 
    					'Calculer le modulo pour savoir le nombre d'espace à rajouter en plus
    					'Parcourir la ligne tant qu'il reste des espace normaux et des espace de modulo à rajouter
    						'Si le caractere actuel est un espace
    							'Rajouter un espace
    							'Décrementer le nombre d'espace à rajouter
    							'Mettre le parcours de chaine à +1
    							'Si il reste des espaces modulo à rajouter
    								'Rajouter un espace
    								'Décrementer le nombre d'espace modulo à rajouter
    								'Mettre le parcours de chaine à +1
    							'Fin si
    						'Fin si 
    						'Mettre le parcours de chaine à +1
    					'Fin parcourir
    				'Fin si
    			'Sinon si le caractere suivant est un espace
    				'Ne rien faire (la ligne est déjà justifiée naturelement)
    			'Fin si
     
    		'Si le caractere positionné à "nbCaractereParLigne"*"compteur" est un espace
    			'Parcourir la ligne tant qu'on est pas sur un espace
    				'Rajouter un espace 
    				'Fin parcourir
    			'Fin parcourir
    		'Fin si
     
     
        Next
     
     
    	Return 
    End Function
    J'ai réaliser tout l'algorythme mais je peche pour trouver de la documentation sur les fonctions liées aux chaines de caractères.

    Si vous avez des sites à me conseiller ou je pourrais trouver la documentation adéquate je suis preneur comme tout code de justification qui me permettrait de comprendre un peu mieu le VB.

    Merci à l'avance.

  2. #2
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    Effectivement c'est a toi de faire tout sa

    je peut t'aider à le faire,
    mais perso j'ais trop la flemme de tout faire a ta place surtout que je suis pas expert en Texte

    je comprend pas très bien les test que tu doit faire,
    pourquoi tu doit toujours chercher les espaces?


    tu peut avoir la longueur d'un String comme ceci aussi



    dit moi ce que tu a besoin et je t'aiderais

  3. #3
    Membre averti
    Homme Profil pro
    Technicien Qualité Logiciel
    Inscrit en
    Janvier 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Qualité Logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 44
    Par défaut
    Salut!

    Je pense que ça pourrais te servir pour être plus à l'aise avec les chaines de caractères.

    Après si tu veux plus de détail, n'hésite pas à nous expliquer le soucis

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 20
    Par défaut
    Merci de votre aide.

    Mais effectivement je ne veux pas qu'on la réalise pour moi (même si cette solution est facile), je veux la réaliser de mes propres mains.

    Je vais regarder tout ca

    je comprend pas très bien les test que tu doit faire,
    pourquoi tu doit toujours chercher les espaces?
    Car je rajoute les espaces de justification aux espaces déjà existant :
    - : Fin de ligne souhaité
    aaa aaaa aaaaa aa aaa-aaaaa
    me donne
    aaa aaaa aaaaa aa
    aaaaa

  5. #5
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    Utilise la Fonction Split alors

    tu va avoir ceci a la fin


    en gros tu rentre ton texte par ligne et tu peut l'exploser dans un tableau de string
    *tableau flexible, qui s'auto dimensionne*

    tu récupére aprés comme tu veut ton texte dans Test(0) ou Test(1) dans l'exemple

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 20
    Par défaut
    Effectivement je suis parti sur cette optique

    Avec les liens donnés (et au passage super utiles) j'ai repensé ma manière de faire

    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
    Function ScinderChaine( Chaine As String , NbCar As Integer ) As Integer
       Dim Tableau() As String
       Dim TableauDeLigne() As String
       Dim i As Integer
       Dim i2 As Integer
       Dim nbm As Integer
     
       'Coupe la chaine par espace
       Tableau = Split(chaine, " ")
       nbm  = Ubound(Tableau) - LBound(Tableau) + 1
       i2 = 0
     
       'Pour chaque colonne du tableau
       For i = LBound(Tableau) To UBound(Tableau)
          'Si la longeur de la ligne en cours + le mot étudié est inférieur au nombre de caractère
           If(Len(TableauDeLigne(i2))+ Len(Tableau(i))+1 < NbCar) Then
    	      TableauDeLigne(i2) = TableauDeLigne(i2) + " " + Tableau(i)
           Else
          End If
       Next i
     
       return nbm 
    End Function
    Faut pas s'inquiéter si le traitement n'a aucun rapport avec le retour de la fonction, c'est juste que je teste la bonne compilation du code sous reporting services


    Bon j'ai un petit probleme pour calculer la longueur de la chaine contenue dans une case de mon tableau, y'aurait-il une autre façon de proceder ?

  7. #7
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    tu a un problème d'accord mais lequel?
    Len() te retourne bien la longueur du tableau non ?

Discussions similaires

  1. Réponses: 6
    Dernier message: 02/06/2015, 09h42
  2. [FPDF] Besoin d'aide pour une fonction publipostage..;
    Par dark$hadow dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 10/02/2007, 15h39
  3. Besoin d'aide pour une Requête SQL ...
    Par Kokito dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/07/2004, 11h56
  4. besoin d'aide pour une requête
    Par Damien69 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 31/03/2004, 15h38

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