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

Le newbie 200 Messages postés mardi 17 octobre 2006Date d'inscription 24 mars 2012 Dernière intervention - 20 juin 2007 à 12:12 - Dernière réponse : Le newbie 200 Messages postés mardi 17 octobre 2006Date d'inscription 24 mars 2012 Dernière intervention
- 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
TeBeCo 467 Messages postés lundi 24 juin 2002Date d'inscription 9 mars 2011 Dernière intervention - 20 juin 2007 à 13:33
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

Merci TeBeCo 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de TeBeCo
Meilleure réponse
TeBeCo 467 Messages postés lundi 24 juin 2002Date d'inscription 9 mars 2011 Dernière intervention - 20 juin 2007 à 18:14
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

Merci TeBeCo 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de TeBeCo
Le newbie 200 Messages postés mardi 17 octobre 2006Date d'inscription 24 mars 2012 Dernière intervention - 20 juin 2007 à 14:06
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
Le newbie 200 Messages postés mardi 17 octobre 2006Date d'inscription 24 mars 2012 Dernière intervention - 20 juin 2007 à 16:15
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
Le newbie 200 Messages postés mardi 17 octobre 2006Date d'inscription 24 mars 2012 Dernière intervention - 25 juin 2007 à 08:57
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.