Récupération d'"arguments" dans une chaine
Bonjour,
Je souhaiterai écrire une fonction permettant de récupérer mes arguments dans une chaine... Je ne pense pas que le terme argument soit exact, mais je m'explique :
A partir d'une chaine comme celle ci :
Code:
1 2
|
Dim maChaine As String = "Bonjour {Prénom} {Nom}" |
Je voudrais une fonction qui me permette de me retourner une table de String qui contient les valeurs "Prénom" et "Nom".
Quelle est la piste a suivre pour réaliser de façon propre ce genre de recherche dans le texte?
NB : Il me faut une façon optimisée de le faire car on s'entent que je vais travailler avec des chaines de caracteres beaucoup plus longues que celle donnée en exemple :)
Merci d'avance
CHAINES DE CARACTERES A ANALYSER,token,mot cles
bonjour,tu veux retrouver "avaler' la chaine mots par mot et retrouver les mots cles.
StringSplit(chaineAnalyse,strSeparateur)
strSeparateur c'est un espace dans ton exemple.
elle renvoie un tableau de chaine sans les espaces.
on peut ecrire egalement StringSplit(chaineAnalyse)
elle renvoie un tableau de chaine non-vides(separ="")
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
Public Function OuvrirFichier() As String
Dim MonFichier As String = ""
Dim MonOpenDlg As New OpenFileDialog
MonOpenDlg.Title = "Ouverture Fichier Donnes LCARAT"
Dim btnOK As DialogResult = DialogResult.OK
MonOpenDlg.Filter = "Fichiers Donnes Texte(*.dat)|*.dat"
MonOpenDlg.FilterIndex = 1
If MonOpenDlg.ShowDialog = btnOK Then
MonFichier = MonOpenDlg.FileName
Else
btnOK = DialogResult.Cancel
End If
Return MonFichier
End Function
Public Function ChaineVersTableau(ByVal LitChaine As String) As String()
Dim TableLigne() As String
TableLigne = Split(LitChaine," ")
Dim DernierNonVide As Integer = -1
Dim posCarIndesirable as String=")"
For I As Integer = 0 To TableLigne.Length - 1
If TableLigne(I) <> "" Then
posCarIndesirable= Instr(1,TableLigne(I),")")
If posCarIndesirable<>0 Then
Strings.Replace(TableLigne(I), ")", "", 1)
End If
posCarIndesirable= Instr(1,TableLigne(I),"[")
If posCarIndesirable<>0 Then
Strings.Replace(TableLigne(I), ")", "", 1)
End if
Endif
DernierNonVide += 1
TableLigne(DernierNonVide) = TableLigne(I)
End If
Next
ReDim Preserve TableLigne(DernierNonVide)
Return TableLigne
End Function |
Il y a moins d'optimiser ce code et factorisation en mettant par exemple la recherche des caracteres non-admis dans chaque tableligne() dans une fonction à part munie d'un tableau de ces caracteres non-admis(dictionary).
Cette fonction fait :
-a chaque appel avec un mot tableligne transmis (mot recupere par string.split)
-Boucler sur le tableau des caracteres non-admis remplis ad-hoc:
-executer instr et si il y a occurence d'un caractere non-admis
-executer strings.replace
-iterer
-renvoyer a la fin un mot tableligne() nettoye a la fonction strings.split
qui elle continuera son travail normalement.
L'autre facon de voir ce probleme en sens inverse c'est un analyseur lexical qui travaille avec tous les mots admis stockes dans un dictionary et qui reconnait les mots cles admis et les stocke dans tableligne() et ignore les mots non-cles(c'est aussi l'approche pour un dico orthographique parbleu,mais avec la saise du robert ou larousse,caramba....).
A boire et a manger ,c'est un vrai moulin ,tout depend du probleme pose..
bon code ...........
pattern chaine texte,regex
bonjour,
Regarde cet outil gratuit "regxd" de Chris Sellers un gourou de chez microsoft qui permets d'entrer un expression reguliere et de la tester en interactif avec le pattern chaine sur ce lien
http://www.sellsbrothers.com/tools/regexd.zip
bon code....