begin process at 2012 02 15 11:03:48
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Visual Basic & VB.NET

 > 

Archives Visual Basic

 > 

J'AI BESOIN D'AIDE !!!! :)

 > 

Découpage de chaînes et recollage de morceaux découpés "par erreur"!


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

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


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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 : 0,796 sec (4)

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