Vb.Net et BlocNotes contre Windev.

Résolu
Le newbie Messages postés 200 Date d'inscription mardi 17 octobre 2006 Statut Membre Dernière intervention 24 mars 2012 - 20 juin 2007 à 12:12
Le newbie Messages postés 200 Date d'inscription mardi 17 octobre 2006 Statut Membre Dernière intervention 24 mars 2012 - 25 juin 2007 à 08:57
Bonjour à tous,

Je voudrais exporter le contenu d'un fichier *.fic de Windev  dans le bloc notes mais bien sur sans les caractères spéciaux



Si quelqu'un connait une procédure pour enlever tous les caractères spéciaux

J'ai bien pensé au remove mais j'ai l'impression que je passerais plus de temps à vérfier les caractères qu'à écrire.

Je suis en VB 2003 .

Merci de votre aide à tous.

5 réponses

TeBeCo Messages postés 467 Date d'inscription lundi 24 juin 2002 Statut Membre Dernière intervention 9 mars 2011
20 juin 2007 à 13:33
tu ouvre ton fichier .fic avec vb.net en mode lecture et la ya 2 choix qui se présente (perso je conseillerais la 2ieme car la premiere est limité par la taille du fichier) :
* soit tu lit tout le fichier d'une seul bloc et tu le met dans une variable de type String disons "sFichier" ensuite tu remplace les caractère genants dedans :
sFichier = sFichier.Replace(" ","")
(ca va par exemple virer tous les espaces)

* soit tu ouvres 2 flux :
> 1 en lecture sur le .fic
> 1 en ecriture vers le nouveau fichier
puis tu lit les caractère un à un du .fic et tu test si oui ou non il est genant si non : tu ecris dans l'autre, si oui tu passe au suivant c'est pas bien compliqué
par exemple tu créé un arraylist (en vb2005 sous .net 2 et plus je t'aurais dit d'utiliser une liste generique vive les mise a jour ... ya deja un framework 3.5)
tu le remplis avec touuut les caractère interdit
et apres :

do until (ton flux d'entrée pas en EOF)
   if Not arCaractereInterdit.contains(MonCaractereLu) Then
      Ecriturecaractere
   end if
loop

(en pensant a bien refermé les 2 flux)

j'ai compris ton pb comme ca peut etre qu'une erreur de communication est a l'origine de l'écart de réponse
TeBeCo
3
TeBeCo Messages postés 467 Date d'inscription lundi 24 juin 2002 Statut Membre Dernière intervention 9 mars 2011
20 juin 2007 à 18:14
les fameux "chiffre" c'est les valeurs des octet du fichier :p
il te faut utiliser le namesapce "system.text.encoding" pour les transformer en caractère vu que chaque "enconding" marche pas de la meme maniere c'est pour ca que tu avais des chiffre c'est le contenu reel du disue dur

dim tbData() as Byte
> remplissage de tbData avec les "chiffre" (tu peux y aller franchement par paquet de plusieur millier je dirai 4096 sans trop de pb)

ensuite decodage
dim sChaine as string = system.text.enconding.Default.GetString(tbData)

puis un .remove dessus car ya que 4096 caractere ca passera
puis une fois la chaine "épurée" on la reencode avec LE MÊME</gras> enconding :
dim tbDataEpurees() as Byte = System.Text.Encoding.Default.GetBytes(sChaine)

ecriture du tableau d'octet dans le fichier via le tableau du genre :
(mon flux)..write(tbDataEpurees, 0, tbDataEpurees.Length)

2ieme methode (mais uniquemnt si tu travail sur un enconding a 1 octet par caractère) :
ton tableau de caractère au lieu d'etre de type :
dim tbMauvaisChar() as string
avec "a 8 ( ..." dedans
tu le fait comme ca :
dim tbMauvaisCharByte() as Byte
et dedans tu met par exemple :
tbMauvaisCharByte(0) = system.text.encoding.Default.GetBytes()(0)
(le "(0)" de la fin c'est pour recup le seul item du tableau renvoyé par "getbytes")
et apres te suffit de comparer des octet en eux plutot que des char

IMPORTANT :
te trompe pas d'enconding il en existe plusieur dans .net de tête :
UTF8 UTF16 ASCII DEFAULT UNICODE

TeBeCo
3
Le newbie Messages postés 200 Date d'inscription mardi 17 octobre 2006 Statut Membre Dernière intervention 24 mars 2012 2
20 juin 2007 à 14:06
Salut TeBeCo,

Tout d'abbord merci de ta réponse qui colle parfaitement.
C'est ce que je pensais quand je disais "J'ai bien pensé au remove mais j'ai l'impression que je passerais plus de temps à vérfier les caractères qu'à écrire"

Je vais donc me jeter dans cette horrible procédure de comparaison de chaque caractère. Je dis horrible car certains fichiers windev font 600 Mo.

Merci encore.
@+
0
Le newbie Messages postés 200 Date d'inscription mardi 17 octobre 2006 Statut Membre Dernière intervention 24 mars 2012 2
20 juin 2007 à 16:15
Délsolé. un autre problème. Il est impossible de faire comme tu le pensais.

Si je passe caractère/caractère, mon fichier est composé de chiffres et je n'ai plus les données.
Si je lis par ligne, j'ai les valeurs.
Les caractères spéciaux ne se remplacent pas. En mettant une msgbox de la  valeur de la ligne et de sa taille, j'ai parfois 17690, "". Il ne l'interprète pas donc les caractères spéciaux ne virent pas.

Il y a -t-il une autre solution ?

Ma procédure :

Dim

SR
As
New StreamReader(chemin & "\fic\patients.fic")

Dim SW
As
New StreamWriter(chemin & "\REPRISE_STD\patients.txt")

Do
Until SR.Peek = -1

MsgBox(SR.ReadLine.Length & SR.ReadLine.ToString)

If InStr(1, SR.ReadLine, Chr(10))
ThenSR.ReadLine.Replace(Chr(10), "")

ElseIf InStr(1, SR.ReadLine, Chr(13))
ThenSR.ReadLine.Replace(Chr(13), "")

ElseIf InStr(1, SR.ReadLine, "-")
ThenSR.ReadLine.Replace("-", "")

ElseIf InStr(1, SR.ReadLine, "#")
ThenSR.ReadLine.Replace("#", "")

ElseIf InStr(1, SR.ReadLine, " ")
ThenSR.ReadLine.Replace(" ", "")

End
IfSW.Write(SR.ReadLine)

SW.Flush()

LoopSR.Close()

SW.Flush()

SW.Close()

Catch ex
As ExceptionMsgBox(ex.Message)

Me.Close()

End
Try

Merci de votre aide à tous.
0

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

Posez votre question
Le newbie Messages postés 200 Date d'inscription mardi 17 octobre 2006 Statut Membre Dernière intervention 24 mars 2012 2
25 juin 2007 à 08:57
Salut TeBeCO.


Merci pour tous ces détails. Ca marche nickel. @++
0