Pb avec un tableau!!! tres tres urgent

nicolas_mendoza Messages postés 15 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 21 février 2004 - 26 déc. 2003 à 12:02
nicolas_mendoza Messages postés 15 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 21 février 2004 - 26 déc. 2003 à 23:22
salut

j'ai un ptit pb avec la gestion d'un tableau.
je vuex creer un tableua qui contient les lettres suivantes: b,c,ç,d,f,g,h,j,k,l,m,p,q,s,t,v,w,x,z
j'ai fait:

Dim consnonnas(1 to 19) as string
consnonnas() =( "b" "c"......."z")
j'ai un message d'erreur dans la seconde ligne, je n'arrive pas atrouve d'indication pour remplir mon tableau.

autres question: je travaille sur un programme pour passer de texte en phoneme. J'ai un fichier que je nomme "fichier" dans le prog et par exemple je veux remplacer "les caracteres "am" qui sont suivi d'un des caracteres du tableau de consnonnas par "@"
j'ai donc fait

for consnonnas= 1 to 19
fichier = replace(fichier, "am" & consnonnnas, "@")
next consnonnas

Si qq'un pouvais m'aider car je suis super bloque.
Merci
nico

13 réponses

K@zuya Messages postés 306 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 15 février 2016
26 déc. 2003 à 12:13
déjà, pour declarer ton tableau, tu doit faire:

'declaration generale
Const CSN = "bcçdfghjklmpqstvwxz"

'dans une sub:
dim Consonnas(18) as string
for i = 1 to len(CSN)
.   Consonnas(i-1)=mid$(CSN,i,1)
next


puis ensuite, pour ton fichier, c'est un peu plus complexe que tu le pense, on ne peut pas faire un simple replace() sur un fichier, tu est obligé d'ouvrir ton fichier, de le lire, de le modifier puis de le réécrire (sauf si tu désire ne modifier que le nom du fichier, dans ce case, tu na pas grand chose a modifier).

K@zuya 8-)
0
nicolas_mendoza Messages postés 15 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 21 février 2004
26 déc. 2003 à 12:19
salut merci pour l'info pour le tableau, je vais le faire de suite

par contre en ce qui concerne le fichier, dans dans ma fonction, je l'ai ouvert et je le lit et apres je le reecri. fichier contient la direction du fichier que j'ai ouvert.
Si tu avait une idee pour le replace, comment je pourrais m'y prendre, se serait niquel

Encore Merci
nico
0
nicolas_mendoza Messages postés 15 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 21 février 2004
26 déc. 2003 à 12:36
je vien d'essayer le tableau, mais ca n'a pas l'air de marcher.
normalement a la premiere case de consnonas je devrait avoir "b"???? et ainsi de suite.
Je ne vois pas quelle valeur prend la variable l dans la boucle for???
peux tu me renseigner stp!!
merci
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
26 déc. 2003 à 12:52
Tu pourrais faire ceci :

Const CSN = "b,c,ç,d,f,g,h,j,k,l,m,p,q,s,t,v,w,x,z"

dim Consonnas() as string
Consonnas=Split(CSN, ",")


pour tes modifications de fichier, je te conseilles d'utiliser les expressions régulières.

Sans compter la lecture et l'ecriture dans ton fichier, ca donnerait ca :

Public Function ReplaceConsonnas(ByVal Buffer As String) As String
    Dim Reg As New RegExp
    With Reg
        .MultiLine = True
        .Global = True
        .IgnoreCase = True
        .Pattern = "am[b|c|ç|d|f|g|h|j|k|l|m|p|q|s|t|v|w|x|z]"
        ReplaceConsonnas = .Replace(Buffer, "@")
    End With
End Function


il ne te reste plus ensuite qu'a appeler cette fonction.....

Jallais oublier ! pour que cela fonctionne, tu dois aller dans les references :
Projet > References
Et Cocher 'Microsoft VBScript Regular Expressions 5.5'

voila voila

By Renfield

[mailto:thomas_reynald@msn.com thomas_reynald@msn.com]

Aucune touche n'a ete blessee lors de la saisie de ce texte.......... ;)
0

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

Posez votre question
nicolas_mendoza Messages postés 15 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 21 février 2004
26 déc. 2003 à 14:24
Salut Renfield

Merci pour tes infos. Mais je voudrais te demander encore qqch si ca ne te derange pas!!!!!
j'ai inserer les partie que tu m'a donne de la maniere suivante(voir prog ci-dessous).
Dans mon fichier texte je met :
"ample,,amitie,,ambiance"
Normalement je devrai avoir en sortie
"@ple,,amitie,@biance"
mais au contraire j'ai
"
ample,,amitie,,ambiance" (il y a une ligne vide en plus et pas de @)
je ne comprend pas tres bien la ou j'ai faux, si tu pouvais m'aider, desole je debute.
merci
nico

Public NomFichier As String
Const CSN = "b,c,ç,d,f,g,h,j,k,l,m,p,q,s,t,v,,w
----------------------------------------------------------
Private Sub test_Click()

NomFichier = Repertoire.Path & "" & Fichiers.FileName

chemin = NomFichier
Dim fichier As String
Dim ligne As String
Dim Consonnas() As String
Consonnas = Split(CSN, ",")


Open chemin For Input As #1
While Not EOF(1)
Line Input #1, ligne
fichier = fichier & vbCrLf & ligne
Wend
Close #1

ReplaceConsonnas ("am")

Kill chemin

Open chemin For Output As #1
Print #1, fichier


Close #1


End Sub
-----------------------------------------------------------
Public Function ReplaceConsonnas(ByVal Buffer As String) As String
Dim reg As New RegExp
With reg
.MultiLine = True
.Global = True
.IgnoreCase = True
.Pattern = "am[b|c|d|d|f|g|h|j|k|l|m|p|q|s|t|v|w|x|z]"
ReplaceConsonnas = .Replace(Buffer, "@")
End With
End Function
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
26 déc. 2003 à 14:44
voila le code modifié...

Private Sub test_Click()
    chemin = App.Path & "\test.txt"

    Dim fichier As String
    Dim ligne As String

    Dim Canal As Byte
    Canal = FreeFile
    Open chemin For Input As #Canal
    While Not EOF(Canal)
        Line Input #Canal, ligne
        fichier = fichier & vbCrLf & ligne
    Wend
    Close #Canal

    fichier = ReplaceConsonnas(fichier)

    Canal = FreeFile
    Open chemin For Output As #Canal
    Print #Canal, fichier
    Close #Canal
End Sub

Public Function ReplaceConsonnas(ByVal Buffer As String) As String
    Dim Reg As New RegExp, Match As Match
    Dim Ret As String, LastStart As Long
    With Reg
        .MultiLine = True
        .Global = True
        .IgnoreCase = True
        .Pattern = "(am)([b|c|d|d|f|g|h|j|k|l|m|p|q|s|t|v|w|x|z])"
        For Each Match In Reg.Execute(Buffer)
            Ret = Ret & Mid$(Buffer, LastStart + 1, Match.FirstIndex - LastStart) & "@" & Match.SubMatches(1)
            LastStart = Match.FirstIndex + Match.Length
        Next Match
        ReplaceConsonnas = Ret & Mid$(Buffer, LastStart + 1)
    End With
End Function

By Renfield

[mailto:thomas_reynald@msn.com thomas_reynald@msn.com]

Aucune touche n'a ete blessee lors de la saisie de ce texte.......... ;)
0
nicolas_mendoza Messages postés 15 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 21 février 2004
26 déc. 2003 à 15:03
merci enormement, ca marche trop bien.
Je vais essayer de comprendre ton programme et avancer plus loin, afin de faire un prog qui tranforme tout un texte en phoneme :-)
chau chau
0
nicolas_mendoza Messages postés 15 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 21 février 2004
26 déc. 2003 à 15:03
merci enormement, ca marche trop bien.
Je vais essayer de comprendre ton programme et avancer plus loin, afin de faire un prog qui tranforme tout un texte en phoneme :-)
chau chau
0
nicolas_mendoza Messages postés 15 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 21 février 2004
26 déc. 2003 à 16:31
resalut

desole de t'embeter une autre fois, j'ai essayer de faire un test avec le cas du "s" et du "en" (dans le prog ci dessous) cad dire tester les lettres des deux cote, ou avant la lettre. quand je le lance il me met une erreur au niveau de la ligne ou il est ecrit: "ret = ret & Mid$....."
pourtant ca me parait correct.
Qu'en penses tu??
a+

Private Sub test_Click()

chemin = Repertoire.Path & "" & Fichiers.FileName

Dim fichier As String
Dim ligne As String
Dim temp As String
Dim modif As String

Dim Canal As Byte
Canal = FreeFile
Open chemin For Input As #Canal
While Not EOF(Canal)
Line Input #Canal, ligne
fichier = fichier & vbCrLf & ligne
Wend
Close #Canal

temp = "[i](en)" 'je teste avant "en" si c'est un i je remplace "en" par un ")"
modif = ")"
fichier = ReplaceConsonnas(fichier, temp, modif)
temp = "([a|e|i|o|u|y])(s)([a|e|i|o|u|y])" 'je test "s" pour la remplacer en "z" si ll est entoure de voyelles
modif = "z"
fichier = ReplaceConsonnas(fichier, temp, modif)
temp = "(am)([b|c|d|d|f|g|h|j|k|l|m|p|q|s|t|v|w|x|z])" 'je teste apres "am"
modif = "@"
fichier = ReplaceConsonnas(fichier, temp, modif)

Canal = FreeFile
Open chemin For Output As #Canal
Print #Canal, fichier
Close #Canal

End Sub

Public Function ReplaceConsonnas(ByVal Buffer As String, temp As String, modif As String) As String

Dim Reg As New RegExp, Match As Match
Dim Ret As String, LastStart As Long
With Reg
.MultiLine = True
.Global = True
.IgnoreCase = True
.Pattern = temp
For Each Match In Reg.Execute(Buffer)
Ret = Ret & Mid$(Buffer, LastStart + 1, Match.FirstIndex - LastStart) & modif & Match.SubMatches(1)
LastStart = Match.FirstIndex + Match.Length
Next Match
ReplaceConsonnas = Ret & Mid$(Buffer, LastStart + 1)
End With
End Function
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
26 déc. 2003 à 17:32
Je suis content de voir que tu as cherché a comprendre le fnctionnement de ma fonction !! pour preuve, tu l'as personnalisée !!

Vraiment Bravo !!

Je l'ai de nouveau modifiée, elle devris te convenir :

Public Function RegReplace(ByVal Buffer As String, Pattern As String, ReplaceString As String, ByVal SubsetToReplace As Integer) As String
    Dim Reg As New RegExp, Match As Match
    Dim Ret As String, LastStart As Long
    Dim i As Byte
    With Reg
        .MultiLine = True
        .Global = True
        .IgnoreCase = True
        .Pattern = Pattern
        For Each Match In Reg.Execute(Buffer)
            Ret = Ret & Mid$(Buffer, LastStart + 1, Match.FirstIndex - LastStart)
            For i = 0 To Match.SubMatches.Count - 1
                If i <> SubsetToReplace Then
                    Ret = Ret & Match.SubMatches(i)
                Else
                    Ret = Ret & ReplaceString
                End If
            Next i
            LastStart = Match.FirstIndex + Match.Length
        Next Match
        RegReplace = Ret & Mid$(Buffer, LastStart + 1)
    End With
End Function

Private Sub Command1_Click()
    MsgBox RegReplace("le ciel est bien noir, ce soir.", "(i)(en)", ")", 1)
    MsgBox RegReplace("Vous trouverez surement cela très nase !", "([a|e|i|o|u|y])(s)([a|e|i|o|u|y])", "Z", 1)
    MsgBox RegReplace("ample , ambitieux, amour", "(am)([b|c|d|d|f|g|h|j|k|l|m|p|q|s|t|v|w|x|z])", "@", 0)
End Sub


By Renfield

[mailto:thomas_reynald@msn.com thomas_reynald@msn.com]

Aucune touche n'a ete blessee lors de la saisie de ce texte.......... ;)
0
nicolas_mendoza Messages postés 15 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 21 février 2004
26 déc. 2003 à 22:47
Salut
C re moi. Jviens de regarder le prog que tu as fait, niquel, j'ai essaye de l'adapter a ce que je veux faire, c a dire au lieu d'afficher qqch dans une Msgbox je modifier le fichier (en rouge ci dessous). mais ca ne marche pas et la je capte vraiment pas pourquoi!!!!!!!!
si tu peux mfiler un coup de main.
merci
chau chau

Private Sub test_Click()

chemin = Repertoire.Path & "" & Fichiers.FileName

Dim fichier As String
Dim ligne As String
Dim temp As String
Dim modif As String

Dim Canal As Byte
Canal = FreeFile
Open chemin For Input As #Canal
While Not EOF(Canal)
Line Input #Canal, ligne
fichier = fichier & vbCrLf & ligne
Wend
Close #Canal

fichier RegReplace(fichier, "(i)(en)", ")", 1)

fichier RegReplace(fichier, "([a|e|i|o|u|y])(s)([a|e|i|o|u|y])", "Z", 1)
fichier RegReplace(fichier, "(am)([b|c|d|d|f|g|h|j|k|l|m|p|q|s|t|v|w|x|z])", "@", 0)

Canal = FreeFile
Open chemin For Output As #Canal
Print #Canal, fichier
Close #Canal
End Sub

Public Function RegReplace(ByVal Buffer As String, Pattern As String, ReplaceString As String, ByVal SubsetToReplace As Integer) As String
Dim Reg As New RegExp, Match As Match
Dim Ret As String, LastStart As Long
Dim i As Byte
With Reg
.MultiLine = True
.Global = True
.IgnoreCase = True
.Pattern = Pattern
For Each Match In Reg.Execute(Buffer)
Ret = Ret & Mid$(Buffer, LastStart + 1, Match.FirstIndex - LastStart)
For i = 0 To Match.SubMatches.Count - 1
If i <> SubsetToReplace Then
Ret = Ret & Match.SubMatches(i)
Else
Ret = Ret & ReplaceString
End If
Next i
LastStart = Match.FirstIndex + Match.Length
Next Match
RegReplace = Ret & Mid$(Buffer, LastStart + 1)
End With
End Function
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
26 déc. 2003 à 23:07
lol

fichier = RegReplace(fichier, "(i)(en)", ")", 1)

By Renfield

[mailto:thomas_reynald@msn.com thomas_reynald@msn.com]

Aucune touche n'a ete blessee lors de la saisie de ce texte.......... ;)
0
nicolas_mendoza Messages postés 15 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 21 février 2004
26 déc. 2003 à 23:22
quel nul je suis lol
merci ca marche niquel
0
Rejoignez-nous