Invité tjrsNRV Posté(e) le 28 décembre 2010 Posté(e) le 28 décembre 2010 bonjour, Pour le nettoyeur.dvb, je cherches à remplacer : {\fArial|b0|i0|c204|p34;EC Terminaux\PAi:\fArial|b0|i0|c0|p34;2.90\fArial|b0|i0|c204|p34;/11\fArial|b0|i0|c0|p34;2.90\fArial|b0|i0|c204|p34;\P0.020 m³/h AC DN\fArial|b0|i0|c161|p34;15} par EC Terminaux\PAi:2.90/112.90\P0.020 m³/h AC DN15 ça permettrait d'enlever le forçage des textes multilignes. J'ai commencé avec ça mais j'arrive pas à définir l'algorithme, c'est pas forcément un problème de code, mais comment faire car les fArial peuvent être autre chose que du Arial, les autres valeurs aussi peuvent changer, et la longueur du texte aussi. Set objMTexte = ent strTexte = objMTexte.FieldCode strTexte = VBA.Replace(strTexte, "{\f", "") strTexte = VBA.Replace(strTexte, "}", "") objMTexte.TextString = strTexte sechanbask
(gile) Posté(e) le 28 décembre 2010 Posté(e) le 28 décembre 2010 Salut, Question difficile.Il faut aller chercher les points virgules suivants les accolades ouvrantes et supprimer tout ça (moins les \P si tu veux les conserver) plus l'accolade fermante correspondante.Mais ça n'est pas aussi simple, les chaînes utilisant des accolades, des anti-slashes, etc. demandent des traitements spéciaux. Une autre solution, peut-être plus simple consiste à utiliser VBScript.RegExp avec la méthode Replace. Je ne suis pas sûr de la syntaxe VBA (je ne pratique pas ce langage) mais ça devrait être quelque chose du genre : Dim str as String = "{\fArial|b0|i0|c204|p34;EC Terminaux\PAi:\fArial|b0|i0|c0|p34;2.90\fArial|b0|i0|c204|p34;/11\fArial|b0|i0|c0|p34;2.90\fArial|b0|i0|c204|p34;\\P0.020 m³/h AC DN\fArial|b0|i0|c161|p34;15}" Dim regEx as RegExpl = new RegExp regEx.IgnoreCase = false regEx.Global = true regEx.Multiline = true regEx.Pattern = "\\\\" str = regEx.Replace str "Ð" regEx.Pattern = "\\(\\[ACcFfHLlOopQTW])|\\[ACcFfHLlOopQTW][^\\;]*;|\\[ACcFfHLlOopQTW]" str = regEx.Replace str "$1" regEx.Pattern = "([^\\])\\S([^;]*)[/#\^]([^;]*);" str = regEx.Replace str "$1$2/$3" regEx.Pattern = "\\(\\S)|[\\](})|}" str = regEx.Replace str "$1$2" regEx.Pattern = "[\]({)|{" str = regEx.Replace str "$1" regEx.Pattern = "(\\[ACcFfHLlOopQSTW])|({)|(})" str = regEx.Replace str "\$1$2$3" regEx.Pattern = "Ð" str = regEx.Replace str "\\" Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 28 décembre 2010 Posté(e) le 28 décembre 2010 Mais VBA est en train de disparaître, il est temps de passer à .NET. .NET fournit des méthodes qui rendent ce type de choses plus aisées. Exemple, la méthode 'GetStrippedMtextContents' définie ci dessous retourne un chaîne qui correspond au contenu du Mtext débarrassé de tous ses formatages. C#using System.Text; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.EditorInput; using Autodesk.AutoCAD.Runtime; namespace StripMtextSample { public class StripMtext { private StringBuilder m_sb = null; public string GetStrippedMtextContents(MText mt) { m_sb = new StringBuilder(); mt.ExplodeFragments(new MTextFragmentCallback(FragmentCallback)); return m_sb.ToString(); } private MTextFragmentCallbackStatus FragmentCallback(MTextFragment fragment, object obj) { m_sb.Append(fragment.Text); return MTextFragmentCallbackStatus.Continue; } } } VBImports System.Text Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.DatabaseServices Imports Autodesk.AutoCAD.EditorInput Imports Autodesk.AutoCAD.Runtime Namespace StripMtextSample Public Class StripMtext Private m_sb As StringBuilder = Nothing Public Function GetStrippedMtextContents(mt As MText) As String m_sb = New StringBuilder() mt.ExplodeFragments(New MTextFragmentCallback(AddressOf FragmentCallback)) Return m_sb.ToString() End Function Private Function FragmentCallback(fragment As MTextFragment, obj As Object) As MTextFragmentCallbackStatus m_sb.Append(fragment.Text) Return MTextFragmentCallbackStatus.[Continue] End Function End Class End Namespace Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Invité tjrsNRV Posté(e) le 29 décembre 2010 Posté(e) le 29 décembre 2010 C'est bien le .net mais nous n'avons que VBA dans le 2007.Au pire, tu n'aurais pas la même chose en lisp ?
(gile) Posté(e) le 29 décembre 2010 Posté(e) le 29 décembre 2010 C'est bien le .net mais nous n'avons que VBA dans le 2007. Non, 2007 supporte très bien .NET. J'avais fait un truc en LISP ici. et tu trouveras là le LISP de Lee Mac dont je me suis inspiré pour le code VBA que j'ai tenté d'écrire (je pense qu'en VBA c'est cette piste la bonne). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Invité tjrsNRV Posté(e) le 5 janvier 2011 Posté(e) le 5 janvier 2011 merci pour ton lisp, je ne me rappelais même plus que je l'avais déjà utilisé !! sechanbask MERCI encore !
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant