Traitement d'une chaine de très grand nombre de caractères

Remy Morel

XLDnaute Nouveau
Bonjour à tous,
Tout d'abord je découvre votre site web et c'est un bonheur...

Ensuite voilà ma question :
Un tableau est généré par une machine. Ce tableau comporte plusieurs chaine de caractères. Celle qui m'intéresse se présente sous la forme suivante :
Rémy~221 1 25~221 2 62~230 2 0~230 3 0 0 0~230 4 0~230 5 0~231 2 0~231 3 0 0 0~246 8 0~246 9 0~246 10 0~255 1 17~256 1 1 2 201 202 203 204 205 206 207 208 300 301 420 421 422 500 501~257 1 0 2 305 295 341

Chaque groupe de caractère se présentant sous la forme "~..." indique un nouveau type d'information.

Je dois dans un premier temps traité le groupe ~256 qui correspond à légende du tableau. Ainsi chaque groupe de caractères séparé par espace (chiffre ou nombre) correspond à une légende codifié. Ex: 301 = longueur en m

Ensuite le groupe ~257 qui correspond aux valeurs de chaque légende du groupe précédent. Ainsi on forme un tableau.

Comme il est visible en pièce jointe, grâce aux formules de traitement de données textes je suis parvenu à traiter la légende et les données suivantes dans le cas d'un tableau ne contenant que peu de données. Donc une chaine de caractère de quelques centaines de caractères.

Mon souci est que le nombre de caractère de cette chaine peut s'élever à plusieurs milliers et que Excel ne permet pas de traiter ce type d'informations.

Est-il possible de contourner cette limitation du logiciel ? Existe t-il d'autres logiciels permettant de traiter les chaines de caractères au format texte ?

Je vous remercie par avance pour vos réponses
N'hésité pas à me poser des questions car je pense que l'énoncé peut paraitre flou.
Bonne journée...
 

Pièces jointes

  • Tableau de cube - Exemple.xlsx
    57.8 KB · Affichages: 58

Remy Morel

XLDnaute Nouveau
Re : Traitement d'une chaine de très grand nombre de caractères

Bonjour Dranreb.
Tout d'abord merci pour ta réponse.
Je me débrouille avec les formules, mais je n'ai que peu de notion en VBA. Comment puis-je ouvrir mon fichier avec VBA ?
Merci encore...
 

Dranreb

XLDnaute Barbatruc
Re : Traitement d'une chaine de très grand nombre de caractères

Ouvrir l'éditeur (Alt+F11), voir dans l'aide les instructions (et non les méthodes) Open, Line Input, Close.
La fonction Split vous sera sans doute aussi utile.
À +
 

Remy Morel

XLDnaute Nouveau
Re : Traitement d'une chaine de très grand nombre de caractères

Bonjour Dranreb,
J'ai commencer à écrire un p'tit peu de code pour ouvrir le fichier, voici ce que cela donne :
Code:
Sub Ouverture_du_fichier()
    Dim textline As String
    Dim fd As FileDialog
    Set fd = Application.FileDialog(msoFileDialogFilePicker)
    Dim vrtSelectedItem As Variant

    With fd
        If .Show = -1 Then
        For Each vrtSelectedItem In .SelectedItems
                        
        Open vrtSelectedItem For Append As 1
        Line Input #1, textline
                
        Next vrtSelectedItem
        
        Else
        End If
    End With
   
    Set fd = Nothing
    
End Sub

Ensuite pour la suite, vous m'aviez conseillé la fonction Split. Cependant je ne comprend pas comment l'utiliser.
Pouvez-vous, s'il vous plait, m'aiguiller sur des fonctions à utiliser pour extraire de la ligne la chaine de caractère commençant par ~256.
Pus ensuite la scinder par groupe de 18 sous chaine de caractères séparées par un espace. Comme je l'avais fait dans mon fichier d'exemple avec le décalage ?


Merci par avance.
Cordialement
 

Dranreb

XLDnaute Barbatruc
Re : Traitement d'une chaine de très grand nombre de caractères

Bonjour.
Déclarer: T() As String
T = Split(textline, "~") représenterait un tableau de String, commençant à l'indice 0, de tout les morceaux commançant par "~",
ce qui éviterait d'avoir à s’embarrasser des positions des caractères pour les trouver.
Pour répondre à la question
Split(Split(textline, "~255 ")(1), "~")(0) devrait extraire tout ce qui est compris entre "~255 " et un "~" qui le suivrait.
Le Split interne rend un tableau de 0 à 1 dont le 1 est la partie de droite, et l'autre la partie à gauche du 1er "~" qui s'y trouverait.
Espérant avoir répondu, au moins sur le principe général.
Cordialement.
 

Remy Morel

XLDnaute Nouveau
Re : Traitement d'une chaine de très grand nombre de caractères

Je vous remercie une nouvelle fois pour cette réponse.
La fonction split me parait déjà plus clair. Ce qui va me permettre d'essayer cela.

Que pensé vous du code pour la boite de dialogue et l'ouverture ? Car mon peu d'expérience ne me permet pas de juger son bon fonctionnement. En tous il s’exécute et se compile sans erreur.

Merci.
Bon après midi.
 

Dranreb

XLDnaute Barbatruc
Re : Traitement d'une chaine de très grand nombre de caractères

Personnellement j'utilise Application.GetOpenFilename pour des cas similaires et ne connais donc pas celui là, qui semble assez voisin. L'essentiel c'est qu'il vous donne satisfaction aux essais.
À +
 

Remy Morel

XLDnaute Nouveau
Re : Traitement d'une chaine de très grand nombre de caractères

Je viens de faire ceci :

Code:
Sub Ouverture_du_fichier()
    Dim textline As String
    Dim fd As FileDialog
    Set fd = Application.FileDialog(msoFileDialogFilePicker)
    Dim vrtSelectedItem As Variant
    Dim T() As String
    T = Split(textline, "~")

    With fd
        If .Show = -1 Then
        For Each vrtSelectedItem In .SelectedItems
                       
        Open vrtSelectedItem For Append As 1
        Line Input #1, textline
               
        Split(Split(textline, "~255 ")(1), "~")(0)
        
        Next vrtSelectedItem
       
        Else
        End If
    End With
   
    Set fd = Nothing
   
End Sub

Mais j'ai une erreur de syntaxe sur : Split(Split(textline, "~255 ")(1), "~")(0)

Mais je ne parviens pas à trouver...

Merci par avance.
 

Dranreb

XLDnaute Barbatruc
Re : Traitement d'une chaine de très grand nombre de caractères

C'est une expression. Elle ne saurait constituer une instruction: il faut en faire quelque chose. L'affecter à un String par exemple.
Par ailleurs si vous ne vous servez pas du tableau T dans la suite pourquoi l'avez vous déclaré et initialisé ?
Êtes vous sur que votre "~255" est dans chaque enregistrement ?
À +
 

Discussions similaires

Statistiques des forums

Discussions
312 361
Messages
2 087 633
Membres
103 617
dernier inscrit
cisco1