Remplacement d'une chaine de caractére par un entier

cs_maya77 Messages postés 36 Date d'inscription vendredi 13 novembre 2009 Statut Membre Dernière intervention 18 juin 2011 - 18 juin 2011 à 14:40
 Utilisateur anonyme - 19 juin 2011 à 22:55
bonjour tout le monde

voila mon problème, j'ai un fichier de la sorte:


+1 NOUN_PROP NOUN_PROP
-1 PUNC DET+NOUN+NSUFF_FEM_PL+CASE_DEF_NOM DET+ADJ+NSUFF_FEM_SG+CASE_DEF_NOM PUNC NUM PUNC ABBREV ABBREV PUNC
+1 PUNC NOUN+CASE_DEF_NOM NOUN+CASE_INDEF_GEN PV+PVSUFF_SUBJ:3MS PREP NOUN+NSUFF_FEM_SG+CASE_DEF_GEN
-1 DET+ADJ+CASE_DEF_GEN
..........
..........


et un autre fichier qui contient tout les tag (étiquéte) qui puissent aparaitre dans le premier fichier


ABBREV
ADJ+CASE_DEF_GEN
ADJ+CASE_INDEF_ACC
ADJ+CASE_INDEF_GEN
ADJ+CASE_INDEF_NOM
ADJ+NSUFF_FEM_SG+CASE_INDEF_ACC
ADV
ADV+CASE_DEF_ACC
CONJ
DET+ADJ+NSUFF_FEM_SG+CASE_DEF_A
DET+ADJ+NSUFF_FEM_SG+CASE_DEF_GEN
DET+ADJ+NSUFF_FEM_SG+CASE_DEF_NOM
DET+ADJ+NSUFF_MASC_PL_GEN
DET+NOUN+CASE_DEF_ACC


Je voudrai remplacer chaque occurrence du premier fichier par la position de cette même occurrence dans le deuxième fichier,
par exemple un 0 à la place de ABBREV

Voici mon code mais il ne me remplace que les ABBREV donc la première possibilité

  Dim tags As String = sr3.ReadToEnd
        Dim tabTag() As String = tags.Split(vbCrLf)

 Dim vecteur As String = sr4.ReadToEnd
        vecteur = vecteur.Replace(vbCrLf, Chr(32))
        Dim TabVect() As String = vecteur.Split(" ")

        For j As Integer = 0 To UBound(tabTag)
            For k As Integer = 0 To UBound(TabVect)
                ' If TabVect(k) <> "+1" And TabVect (k) <> "-1" Then
                If TabVect (k) = tabTag (j)  Then
                    TabVect(k)  = CStr (j)
                End If
                'End If
            Next k
        Next j



merci pour votre aide

3 réponses

cs_maya77 Messages postés 36 Date d'inscription vendredi 13 novembre 2009 Statut Membre Dernière intervention 18 juin 2011
18 juin 2011 à 14:42
les deux commentaires sont inclus dans le code, désolé
0
Utilisateur anonyme
19 juin 2011 à 22:38
Bonsoir,
La classe Array possède une méthode très pratique (ForEach) pour énumérer chacun de ses membres en effectuant une action.
Tu peux remplacer tes 2 boucles For Next par cette ligne :
Array.ForEach(tabTag, AddressOf Remplace)

Ton array tabVect sera ainsi modifiée.

Comme tu peux voir, on fait appel à une sub dans laquelle on modifiera les données :
Private Sub Remplace(ByVal element As String)
    For x = 0 To tabVect.Length - 1
        If tabVect(x) = element Then
            tabVect(x) = Array.IndexOf(tabTag, element).ToString
        End If
    Next
End Sub


Bonne nuit.
0
Utilisateur anonyme
19 juin 2011 à 22:55
Sinon, pour reprendre ton code, cela donne :
        Dim tabTag() As String = sr3.ReadToEnd.Split(New String() {Environment.NewLine}, StringSplitOptions.None)
        Dim tabVect() As String = sr4.ReadToEnd.Replace(Environment.NewLine, " ").Split(" "c)

        sr3.Close()
        sr4.Close()

        For j As Integer = 0 To UBound(tabTag)
            For k As Integer = 0 To UBound(tabVect)
                ' If TabVect(k) <> "+1" And TabVect (k) <> "-1" Then
                If tabVect(k) = tabTag(j) Then
                    tabVect(k) = CStr(j)
                End If
                'End If
            Next k
        Next j

Bonne nuit
0
Rejoignez-nous