Detection espace dans chaines de caracteres.. (bah oui, encore...)

Résolu
Signaler
Messages postés
7
Date d'inscription
mercredi 3 décembre 2003
Statut
Membre
Dernière intervention
9 février 2010
-
Messages postés
7
Date d'inscription
mercredi 3 décembre 2003
Statut
Membre
Dernière intervention
9 février 2010
-
Bonjour,

J'ai un fichier texte qui contient un liste ne nom de ce genre :
...........
Description ; NOMDEFAMILLE COMOPSE PRENOM ; PNOMDEFAMILLE
Description ; NOMDEFAMILLE PRENOM ; PNOMDEFAMILLE
Description ; NOM DE FAMILLE PRENOM ; PNOMDEFAMILLE
Description ; NOM DE FAMILLE PRENOM ; PNOMDEFAMILLE
Description ; NOM DE FAMILLE PRENOM ; PNOMDEFAMILLE
.......

Je voudrais isolé en deux partie ces chaines de caractères à partir du dernier espace.
Var0 = Description
Var2 = Username
Var1a = NOM DE FAMILLE
Var1b = PRENOM

Je suis en mesure de réqupérer chaques lignes du fichier, de séparer au point virgule mais le traitement à affliger a ma Var1 pour la séparer aux espaces (pas toujours du meme nombre) m'est inconnu.

Voila ou j'en suis :


<HR>

Const ForReading = 1
Set oFSO = CreateObject("scripting.filesystemobject")
Set oTF = oFSO.OpenTextFile(FichierSource,ForReading,True) 'can be local or unc path
Do While oTF.AtEndOfStream <> True
sLine = oTF.ReadLine
aLine = split(sline, ";",-1,1)
Descript = Trim(aLine(0))
NomComplet = Trim(aLine(1))
UserName = Trim(aLine(2))
FonctionNom NomComplet
.....

<HR>
Je pensais aller sur quelques chose du genre...

<HR>

Sub FonctionNom
...
Varnom=split(NomComplet, " ",-1,1)
...
Code inconnu...
...
Prenom=PCase ( Varnom(n))
Nom =UCase(Varnom(0) & " " & Varnom(1) & " " & .... & Varnom(n-1))
...

End Sub

<HR>

Comment savoir quel est le dernier espace ? Car chaque ligne n'a pas nécéssairement le même nombre d'espace...

2 réponses

Messages postés
402
Date d'inscription
jeudi 25 novembre 2004
Statut
Membre
Dernière intervention
7 juin 2009
5
Et voila ta procédure FonctionNom

Public Sub FonctionNom(a_NomComplet As String, a_Nom As String, a_Prenom As String)
Dim li_Pos As Integer
'Renvoie la position du premier espace en partant de la fin
li_Pos = InStrRev(a_NomComplet, " ")
If li_Pos > 0 Then
a_Nom = Left(a_NomComplet, li_Pos)
a_Prenom = Right(a_NomComplet, Len(a_NomComplet) - li_Pos)
Else
a_Nom = a_NomComplet
a_Prenom = ""
End If
End Sub

Public Sub test()
Dim a As String
Dim b As String, c As String
a = "toto tata tutu"
Call FonctionNom(a, b, c)
Debug.Print "Nom : " & b
Debug.Print "Prenom : " & c


End Sub
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 109 internautes nous ont dit merci ce mois-ci

Messages postés
7
Date d'inscription
mercredi 3 décembre 2003
Statut
Membre
Dernière intervention
9 février 2010

Wouais ! Super !
C'est exactement ca :) Ca fontionne nickel.
Merci !

J'ai ajouté une fonction pour s'assurer que le prénom est avec la premiere lettre en majuscule et le reste en minuscule.

Ca donne ca...



<HR>


Function CapitalizeValue(sFullName)
Dim fCapitalizeNextLetter
Dim sNewName
Dim sChar
sFullName = lCase(Trim(sFullName)) if sFullName "" then CapitalizeValue sFullName
fCapitalizeNextLetter = true
For i=1 to Len(sFullName)
sChar = Mid(sFullName,i,1)
If (fCapitalizeNextLetter = True) Then
If IsLetter(sChar) = True Then
sChar = UCase(sChar)
fCapitalizeNextLetter = false
else
fCapitalizeNextLetter = true
end if
else
if IsLetter(sChar) = false then
fCapitalizeNextLetter = true
end if
end if
SNewName = SNewName & SChar
Next
CapitalizeValue = sNewName
End Function


function IsLetter(sChar)
fRet = false
nASCII = ASC(sChar)
if ((nASCII >=65) and (nASCII <=90)) then fRet = true ' Upper case letters
if ((nASCII >=97) and (nASCII <=122)) then fRet = true ' Lower case letters
IsLetter = fRet
End function
|
|
|

Récupération de dname dupuis fichier source...

|
|
|

FonctionNom dName, a_nom, a_prenom
lName = UCase(a_Nom)
fName = CapitalizeValue(A_Prenom)
...
...
wscript.echo "Nom : " & lName & " Prenom : " & fName

|
|
|
|

Sub FonctionNom(a_NomComplet, a_Nom, a_Prenom)
Dim Li_Pos
'Renvoie la position du premier espace en partant de la fin
Li_Pos = InStrRev(a_NomComplet, " ")
If li_Pos > 0 Then
a_Nom = Left(a_NomComplet, li_Pos)
a_Prenom = Right(a_NomComplet, Len(a_NomComplet) - Li_Pos)
Else
a_Nom = a_NomComplet
a_Prenom = ""
End If
FName = A_Prenom
End Sub


<HR>

Merci beaucoup !

Ouistyty