jeanluc065
Messages postés134Date d'inscriptionsamedi 23 septembre 2006StatutMembreDernière intervention 1 juin 2007
-
15 déc. 2006 à 06:06
jeanluc065
Messages postés134Date d'inscriptionsamedi 23 septembre 2006StatutMembreDerniè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
jeanluc065
Messages postés134Date d'inscriptionsamedi 23 septembre 2006StatutMembreDerniè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
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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 ...
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201827 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
jeanluc065
Messages postés134Date d'inscriptionsamedi 23 septembre 2006StatutMembreDerniè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.
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201827 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 !!!
jeanluc065
Messages postés134Date d'inscriptionsamedi 23 septembre 2006StatutMembreDerniè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
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201827 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
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
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201827 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
jeanluc065
Messages postés134Date d'inscriptionsamedi 23 septembre 2006StatutMembreDerniè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
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201827 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