Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
450 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [ASP.Net] .Net, Fichiers et RegExp

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ASP.Net] .Net, Fichiers et RegExp

n°1493221
backdafuck​up
Back to da old skool
Posté le 19-12-2006 à 10:59:04  profilanswer
 

Bonjour,
 
J'ai un souci de regexp en fait. De remplacement.
 
Ce que je fais c'est que j'ouvre un fichier html contenant des liens de la forme :  
 
file:///C:\Documents and Settings\...\...\...\Links\nomfichier.ext
 
Et moi, je voudrais remplacer ça par :
 
./Links/nomfichier.ext
 
Donc j'ai pensé aux regexp...
 
Voici mon code :  
 
(Mon pattern de regexp semble être valide)
 

Code :
  1. Dim CheminBis As String = Server.MapPath("output/" & PureFileName & "_sortie.html" )
  2.             Dim fs As New System.IO.FileStream(CheminHTM, IO.FileMode.Open, IO.FileAccess.Read)
  3.             Dim fwrite As New System.IO.FileStream(CheminBis, IO.FileMode.OpenOrCreate, IO.FileAccess.Write)
  4.             Dim sR As New System.IO.StreamReader(fs)
  5.             Dim sM As String = sR.ReadLine
  6.             Dim sw As New System.IO.StreamWriter(fwrite)
  7.             Dim i As Integer = 0
  8.             Dim ChrTmp As String = Nothing
  9.             'Lecture des lignes du fichier
  10.             Do Until sM = ""
  11.                 For i = 1 To Len(sM)
  12.                     If Asc(Mid(sM, i, 1)) = 63 Then
  13.                         'Récupération du caractère "saut de paragraphe" généré par InDesign
  14.                         ChrTmp = Mid(sM, i, 1)
  15.                     End If
  16.                 Next
  17.                 'Remplacement du caractère "saut de paragraphe"
  18.                 sM = Replace(sM, ChrTmp, "<br />" )
  19.                 'Remplacement des liens absolus par des liens relatifs
  20.                 Dim ereg_ChWin As New Regex("file:\/\/\/[a-zA-Z]:\/(.+\/)+Links\/" )
  21.                 Dim ereg_ChWin2 As New Regex("file:\/\/\/[a-zA-Z]:\\(.+\\)+Links\\", RegexOptions.Singleline)
  22.                 Dim ereg_ChWin3 As New Regex("[a-zA-Z]:\/(.+\/)+Links\/" )
  23.                 Dim ereg_ChWin4 As New Regex("[a-zA-Z]:\\(.+\\)+Links\\" )
  24.                 Dim ereg_ChNet As New Regex("\\\\(.+\\)+Links\\" )
  25.                 'ereg_ChWin.Replace(sM, "./Links/" ) Mis en commentaire pour l'instant
  26.                 ereg_ChWin2.Replace(sM, ".\Links\" )
  27.                 'ereg_ChWin3.Replace(sM, "./Links/" ) Mis en commentaire pour l'instant
  28.                 'ereg_ChWin4.Replace(sM, ".\Links\" ) Mis en commentaire pour l'instant
  29.                 'ereg_ChNet.Replace(sM, ".\Links\" ) Mis en commentaire pour l'instant
  30.                 'sM = Replace(sM, "file:///@#FILELINK#@", "." ) Ancien remplacement "à la main"
  31.                 'Ecriture dans le fichier de sortie
  32.                 sw.WriteLine(sM)
  33.                 'Lecture ligne suivante
  34.                 sM = sR.ReadLine()
  35.             Loop
  36.             sw.Close()
  37.             sR.Close()


 
Du coup rien n'est trouvé, et le remplacement ne se fait pas...
 
J'aimerais bien savoir ce qui cloche, mais là je vois pas....


Message édité par backdafuckup le 19-12-2006 à 11:00:58
mood
Publicité
Posté le 19-12-2006 à 10:59:04  profilanswer
 

n°1493365
backdafuck​up
Back to da old skool
Posté le 19-12-2006 à 13:32:35  profilanswer
 

allez regrimpe petit topic :bounce:


Message édité par backdafuckup le 19-12-2006 à 13:32:49
n°1493371
masklinn
í dag viðrar vel til loftárása
Posté le 19-12-2006 à 13:34:21  profilanswer
 

Comment on détermine quel est le "répertoire courant" (pour construire un chemin relatif au lieu de l'absolu)?

 

Et accessoirement, il serait possible que tu postes un petit batch des liens que tu as actuellement (histoire d'avoir un sample des trucs que tu veux, parce que la dernière fois que moinmoin a demandé une regex on a mis 3h a lui extraire les vraies spécs du nez)

 

Et accessoirement tu pourrais m'expliquer pourquoi tu préfixes tes noms de patterns avec "ereg" alors que

  • Ca n'a de sens qu'en PHP (et encore)
  • Il me semble que les Regex .Net sont des PCRE, donc correspondant au "package" php `preg` et non à `ereg`


Message édité par masklinn le 19-12-2006 à 13:40:14

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1493447
backdafuck​up
Back to da old skool
Posté le 19-12-2006 à 14:53:42  profilanswer
 

Voilà des exemples de liens que j'ai dans le fichier
 
file:///C:/Documents%20and%20Settings/lenomdemoncompte/Bureau/Training%20Manual/v2/Dossier%20ATC%20TM%20Final%20A4/Links/P07-08%20PROCEDURES%20INITIALIZATION.doc
 
C:\Documents and Settings\lenomdemoncompte\Bureau\Training Manual\v2\Dossier ATC TM Final A4\Links\photo ATR 72-500modifie.jpg
 
C:\Documents and Settings\lenomdemoncompte\Bureau\Training Manual\v2\Dossier ATC TM Final A4\Links\FOND~sep~COU.jpg
 
Et voici ce que j'aimerais à la place
 
./Links/photo ATR 72-500modifie.jpg
./Links/FOND~sep~COU.jpg
 
etc etc...
 
J'ai bon là ?
 
Et le "ereg" c'est juste des noms de variable en fait....
Ca ne symbolise rien du tout...
Je peux les appeler toto1 toto2 et toto3 si tu veux ^^
 
Merci d'avance ;)

n°1493460
masklinn
í dag viðrar vel til loftárása
Posté le 19-12-2006 à 15:07:21  profilanswer
 

Donc faut juste transformer le chemin à partir de "links" [:petrus dei]

 

C'est pas plus compliqué que ça [:petrus dei]


Message édité par masklinn le 19-12-2006 à 15:08:13

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1493482
backdafuck​up
Back to da old skool
Posté le 19-12-2006 à 15:18:11  profilanswer
 

Ben oui c'est juste ça !!
 
T'as vu mes patterns ? Ils sont pas bons ?

n°1493500
masklinn
í dag viðrar vel til loftárása
Posté le 19-12-2006 à 15:26:52  profilanswer
 

Ils sont surtout ultra compliqués pour ce que tu veux faire.
 
J'ai jamais fait de VB, mais normalement ce dont tu as besoin devrait ressembler à ça:

Code :
  1. Dim pattern  As Regex = New Regex(".+\\([^\\]+)\\([^\\]+)$" )
  2. output = pattern.replace(input, "./$1/$2" )


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1493529
backdafuck​up
Back to da old skool
Posté le 19-12-2006 à 15:34:20  profilanswer
 

En fait voilà un exemple de ligne de mon fichier :  
 
 

<div><img src="file:///C:\Documents and Settings\moncompte\Bureau\Training Manual\v2\Dossier ATC TM Final A4\Links\photo ATR 72-500modifie.jpg" width=


 
Et je veux :  
 

<div><img src=".\Links\photo ATR 72-500modifie.jpg" width=


 
Ca va toujours dans ton sens ? Parce que si je comprends bien ta regexp, je suis pas sur du résultat :(

Message cité 1 fois
Message édité par backdafuckup le 19-12-2006 à 15:34:57
n°1493538
backdafuck​up
Back to da old skool
Posté le 19-12-2006 à 15:37:38  profilanswer
 

Ah ben je viens de tester avec une petite appli de test de regex, et ça donne le bon résultat...
 
T'es trop fort....
 
Par contre, je comprends rien à ta regexp....

n°1493547
backdafuck​up
Back to da old skool
Posté le 19-12-2006 à 15:42:40  profilanswer
 

Alors ça remplace, mais ça me bousille de l'html avec, donc doit y avoir un souci...
 
j'ai fait ça :  

Code :
  1. Dim ereg_ChWin As New Regex(".+\\([^\\]+)\\([^\\]+)$" )
  2. sM = ereg_ChWin.Replace(sM, "./$1/$2" )


 
Et ça me bousille tout..

mood
Publicité
Posté le 19-12-2006 à 15:42:40  profilanswer
 

n°1493569
masklinn
í dag viðrar vel til loftárása
Posté le 19-12-2006 à 15:55:17  profilanswer
 

backdafuckup a écrit :

En fait voilà un exemple de ligne de mon fichier :

 


<div><img src="file:///C:\Documents and Settings\moncompte\Bureau\Training Manual\v2\Dossier ATC TM Final A4\Links\photo ATR 72-500modifie.jpg" width=

 

Et je veux :

 

<div><img src=".\Links\photo ATR 72-500modifie.jpg" width=

 

Ca va toujours dans ton sens ? Parce que si je comprends bien ta regexp, je suis pas sur du résultat :(


Tu transformes la re en:

Code :
  1. r'src="[^"]+\\([^\\"]+)\\([^\\"]+)"'


le remplacement ne change pas
Par contre fait gaffe à l'échappement des ", là c'est un string python donc pas besoin de les échapper, en VB je sais pas

backdafuckup a écrit :

Ah ben je viens de tester avec une petite appli de test de regex, et ça donne le bon résultat...

 

T'es trop fort....

 

Par contre, je comprends rien à ta regexp....


Je vais expliquer la première (ce qui se trouve du # à la fin de la ligne, sur chaque ligne, est un commentaire)

.+ # Prendre n'importe quel caractère de multiples fois
\\ # Dans la mesure où "\" est un metacaractère dans les REs, "\\" permet de matcher un "\"
( # Ouvre un "groupe de match" (pour pouvoir récupérer le contenu dans $1 - $99)
[^\\]+ # Matche n'importe quelle suite de caractères *sauf* "\", donc ça ne matche que le nom d'un répertoire/fichier entre deux séparateurs
) # ferme le groupe de match
\\
([^\\]+)
$ # Matche une fin de chaîne, très bien pour matcher juste sur une string, par contre ne matche pas pour ton cas d'utilisation réel (enfin si mais ça fait des conneries quoi)


Après en terme d'efficacité, cette regex n'est pas terrible parce qu'elle backtrack beaucoup, mais bon c'est pas super grave.


Message édité par masklinn le 19-12-2006 à 15:56:59

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1493621
backdafuck​up
Back to da old skool
Posté le 19-12-2006 à 16:58:22  profilanswer
 

T'es un boss, franchement merci...
 
Ca marche niquel...
 
A+

n°1493801
Tamahome
⭐⭐⭐⭐⭐
Posté le 19-12-2006 à 22:05:35  profilanswer
 

du VB [:hahaguy]


Message édité par Tamahome le 19-12-2006 à 22:05:44

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [ASP.Net] .Net, Fichiers et RegExp

 

Sujets relatifs
[ASP.net] Envoyer les données du "CreateUserWizard" dans ma DBobtenir les fichiers d'un répertoire en shell
Insertion plusieurs fichiers flv.Probleme dataset, sgbd acces sur VB.NET...
[ASP .NET] Retour à l'endroit de la page où on était après un postback[.NET + JAVASCRIPT] TreeView, Pourquoi ne réagit t'il pas ?
[ASP.NET C#] Problème de DLL dans un site web[PHP : facile je pense] Fichiers en php et incrementation de variables
Plus de sujets relatifs à : [ASP.Net] .Net, Fichiers et RegExp


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR