Vb.Net et BlocNotes contre Windev. [Résolu]

Messages postés
200
Date d'inscription
mardi 17 octobre 2006
Dernière intervention
24 mars 2012
- - Dernière réponse : Le newbie
Messages postés
200
Date d'inscription
mardi 17 octobre 2006
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.
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
467
Date d'inscription
lundi 24 juin 2002
Dernière intervention
9 mars 2011
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 90 internautes nous ont dit merci ce mois-ci

Commenter la réponse de TeBeCo
Messages postés
467
Date d'inscription
lundi 24 juin 2002
Dernière intervention
9 mars 2011
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 90 internautes nous ont dit merci ce mois-ci

Commenter la réponse de TeBeCo
Messages postés
200
Date d'inscription
mardi 17 octobre 2006
Dernière intervention
24 mars 2012
2
0
Merci
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.
@+
Commenter la réponse de Le newbie
Messages postés
200
Date d'inscription
mardi 17 octobre 2006
Dernière intervention
24 mars 2012
2
0
Merci
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.
Commenter la réponse de Le newbie
Messages postés
200
Date d'inscription
mardi 17 octobre 2006
Dernière intervention
24 mars 2012
2
0
Merci
Salut TeBeCO.


Merci pour tous ces détails. Ca marche nickel. @++
Commenter la réponse de Le newbie

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.