Expressions régulières

zakariabamou Messages postés 28 Date d'inscription mercredi 16 décembre 2009 Statut Membre Dernière intervention 24 août 2012 - 8 août 2012 à 20:54
zakariabamou Messages postés 28 Date d'inscription mercredi 16 décembre 2009 Statut Membre Dernière intervention 24 août 2012 - 11 août 2012 à 19:04
bonjour a tout le monde, je cherche a développer un code en C# qui me permet d'utiliser les expressions régulières pour trouver des mots (par exemple ayant la forme PM-ASK-2134) dans un document Word, le code est facile pour des fichiers textes (.txt) mes pour un document Word c'est différent, SVP si qelqu'un a une idée je suis coinsé depuis 2 semaines. merci a l'avance.
voila mon code: (il permet de trouver la chaine "PM-ASK-2134" dans un document word mais je cherche a trouver toutes les ocurences de ce type en utilisant une expression régulière):

object missing = System.Reflection.Missing.Value;
object fileName = @textBox1.Text.ToString();
Microsoft.Office.Interop.Word.Application msWord = new Microsoft.Office.Interop.Word.Application();
msWord.Visible = false;
Microsoft.Office.Interop.Word.Document nvDoc;
nvDoc = msWord.Documents.Open(ref fileName, ref missing, ref missing,
ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing,
ref missing);

nvDoc.Application.Selection.Find.ClearFormatting();
Regex Tag = new Regex(@"SC-([\w\-.]+)-([\S\-.]+)");
nvDoc.Application.Selection.Find.Text = "PM-ASK-2134";

while (nvDoc.Application.Selection.Find.Execute(
ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing))
{
MessageBox.Show(nvDoc.Application.Selection.Find.Text);
}
// else MessageBox.Show("Text not found.");


// Fermer le document
nvDoc.Close(ref missing, ref missing, ref missing);

// Fermeture de word
msWord.Quit(ref missing, ref missing, ref missing);

6 réponses

Tupad Messages postés 239 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 27 août 2012 5
9 août 2012 à 09:31
tu utilises des .doc ou des .docx?
0
zakariabamou Messages postés 28 Date d'inscription mercredi 16 décembre 2009 Statut Membre Dernière intervention 24 août 2012
9 août 2012 à 13:15
merci Tupad pour votre réponse, j'utilise des .docx
0
Tupad Messages postés 239 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 27 août 2012 5
9 août 2012 à 14:15
Il faut savoir que le format .docx est en réalité un package renfermant des fichiers xml, dont seulement certains contiennent le texte.

Tu peux très bien extraire les fichiers xml de ce package et les traiter séparément et ce sans microsoft office installé sur la machine.
0
zakariabamou Messages postés 28 Date d'inscription mercredi 16 décembre 2009 Statut Membre Dernière intervention 24 août 2012
10 août 2012 à 00:40
d'accord c'est intéressant j'ai trouver qlq chose qui ressemble a ça:
//récupérer la partie principale du document OpenXML au travers d'un objet PackagePart
//type de contenu pour la partie principale
const String officeDocRelType = @"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument";

PackagePart mainPart = null;
Uri documentUri = null;
//on récupère la partie contenant les propriétés
foreach (PackageRelationship relationship in officePackage.GetRelationshipsByType(officeDocRelType))
{
// Il n'y a qu'une seule partie de type partType dans le package
documentUri = PackUriHelper.ResolvePartUri(new Uri("/", UriKind.Relative), relationship.TargetUri);
mainPart = officePackage.GetPart(documentUri);
break;
}

// en suite charger le contenu de cette partie dans un objet XmlDocument et //y rechercher un mot grâce à la méthode Contains:

if (mainPart != null)
{
//chargement de la partie dans un XmlDocument
XmlDocument doc = new XmlDocument();
doc.Load(mainPart.GetStream());

//sensible à la casse
if (doc.DocumentElement.InnerText.Contains(textBoxRechercher.Text))
{
MessageBox.Show("Texte trouvé dans le document");
}
else
{
MessageBox.Show("Impossible de trouver le texte dans le document");
}
}

//mais j'ai toujours le problème comment retrouver les occurrences d'une tag (BLABLA-TOTO-2135) a l'aide d'une expression régulière ???
0

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

Posez votre question
Tupad Messages postés 239 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 27 août 2012 5
10 août 2012 à 10:37
Tu dois remplacer le code
//sensible à la casse 
if (doc.DocumentElement.InnerText.Contains(textBoxRechercher.Text)) 
{ 
MessageBox.Show("Texte trouvé dans le document"); 
} 
else 
{ 
MessageBox.Show("Impossible de trouver le texte dans le document"); 
} 


Par celui d'appel à une regex.
0
zakariabamou Messages postés 28 Date d'inscription mercredi 16 décembre 2009 Statut Membre Dernière intervention 24 août 2012
11 août 2012 à 19:04
Chapeau,et bien que dire à par un grand merci à toi Tupad,
j'ai une autre question, comment récupérer l'explorateur de document d'un .docx (ou bien les titres des paragraphes)??
0
Rejoignez-nous