Le newbie
Messages postés200Date d'inscriptionmardi 17 octobre 2006StatutMembreDernière intervention24 mars 2012
-
20 juin 2007 à 12:12
Le newbie
Messages postés200Date d'inscriptionmardi 17 octobre 2006StatutMembreDernière intervention24 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.
TeBeCo
Messages postés467Date d'inscriptionlundi 24 juin 2002StatutMembreDerniè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
TeBeCo
Messages postés467Date d'inscriptionlundi 24 juin 2002StatutMembreDerniè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
Le newbie
Messages postés200Date d'inscriptionmardi 17 octobre 2006StatutMembreDernière intervention24 mars 20122 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.
Le newbie
Messages postés200Date d'inscriptionmardi 17 octobre 2006StatutMembreDernière intervention24 mars 20122 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), "")