begin process at 2013 05 22 20:43:58
  Trouver un code source :
 
dans
 
Accueil > Forum > 

VB.NET et VB 2005

 > 

Divers

 > 

General

 > 

SPLIT mots en plusieurs parties encadrés par des doubles quotes


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

SPLIT mots en plusieurs parties encadrés par des doubles quotes

vendredi 17 août 2012 à 20:40:46 | SPLIT mots en plusieurs parties encadrés par des doubles quotes

PeD

Bonsoir,

Pas beaucoup d'espoir d'avoir une solution ( fonction - bout de code ) toute faite, mais sait on jamais; un petit malin ....


Je n'ai pas de problème pour isoler chaque mot dans un tableau avec split quand la chaine de caractère est celle ci :

01 PARIS FRANCE EUROPE
02 BRUXELLES BELGIQUE EUROPE


mais quand une ligne contient ceci
03 "BUENOS AIRES" ARGENTINE "AMERIQUE DU SUD"

idéalement le mot(1) est 03, le mot(2) "BUENOS AIRES", le mot(3) ARGENTINE et le
mot(4) "AMERIQUE DU SUD"
ce que ne retourne évidemment pas la fonction SPLIT

Ce genre de données est généré par exemple par des exports de MYSQL.

Ai je un autre moyen ( fonction ) pour arriver à mettre dans mon tableau ces mots logiques? ou dois je travailler en test caractère par caractère, ce qui se fera, je le crains fort,
au détriment de la performance.

Qu'en pensez vous?

Merci Pierre

Pierre
vendredi 17 août 2012 à 21:27:52 | Re : SPLIT mots en plusieurs parties encadrés par des doubles quotes

ucfoutu

Membre Club
Bonjour,
la question qui me vient d'emblée et naturellement à l'esprit est celle-ci :
Par quel code ce tableau a-t-il été rempli (et à partir de quoi) ?


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
vendredi 17 août 2012 à 21:41:57 | Re : SPLIT mots en plusieurs parties encadrés par des doubles quotes

PeD


Le fichier reçu résulte de "export record set to an external file" du résultat d'une query dans le MySQL Workbench.
En clair, les rows de "Select * FROM CITY".

Note : mais je ne suis pas sûr que j'ai répondu à la question, car je récupère un fichier .txt avec des lignes et non un réel tableau.
C'est le code après le SPLIT qui met en tableau dans mon application.
Du genre
Code Visual Basic :
MotCnt = SPLIT(zone," ")
For i = 0 to MoCnt
mot(i) = ....
next


Ai je répondu?


Pierre
vendredi 17 août 2012 à 21:55:37 | Re : SPLIT mots en plusieurs parties encadrés par des doubles quotes

ucfoutu

Membre Club

car je récupère un fichier .txt avec des lignes et non un réel tableau


Reviens lorsque tu sauras exposer avec clarté et précision (tous les tenants et aboutissants). Entre ton premier message et le second, il y a un fossé que je regrette.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
vendredi 17 août 2012 à 23:54:47 | Re : SPLIT mots en plusieurs parties encadrés par des doubles quotes

PeD


Ouais bon. Je simplifie.
Cela me paraissait clair, mais bon, j'accepte.

On oublie MySQl.
J'ai un fichier .txt qui contient les lignes
01 PARIS FRANCE EUROPE
02 BRUXELLES BELGIQUE EUROPE
03 "BUENOS AIRES" ARGENTINE "AMERIQUE DU SUD"

Je veux mettre en tableau les mots de chaque ligne, puis traiter ( ce traitement est ici hors de propos ).

Donc à chaque lecture de ligne, je mets en tableau les mots avec SPLIT.
Pour ligne 1 , j'aurai mot(1) = 01,
mot(2) = PARIS, mot(3) = FRANCE, mot(4) = EUROPE.

Mais pour la ligne 03, je voudrais que "BUENOS AIRES" soit mis dans mot(2), or avec SPLIT cela ne sera pas le cas. Il mettra dans mot(2) = "BUENOS et dans mot(3) = AIRES", dans mot(4) = ARGENTINE.

Or je veux que les mots de même rang contiennent le même type d'info : mot(1) = sequence , mot(2) la ville, mot(3) le pays, mot(4) le continent.


Je me relis : je trouvais que j'avais mieux expliqué avant. Snif.

Pardon, donc.

Pierre


Pierre
vendredi 17 août 2012 à 23:59:05 | Re : SPLIT mots en plusieurs parties encadrés par des doubles quotes

titicar

Il existe sans doute plusieurs moyens. Un simple serait de remplacer tes séparateurs (un espace) par au autre caractère tant qu'ils ne se trouvent pas entre des guillemets, mais ça implique l'appel d'une fonction à écrire.

titicar
samedi 18 août 2012 à 00:01:38 | Re : SPLIT mots en plusieurs parties encadrés par des doubles quotes

jack

Administrateur CodeS-SourceS
Salut

Split n'a jamais renvoyé de chiffre, mais un tableau de chaines.
Ton code n'est pas correct.

Ton petit problème m'a titillé, et j'aime ça.
Voilà donc le fruit de mon travail.
Code Visual Basic :
    Dim Data1       As String
    Dim Data2       As String
    Dim aMots()     As String
    Dim aMots2()    As String
    Dim bInWord     As Boolean
    Dim sTemp       As String
    Dim lIndex      As Long
    Dim r           As Long
    Dim t           As Long
    
    Data1 = "01 PARIS FRANCE EUROPE"
    Data2 = "03 ""BUENOS AIRES"" ARGENTINE ""AMERIQUE DU SUD"""
    
    aMots = Split(Data1, " ")   ' Ici, change Data1 / Data2
    ' Visu avant
    For r = 0 To UBound(aMots)
        Debug.Print r, aMots(r)
    Next r
    Debug.Print "--------------------------------------------------------"

    ReDim aMots2(0 To UBound(aMots))
    lIndex = -1
    sTemp = ""
    If UBound(aMots) > 4 Then
        bInWord = False
        For r = 0 To UBound(aMots)
            If Left$(aMots(r), 1) = """" Then

                ' Si la chaine commence par "
                sTemp = Mid$(aMots(r), 2)
                bInWord = True
            ElseIf Right$(aMots(r), 1) = """" Then

                ' Si la chaine se termine par "
                sTemp = sTemp & " " & Left$(aMots(r), Len(aMots(r)) - 1)
                bInWord = False
            Else
                If bInWord Then
                    ' Si on est dans un "mot"
                    sTemp = sTemp & " " & aMots(r)
                Else
                    sTemp = aMots(r)
                End If
            End If
            ' Mémo or not mémo
            If bInWord Then
                ' Si on est dans un "mot"
                ' On ne fait rien, on attend la fin du "mot"
            Else
                ' " non trouvé ou fin de zone ou mot normal
                lIndex = lIndex + 1
                aMots2(lIndex) = sTemp
                sTemp = ""
            End If
        Next r
        ' Redimensionne le tableau 2 qui doit être plus petit, maintenant
        ReDim Preserve aMots2(0 To lIndex)
    Else
        ' Ligne normale sans "
        aMots2 = aMots
    End If
    ' Visu après
    For r = 0 To UBound(aMots2)
        Debug.Print r, aMots2(r)
    Next r
    Debug.Print "--------------------------------------------------------"

En ce moment, je ne programme plus beaucoup et ça m'a fait plaisir de replonger dedans.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
samedi 18 août 2012 à 00:28:18 | Re : SPLIT mots en plusieurs parties encadrés par des doubles quotes

PeD


Merci.

A titicar : j'ai pensé à cela aussi, mais j'ai peur de la performance. Je pourrais avoir un fichier avec 1 million ou davantage de lignes, ou une largeur de ligne importante.
Ce que j'ai donné n'est qu'un exemple pour les besoins de l'exercice.
Je reçois ces fichiers et ne suis pas maître de leur grandeur.

A Jack : j'essaie demain.

Et vous reviendrai.

La bonne nuit.

Pierre
samedi 18 août 2012 à 00:49:00 | Re : SPLIT mots en plusieurs parties encadrés par des doubles quotes

banana32

Membre Club
Bonsoir,

Si c'est bien du .NET, tu peux faire comme ceci (MaChaine étant l'expression à splitter) :
Code Visual Basic :
Dim MonTableau() As String = MaChaine.Split(New String() {Convert.ToChar(34)}, StringSplitOptions.RemoveEmptyEntries)
samedi 18 août 2012 à 02:49:05 | Re : SPLIT mots en plusieurs parties encadrés par des doubles quotes

jack

Administrateur CodeS-SourceS
Ah oui, petit détail qui 'avait échappé : Mon code est du VB6/VBA.
A transcrire sous .Net sera simple.

Mais si la solution proposée par Banana est efficace, quel gain !

(5 min plus tard)
Je viens de faire l'essai de la syntaxe proposée par Banana.
En fait, c'est un Split sur les ", ce qui n'est pas correct :
- Si pas de " dans la chaine : Renvoie une seule donnée = la chaine entière
- Si des " : Renvoie bien un tableau de chaque item
- Mais si des " juste pour le nom de la ville, on aura que 3 items, les 2 derniers n'étant pas découpés

1 2 3 4

Cette discussion est classée dans : fonction, mot, caractère, mots, split


Répondre à ce message

Sujets en rapport avec ce message

probleme avec split [ par littleoliver ] bonjour à tous ceux qui liront mon message.j'essaye de faire une fonction qui permet de chercher un mot dans un fichier texte.pour cela j'utilise deux compteur et fonction split [ par king_kunu ] salutj'utilise la fonction split pour decomposer ma chaine de caratere dans un tableauj'aimerais savoir si il est possible de connaitre la taille du t Fonction split [ par musicmandj5 ] Bonjour,je souhaite découper une chaine afin de retrouver toutes les valeurs numériques de celle ci.Les chiffres dans la chaine sont séparés par des + recherche d'une chaine de caratères et souligner le mot contenant cette chaîne de caractère (WORD VBA) [ par coulpi ] je suis en train d'écrire une macro permettant de rechercher une chaîne de caractère et par la suite de souligner le mot contenant cette chaîne de car Trouver 1 caractère dans une String en partant de la fin........... [ par cissou06 ] Bonjour!Voilà, j'ai une numérotation de titre, par exemple "1.12.3" et je voudrais avoir la position du dernier "." dans cette chaîne de caractères. J mot de passe sous access [ par kFar ] j'ai dans ma base access une table contenant des mots de passe. j'ai appliqué le masque de saisie mot de passe sur le champ correspondant, ainsi on ne Vérification de la presence d'une chaine de caractère dans une autre [ par hasen ] Bonjour, bonjourJe voudrais savoir si qqun n'a pas sous la main une fonction toute faite en vba qui lorsqu'on lui passe deux chaine de caractères, per Speech SDK [ par azerty25 ] Bonsoir allJ'utilsie le Speech SDK 5.1 pour une appplication et afin d'essayer d'améliorer la reconnaissance des mots, je voudrai savoir s'il est po fonction split() [ par jeremy4920 ] ca veut dire koi mot = split(chaine,vbcrlf) Nombre de mots dans une phrase et mot le plus long [ par SUBMAIN ] Voila je voudrais savoir comment faire un programme qui saisisse une phrase et affiche :-le nombre de mots dans cette phrase.-Le mot le plus long et l


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2013
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 6,193 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales