Accueil > Forum > > > > Découpage de chaînes et recollage de morceaux découpés "par erreur"!
Découpage de chaînes et recollage de morceaux découpés "par erreur"!
vendredi 14 novembre 2003 à 17:16:39 |
Découpage de chaînes et recollage de morceaux découpés "par erreur"!

bertouille
|
Bonjour, je suis actuellement en stage, et je bloque sur le découpage de chaînes de caractères pour renseigner les champs d'une BdD: -pour le découpage brut de mes données,ça va, j'utilise la fonction SPLIT; -mais le séparateur utilisé dans les données que je dois traiter est la "," et comme ces données contiennent des zones de saisie libre, placées entre " " et pouvant comporter des ",", je me retrouve avec plus de morceaux découpés que de champs dans la table de ma BdD. Merci d'avance pour toute solution, morceau de solution ou idée! CIAO!
|
|
vendredi 14 novembre 2003 à 17:23:13 |
Re : Découpage de chaînes et recollage de morceaux découpés

radada
|
Et tu ne peux pas faire un premier split sur les " " et faire ensuite un tri sur les ","????
|
|
vendredi 14 novembre 2003 à 20:56:23 |
Re : Découpage de chaînes et recollage de morceaux découpés

ld40
|
ton pb me plait (j'ai déjà connu le même embarras).
J'ai donc retroussé mes manches et pondu la sub suivante.
J'espère qu'elle sera à la hauteur.(merci de me le dire). NB: elle ne fonctionnera pas si la string contient chr(253) ou chr(254) NB2: dans notre cas separateur=","
Public Sub Megasplit(chaine As String, separateur As String, resultatcoll As Collection) 'testé avec les cas suivants ',,3,4,,6,,,9,"10", '1,"2,2",,"4","5",6,7,8,9,10,11 ',,,,,,,,9,10,"11" '1,2,3,4,5,6,7,8,9,10,11 Dim ouinon As Boolean Dim t As Variant Dim t2 As Variant Dim x As Variant Dim x2 As Variant Dim chaine2 As String Dim chaine3 As String Dim carspe1 As String Dim carspe2 As String carspe1 = Chr(254) carspe2 = Chr(253)
If Left(chaine, 1) = separateur Then chaine = carspe1 + chaine End If If Right(chaine, 1) = separateur Then chaine = chaine + carspe1 End If
ouinon = True t = Split(chaine, Chr(34), , vbTextCompare) For Each x In t If ouinon = True Then chaine2 = x chaine2 = Replace(chaine2, separateur + separateur, separateur + carspe1 + separateur) If Left(chaine2, 1) = separateur Then chaine2 = Right(chaine2, Len(chaine2) - 1) End If If Right(chaine2, 1) = separateur Then chaine2 = Left(chaine2, Len(chaine2) - 1) End If t2 = Split(chaine2, separateur, , vbTextCompare) For Each x2 In t2 chaine3 = x2 chaine3 = Replace(chaine3, " ", carspe2) chaine3 = Trim(Replace(chaine3, carspe1, " ")) chaine3 = Replace(chaine3, carspe2, " ") resultatcoll.Add chaine3 Next Else resultatcoll.Add x End If ouinon = ouinon - (ouinon = True) + (ouinon = False) Next
End Sub
|
|
jeudi 20 novembre 2003 à 16:09:41 |
Re : Découpage de chaînes et recollage de morceaux découpés

bertouille
|
Merci pour ton aide Id40,
malheureusement, je n'ai pas réussi à faire correctement l'appel de ta sub (à cause des collections que je ne maîtrise pas ) et je n'est donc pas pu la tester dans mon appli. Du coup, je suis parti sur autre chose:
Private Sub Command1_Click()
'Déclaration des variables Dim Ligne As String 'Variable dans laquelle on stockera la ligne en cours de lecture Dim Texte As String Dim NomFichier As String 'Variable dans laquelle on stockera le chemin du rep. Dim F As Integer Dim monTab() As String 'Tableau qui stockera le résultat de la fonction Split Dim monTab2() As String 'Tableau qui stockera les champs après leur retouche Dim i As Integer Dim j As Integer Dim k As Integer NomFichier = "C:\Documents and Settings\DESBIEYS\Bureau\a0092012.A" F = FreeFile k = 0
'Ouverture d'un fichier, lecture, ligne par ligne, et découpage Open NomFichier For Input As F Do While Not EOF(F) Line Input #F, Ligne Texte = Texte & Ligne & vbCrLf monTab() = Split(Ligne, ",") 'Découpage de la ligne suivant le séparateur "," Text6.Text = UBound(monTab()) 'Juste pour connaitre l'indice le plus élevé du tableau 'Recollage des morceaux découpés à tort For i = 0 To UBound(monTab()) If monTab(i) = " "" * "" " Then 'Si l'expression commence et finit par " " " monTab(i) = " * " 'Alors je supprime les " " " monTab2(k) = monTab(i) 'Et je place cette expression dans mon tableau final ElseIf monTab(i) = " "" * " Then 'Si l'expression commence mais ne finit pas par " " " j = i + 1 Do 'Alors je concatène l'expression suivante monTab(i) = monTab(i) & "," & monTab(j) Loop Until monTab(j) = " * "" " 'Tant que l'expression ne finit pas par " " " monTab2(k) = monTab(i) 'Je place le résultat de ma concaténation dans mon tableau final i = j 'i prend la valeur de j pour ne pas relire la même expression en début de boucle for Else monTab2(k) = monTab(i) 'Pour toutes les expressions correctement découpées et sans " " " End If k = k + 1 Next Loop
Seulement, dans le dernier : Else monTab2(k) = monTab(i) 'Pour toutes les expressions correctement découpées et sans " " " le compilo bloque, apparament à cause de l'indice (i). Je ne comprends pas. Si qq'1 pouvait m'aider, SVP!!! Merci d'avance. B
|
|
jeudi 20 novembre 2003 à 21:48:11 |
Re : Découpage de chaînes et recollage de morceaux découpés

ld40
|
--------------------------------------------------------------------
J'ai regardé un peu ton code:
Il y a des erreurs bien avant la ligne sur laquelle ça plante. * Par exemple tu as ecrit: If monTab(i) = " "" * "" " ... ElseIf monTab(i) = " "" * " Or, ces deux lignes ne sont pas correctes Si tu recherches " il faut que tu recherche chr(34)
* Ensuite monTab2(k) = monTab(i) ne peut pas fonctionner puisque montab2() n'est pas dimensionné. On devrait trouver la ligne Redim montab2(UBound(monTab())) en ammont du code
* remarque, il n'y a pas eu besoin de dimensionner montab() car la fonction split renvoi un tableau variant (pas de dimension)
------------------------------------------------------------------- En conséquence, soit tu essayes de corriger ton code, soit je te propose d'essayer le code suivant pour exploiter la fonction megasplit précédemment décrite J'ai essayé de reprendre les noms de tes variables pour que tu comprennes comment on peut remplir un tableau montab2() à partir d'une collection -------------------------------------------------------------------
Private Sub Command1_Click()
'Déclaration des variables Dim Ligne As String 'Variable dans laquelle on stockera la ligne en cours de lecture Dim monTab2() As String 'Tableau qui stockera les champs après leur retouche Dim NomFichier As String 'Variable dans laquelle on stockera le chemin du rep.
Dim tablo As New Collection Dim i As Integer Dim m As Integer Dim resultatcoll As New Collection
NomFichier = "C:\Documents and Settings\DESBIEYS\Bureau\a0092012.A" 'NomFichier = "c:\fic.txt"
i = FreeFile Open NomFichier For Input As #i Do Until EOF(i) Line Input #i, Ligne 'resultatcoll est la collection réceptrice : je la nettoie Do Until resultatcoll.Count = 0 resultatcoll.Remove (1) Loop 'je lance la sub Megasplit qui renvoyera les champs 'séparés dans la collection resultatcoll Call Megasplit(Ligne, ",", resultatcoll) 'je recupère les données presentes dans la collection 'et je rempli mon tableau montab2() 'apres avoir correctement dimmensionné ce dernier ReDim monTab2(1 To resultatcoll.Count) For m = 1 To resultatcoll.Count monTab2(m) = resultatcoll(m) Next Loop Close i End Sub
|
|
Cette discussion est classée dans : données, découpage, morceaux, chaînes, découpés
Répondre à ce message
Sujets en rapport avec ce message
découpage de données [ par fricher ]
Bonjour, g des données de 96 octets à découper. Il faudrait les découper par des tranches de 1 octet et exploiter les 4 premiéres tranches.Je n'ai auc
Est ce que c'est faisable???? [ par programmationniste ]
Je suis entrain d faire une application de gestion d'un cabinet médical, le problème c'est que la base de données (access) doit être accessible en mêm
enregistrer ma base de données par le code [ par kinkine ]
Mysql sur plusieurs postes [ par beastieyann ]
<TD id=HB_Focus_Element vAlign=top width="100%" background="" height=250 UNSELECTAB
Remplacer plusieur morceaux de texte par d' autres [ par floran ]
Bonjour a tous je debute dans la programmations vb.net avec sharpdevelop. Je travaille sur un programme pour les forum, les bbcodes. Voila il y a plus
2 ports comm [ par nicopilote ]
Peut on ouvrir 2 ports comm simultanément?Je reçois des données d'un GPS sur un port, mais je voudrais en même temps recevoir des données de températu
Excel [ par adn28 ]
Salut, URGENT!!!!!!!!!Sur une page excel je dois créer des boutons et des zones de texte pour un outil de chiffrage, en fait j'ai des données sur
[.NET] SQL / EXCEL / VB.NET [ par guigui43 ]
Je fais un programme ou j'extrais des données d'une base SQL Oracle et je les colle dans un datagrid.Je voudrai exporter ces données (je suis avec Off
Migration de données vers Access [ par tomgrc ]
Salut,je recherche un moyen simple qui permette de garder mes données rempliesdans VB. Le problème est que j ai 2 feuilles différentes qui sont dépend
lien base de données access sécurisée en VBS [ par dvjulien ]
Bonjours à tous !!!Voila j'aurai besoin de faire un script vbs qui viendrait rechercher un champ d'une table d'une basse de données ACCESS sécurisée.S
Livres en rapport
|
Derniers Blogs
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
LISTVIEW TAILLELISTVIEW TAILLE par ShayW
Cliquez pour lire la suite par ShayW
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|