Extraire chaîne caractères

Résolu
jeanluc065 Messages postés 134 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 1 juin 2007 - 15 déc. 2006 à 06:06
jeanluc065 Messages postés 134 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 1 juin 2007 - 17 déc. 2006 à 11:50
Bonjour à toutes et tous,

En access 2002, catégorie novice. Je récupère des données d'un fichier txt
Chaque ligne commence toujours par des noms composés ( nombre de  mots variables ) suivi de chiffres.
Ces données seront importées dans le champ1 de ma table.

Ma question :
qui pourrait m'aider pour le code afin d'extraire ces noms pour les placer dans le champ"nom" et ne conserver que les chiffres dans le champ1 

exemple

champ1
jean-marie point 45 kkjxxjkwx
pierre joseph 5464644

résultat                     nom
45 kkjxxjkwx            jean-marie
5464644                   pierre joseph

MERCI D'AVANCE
JL

29 réponses

cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
16 déc. 2006 à 15:57
 Re,
If (IsNumeric(oTable(i)) <gras>True Or IsDate(oTable(i)) True) And k = 0 Then</gras>

jean-marc
3
jeanluc065 Messages postés 134 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 1 juin 2007
17 déc. 2006 à 09:26
Bonjour à tous,
Salut Jean-Marc
Voici la solution complète concoctée par JMO + petite ajoute ( insert into ) glânée ailleurs.
Un grand merci à JMO pour sa très précieuse collaboration
JL
**********************************************************
exposé :
dans un fichiet text "c:\a1\test chaine.txt" j'ai des milliers de lignes qui commenecent toujours par du texte ( noms et prénoms composés ) suivi de chiffres ou dates.

depuis une db en access

Je veux importer ces lignes dans ma table dans
le champ 'tout' = une ligne complète
le champ 'noms' = le début texte de ma ligne
le champ 'chiffre' = les chiffres et dates qui suivent le texte.
************************************************

Private Sub Étiquette4_Click()
objFile = "c:\a1\test chaine.txt"
Call ExtractText(objFile)
End Sub

*************************************
Function ExtractText(objFile)
Dim objFSO, objFichier
Dim SQL As String




Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFichier = objFSO.OpenTextFile(objFile, 1)


Do While objFichier.AtEndOfStream <> True
Dim oTable, nom, resultat, i, k
nom = ""
resultat = ""
i = 0
k = 0


   oTable = Split(objFichier.ReadLine, " ", -1, 1)
  
   For i = 0 To UBound(oTable)
       If UBound(oTable) = 1 Then Exit Do       If (IsNumeric(oTable(i)) True Or IsDate(oTable(i)) True) And k = 0 Then
          resultat = resultat & Space(1) & oTable(i)
          k = 1          ElseIf k 0 Then nom nom & Space(1) & oTable(i)          ElseIf k 1 Then resultat resultat & Space(1) & oTable(i)
       End If
   Next
      SQL = "INSERT INTO matable(tout,noms,chiffres) VALUES ('" & Join(oTable) & "','" & nom & "','" & resultat & "') "
          DoCmd.RunSQL SQL
 MsgBox "ligne complète: " & vbCrLf & Join(oTable) & vbCrLf & vbCrLf & vbCrLf & _
         "contenu de la variable nom :" & vbTab & vbTab & nom & vbTab & vbCrLf & _
          "contenu de la variable resultat :" & vbTab & resultat, , "VERIFICATION"
          
          
Loop


objFichier.Close
Set objFichier = Nothing
Set objFSO = Nothing
End Function
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
15 déc. 2006 à 07:55
Un sujet presque identique a été traité il y a peu.

Inspire-t-en :

http://www.vbfrance.com/infomsg_RECUPERER-NUMERO-DS-CHAINE_855538.aspx#7
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
15 déc. 2006 à 11:18
http://www.vbfrance.com/recherche.aspx?r=chaine+de+caract%e8re+fichier+texte&tr=forum




 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
15 déc. 2006 à 11:21
Salut au fait!http://www.vbfrance.com/recherche.aspx?r=Fichier+texte+lire&tr=source

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
15 déc. 2006 à 11:22
http://www.codyx.org/recherche.aspx?r=fichier+texte




 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
15 déc. 2006 à 11:23
Et enfin pour la manipulation des chaines de caractères:http://www.vbfrance.com/infomsg_CHAINE-CARACTERES_859711.aspx#5

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
15 déc. 2006 à 11:32
Surtout que dans son cas (avec la forme que revêtent ses données et les chiffres toujours devant ...) un simple Val suffit là !
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
15 déc. 2006 à 11:33
Ah pardon ! Elles sont derrière ! (lu trop vite !)
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
15 déc. 2006 à 13:45
Hé !
Qui a validé ma réponse idiote ?
Elle ne peut marcher que si les chiffres sont au début de la chaîne ! (ce qui n'est pas le cas !!!!!...)
Annule cette validation, s'il te plait ...
0
jeanluc065 Messages postés 134 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 1 juin 2007
15 déc. 2006 à 16:00
Bonjour,

Merci à tous pour vos réponses mais je n'y comprends rien.
Bon week-end
JL
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
15 déc. 2006 à 19:22
 Bonsoir à tous

Salut Jean-Luc, un petit souci ???

objFile = "D:\Test_VBFrance\test_jean-luc.txt"



Call RechercherMot(objFile)



Function RechercherMot(objFile)
Dim objFso, objFichier
 
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objFichier = objFso.OpenTextFile(objFile, 1)



Do While objFichier.AtEndOfStream <> True
Dim Lecture, oTable, nom, resultat, i
nom = ""
resultat =""
Lecture  = objFichier.ReadLine
oTable = Split(Lecture, " ", -1, 1)



   For i=0 To UBound(oTable)
       If InStr(1, oTable(0), "-")  <> 0 Then
          nom = oTable(0)
          If i > 1  Then resultat = resultat & Space(1) & oTable(i)
       Else
          nom = oTable(0) &Space(2)& oTable(1)
          If i > 1  Then resultat = resultat & Space(1) & oTable(i)
       End If
  Next
  MsgBox "ligne complète: " &vbCrLf& Lecture &vbCrLf&vbCrLf&vbCrLf&_
          "contenu de la variable resultat :" & resultat &vbTab&vbCrLf&_
          "contenu de la variable nom :"&vbTab& nom,,"VERIFICATION"  
Loop
objFichier.Close
Set objFichier = Nothing
Set objFso = Nothing
End Function



jean-marc
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
15 déc. 2006 à 19:44
 Re,

Petite correction, car pas besoin de la var lecture.

Dim oTable, nom, resultat, i
nom = ""
resultat =""



   oTable = Split(objFichier.ReadLine, " ", -1, 1)



   For i=0 To UBound(oTable)




jean-marc
0
jeanluc065 Messages postés 134 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 1 juin 2007
16 déc. 2006 à 08:23
Bonjour tout le monde,

Salut Jean-Marc,

Merci pour la réponse mais çà ne marche pas tout à fait comme je le souhaitais. Il y a des problèmes avec les noms et ou prénoms composés.
Et comment adapter ce code à une table des champs ?
Ou comment modifer le fichier TXT pour ne garder que les nom par exemple ?
J'ai créé une petite db test avec ton code. au cas où, je peux te l'envoyer et çà servirait pour tout le monde ?
Bonne journée.


 
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
16 déc. 2006 à 09:00
 Bonjour à tous

Salut Jean-Luc,
Je te croyais en long week-end.
J'ai lu avec intérêt ton MP, je comprends aisément ton amerture et parfois ton désarroi à
essayer à adapter des bouts de code proposés par x forumers (pas trop français ce terme).
Je ne peux t'aider que sur la phase "extraction des données .txt", car côté gestion .mdb, je ne
maitrise pas trop car j'utilise des bases seulement pour y extraire des données et non pour y écrire.

Pour tester ta demande d'hier (à 06h), je me suis crée un fichier .txt qui contient les 2 lignes suivantes:

jean-marie point 45 kkjxxjkwx test1
pierre joseph 5464644 test2

le résultat:
pour la 1ère ligne, la variable "nom" contient "jean-marie" et la variable "resultat" contient "45 kkjxxjkwx test1"
pour la 2ème ligne, la variable "nom" contient "pierre joseph" et la variable "resultat" contient "5464644 test2".

Donc, ce n'est pas, exactement, ce que tu escomptais comme résultat ????
Ai-je mal compris (1 fois de +)  la question ????

Ajoute d'autres lignes dans ton exemple et le résultat souhaité.
Et oui, il faut de la persévérance pour boucler (et non bacler, ça m'arrive parfois) un projet !!!

jean-marc
0
jeanluc065 Messages postés 134 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 1 juin 2007
16 déc. 2006 à 09:20
Bonjour Jean-Marc,

Ok pour la base de données.
 A défaut, n'y a-t-il pas moyen de modifier le fichier txt original pour ne garder que ce qui m'intéresse. Dans mon exmple, ce serait les noms.
Je prendrais la précaution de faire une copie de l'original
Merci d'avance
jl

jean-marie point 45 kkjxxjkwx test1
pierre joseph 5464644 test2

nom : jean-marie point   résultat : 45 kkjxxjkwx test1
nom : pierre joseph        résultat : 5464644 test2
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
16 déc. 2006 à 09:49
 Re,

Dans ton topic d'hier, tu avais donc zappé que tu voulais le "point" de la 1ère ligne.
Tu nous focalisais sur le "-" des prénoms composés, c'était donc une erreur ?

objFile = "D:\Test_VBFrance\test_jean-luc.txt"



Call ExtractFileText(objFile)



Function ExtractFileText(objFile)
Dim objFso, objFichier
 
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objFichier = objFso.OpenTextFile(objFile, 1)



Do While objFichier.AtEndOfStream <> True
Dim oTable, nom, resultat, i
nom = ""
resultat =""
i = 0





   oTable = Split(objFichier.ReadLine, " ", -1, 1)
   nom = oTable(0) &Space(1)& oTable(1)
  
   For i=2 To UBound(oTable)
        resultat = resultat & Space(1) & oTable(i)
   Next
   MsgBox "ligne complète: " &vbCrLf& Join(oTable) &vbCrLf&vbCrLf&vbCrLf&_
          "contenu de la variable non :" &vbTab&vbTab& nom &vbTab&vbCrLf&_
          "contenu de la variable resultat :"&vbTab& resultat,,"VERIFICATION"  
Loop
objFichier.Close
Set objFichier = Nothing
Set objFso = Nothing
End Function






jean-marc
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
16 déc. 2006 à 10:02
 Re,

Ré-écrire ton .txt (avant l'import dans ta .mdb) sous une autre présentation est une possibilité aisée,
mais je ne vois pas l'intérêt, puisque tu te retrouves avec 2 variables (nom et resultat) contenant la totalité de
chaque ligne de ton .txt

jean-marc
0
jeanluc065 Messages postés 134 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 1 juin 2007
16 déc. 2006 à 12:14
Re,

Je pense que je ne me suis pas bien expliqué et je complète l'exemple

jean-marie du pont lévêque    45 kkjxxjkwx test1
pierre joseph 5464644 test2
josé el cantaoui de la mancha 544477777777

après traitement

nom : jean-marie du pont lévêque        résultat : 45 kkjxxjkwx test1
nom : pierre joseph                             résultat : 5464644 test2
nom : josé el cantaoui de la mancha     résultat : 544477777777

merci
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
16 déc. 2006 à 12:52
 Re,

Do While objFichier.AtEndOfStream <> True
Dim oTable, nom, resultat, i, k
nom = ""
resultat =""
i = 0
k = 0



   oTable = Split(objFichier.ReadLine, " ", -1, 1)
  
   For i=0 To UBound(oTable)
       If UBound(oTable) = 1 Then Exit Do       If IsNumeric(oTable(i)) True And k 0 Then
          resultat = resultat & Space(1) & oTable(i)
          k = 1          ElseIf k 0 Then nom nom & Space(1) & oTable(i)          ElseIf k 1 Then resultat resultat & Space(1) & oTable(i)
       End If
   Next
   MsgBox "ligne complète: " &vbCrLf& Join(oTable) &vbCrLf&vbCrLf&vbCrLf&_
          "contenu de la variable non :" &vbTab&vbTab& nom &vbTab&vbCrLf&_
          "contenu de la variable resultat :"&vbTab& resultat,,"VERIFICATION"  
Loop



jean-marc
0
Rejoignez-nous