Les Snippets

Connexion

Split selon le nombre max de caractères voulu, en tenant compte des retours chariot et des chaînes non-sécables

Niveau requis pour utiliser/comprendre cette source : 1 ( Débutant )
Créé le 02/09/2007 14:23:36 et initié par PCPT [Liste]
Date de mise à jour : 02/09/2007 22:32:41
Vue : 7863
Catégorie(s) : Chaîne de caractères
Langages dispo pour ce code :
- VB6, VBA
- VB 2005, VB 2008, VB.NET 1.x
- C# 1.x, C# 2.x, C# 3.x



Langage : VB6 , VBA
Date ajout : 02/09/2007
Posté par PCPT [Liste]
DateMAJ : 02/09/2007
Private Function SplitNumberChars(ByVal sStr As String, ByVal iCut  As Long, Optional RemoveVbCrLf As Boolean = False, Optional SeparChar As String = "-"Optional bUseMnemonic As Boolean False) As  String()
    Dim sRet As String, i As Long, lPos As Long, bCR As Boolean, sLine As String
'   vire les VBCRLF et  les ESPACE multiples générés
    If RemoveVbCrLf Then
        sStr = Trim$(Replace(sStr, vbCrLf, " "))
        Do While InStr(1, sStr, "  ") <> 0
            sStr = Replace(sStr, "  ", " ")
        Loop
    Else
        sStr = Replace(sStr, vbCrLf, " " & vbCrLf)
    End If
'   traitement
    sRet = vbNullString
    Do While LenB(sStr) > 0
'       retour chariot le plus loin
        lPos = InStrRev(Left$(sStr, iCut + 2), vbCrLf)
        If lPos = Then
'           y'en a pas? on  cherche l'espace le plus loin
            lPos = InStrRev(Left$(sStr, iCut + 1), " ")
            bCR = False
        Else
            bCR = True
        End If

        If lPos = Then
'           lpos toujours à zéro? donc ligne  non-sécable
            If Len(sStr) > iCut Then
                If RemoveVbCrLf Then
                    sRet = sRet & Left$(sStr, iCut - 1) & SeparChar & vbCrLf
                    sStr = SeparChar & Mid$(sStr, iCut)
                Else
                    sRet = sRet & Left$(sStr, iCut) & SeparChar &  vbCrLf
                    sStr = SeparChar & Mid$(sStr, iCut + 1)
                End If
            Else
                sRet = sRet & sStr & vbCrLf
                sStr = vbNullString
            End If
        Else
            sLine = Left$(sStr, lPos - 1)
            sStr = Right$(sStr, Len(sStr) - Len(sLine) - IIf(bCR, 2, 1))
            sRet = sRet & sLine & vbCrLf
        End If
   Loop
'   pas de  UseMnemonic?....
    If Not bUseMnemonic Then sRet = Replace(sRet, "&""&&")

'   retour
    SplitNumberChars = Split(sRet, vbCrLf)
End Function

Remarque :
permet par exemple de faire un retour à la ligne dès l'espace se situant avant le 40ème caractère, tout en concervant les retours chariot (ou non, en option), et de couper les chaînes au 39ème caractère si le mot complet ne contient pas d'espace (un lien par exemple)

finalité : texte semi-justifié, tenant compte d'une "pré" mise en page
Langage : VB.NET 1.x , VB 2005 , VB 2008
Date ajout : 10/12/2008
Posté par Charles Racaud [Liste]
Private Function SplitAfter(ByVal Value As StringByVal SplitCount As IntegerAs String
  Return SplitAfter(Value, SplitCount, "-"cFalse)
End Function
Private Function SplitAfter(ByVal Value As StringByVal SplitCount As IntegerByVal SeparChar As CharAs String
  Return SplitAfter(Value, SplitCount, SeparChar, False)
End Function
Private Function SplitAfter(ByVal Value As StringByVal SplitCount As IntegerByVal RemoveBreak As BooleanAs String
  Return SplitAfter(Value, SplitCount, "-"c, RemoveBreak)
End Function
Private Function SplitAfter(ByVal Value As StringByVal SplitCount As IntegerByVal SeparChar As CharByVal RemoveBreak As BooleanAs String
  Dim ResultString As String = String.Empty
  If RemoveBreak Then Value = Value.Replace(CChar(System.Environment.NewLine), " "c)
  Dim Lines() As String = Value.Split(CChar(System.Environment.NewLine))
  For iLine As Integer = 0 To Lines.Length - 1
    Do While Lines(iLine).Length > SplitCount
      Dim Pos As Integer = Lines(iLine).LastIndexOf(" "c, SplitCount)
      Select Case Pos
        Case Is = -1
          If Not SeparChar = Nothing Then
            ResultString &= Lines(iLine).Substring(0, SplitCount - 1& SeparChar & System.Environment.NewLine
            Lines(iLine) = Lines(iLine).Substring(SplitCount)
          Else
            Dim Pos2 As Integer = Lines(iLine).IndexOf(" "c, SplitCount)
            Select Case Pos2
              Case Is = -1
                ResultString &= Lines(iLine)
                Lines(iLine) = String.Empty
              Case Else
                ResultString &= Lines(iLine).Substring(0, Pos2) & System.Environment.NewLine
                Lines(iLine) = Lines(iLine).Substring(Pos2 + 1)
            End Select
          End If
        Case Else
          ResultString &= Lines(iLine).Substring(0, Pos) & System.Environment.NewLine
          Lines(iLine) = Lines(iLine).Substring(Pos + 1)
      End Select
    Loop
    ResultString &= Lines(iLine)
    If iLine < Lines.Length - 1 Then ResultString &= System.Environment.NewLine
  Next iLine
  Return ResultString
End Function
Langage : C# 1.x , C# 2.x , C# 3.x
Date ajout : 10/12/2008
Posté par Charles Racaud [Liste]
private static string SplitAfter(string Value, int SplitCount) {
  return SplitAfter(Value, SplitCount, '-', false);
}
private static string SplitAfter(string Value, int SplitCount, char SeparChar) {
  return SplitAfter(Value, SplitCount, SeparChar, false);
}
private static string SplitAfter(string Value, int SplitCount, bool RemoveBreak) {
  return SplitAfter(Value, SplitCount, '-', RemoveBreak);
}
private static string SplitAfter(string Value, int SplitCount, char SeparChar, bool RemoveBreak) {
  string ResultString = string.Empty;
  if (RemoveBreak) 
    Value = Value.Replace('\n', ' ');
  string[] Lines = Value.Split('\n');
  for (int iLine = 0; iLine < Lines.Length; iLine++) {
    while (Lines[iLine].Length > SplitCount) {
      int Pos = Lines[iLine].LastIndexOf(' ', SplitCount);
      switch (Pos) {
        case -1:
          if (SeparChar != '\0') {
            ResultString += Lines[iLine].Substring(0, SplitCount - 1) + SeparChar + '\n';
            Lines[iLine] = Lines[iLine].Substring(SplitCount);
          }
          else {
            int Pos2 = Lines[iLine].IndexOf(' ', SplitCount);
            switch (Pos2) {
              case -1:
                ResultString += Lines[iLine];
                Lines[iLine] = String.Empty;
                break;
              default:
                ResultString += Lines[iLine].Substring(0, Pos2) + '\n';
                Lines[iLine] = Lines[iLine].Substring(Pos2 + 1);
                break;
            }
          }
          break;
        default:
          ResultString += Lines[iLine].Substring(0, Pos) + '\n';
          Lines[iLine] = Lines[iLine].Substring(Pos + 1);
          break;
      }
    }
    ResultString += Lines[iLine];
    if (iLine < Lines.Length - 1)
      ResultString += '\n';
  }
  return ResultString;
}

Snippets en rapport avec : Taille, Split, Caractères, Nombre, Couper



Codes sources en rapport avec : Taille, Split, Caractères, Nombre, Couper

{PHP} CONTOURNER LA LIMITE DE TAILLE DES FICHIERS IMPOSÉE PAR CERTAINS HÉBERGEURS
Vous remarquerez sans doute que de nos jours bon nombre d'hébergeur (grauits surtout) interdisent le...

{JAVA / J2EE} CLASSE UTILE POUR LES FICHIERS
Toujours utile d'avoir une classe comme ca sous la main. J'ai je crois bien expliqué le code... je ...

{SQL} NB LIGNES PAR TABLE
Ce code m'avait servi il y a un an pour "mesurer" une base de données en renvoyant pour chaque table...

{Visual Basic, VB6, VB.NET, VB 2005} CHIFFRE EN LETTRE FONCTION
Une petite fonction simlpe pour transformer un chiffre en lettre. Exemple: "15193" >> dix ...

{Visual Basic, VB6, VB.NET, VB 2005} COUPER-RECOLLER DES FICHIERS
Bon ben vola un vieux source que j'me decide enfin a mettre sur le site... Le programme coupe un fi...

{Visual Basic, VB6, VB.NET, VB 2005} SPLITEUR DE FICHIER
Un petit programme simple qui permet de découper un fichier en morceaux (de taille choisie) puis de ...

{Visual Basic, VB6, VB.NET, VB 2005} NOMBRE EN LETTRES
Plusieurs démo du même style sont disponibles mais d’après ce que je constate sont toutes, soit...

{Visual Basic, VB6, VB.NET, VB 2005} POKER - CALCUL DE PROBABILITES POUR VOS MAINS EN VB.NET
Bonjour, Comme je l'avais un peu écrit sur le forum, je ferais une calculatrice !! Chouette encor...

{PHP} IMC (OU BMI EN ANGLAIS) ET CALCULE DE VOTRE POID IDÉAL
ce calcul très simple, il est fait à partir de deux formules : * IMC : Poid(en Kg) / Taille(en cm) ...

{Visual Basic, VB6, VB.NET, VB 2005} CODAGE ET DÉCODAGE DE NOMBRE OU DE CHIFFRE
cet source permet au débutant de comprendre la cryptographie, c'est à dire de rendre un code incompr...