Expressions régulières

Signaler
Messages postés
29
Date d'inscription
mercredi 16 décembre 2009
Statut
Membre
Dernière intervention
24 août 2012
-
Messages postés
29
Date d'inscription
mercredi 16 décembre 2009
Statut
Membre
Dernière intervention
24 août 2012
-
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

Messages postés
239
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
27 août 2012
5
tu utilises des .doc ou des .docx?
Messages postés
29
Date d'inscription
mercredi 16 décembre 2009
Statut
Membre
Dernière intervention
24 août 2012

merci Tupad pour votre réponse, j'utilise des .docx
Messages postés
239
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
27 août 2012
5
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.
Messages postés
29
Date d'inscription
mercredi 16 décembre 2009
Statut
Membre
Dernière intervention
24 août 2012

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 ???
Messages postés
239
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
27 août 2012
5
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.
Messages postés
29
Date d'inscription
mercredi 16 décembre 2009
Statut
Membre
Dernière intervention
24 août 2012

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)??