Membres inscrits :2359
Membres en ligne : 0
Invités en ligne : 3


|
Conversation (Résolue) : Supprimer le CRLF d'un fichier xml |
maspero (Membre)
Inscrit le : 19-05-2009
Messages: 81
Snippets: 0
Tutoriels: 0
Hors ligne |
Salut a tous, c'est encore moi 
Voila, j'ai un fichier de type TAP que je décode en fichier xml à l'aide d'un programme. Je modifie le xml et veut le réencoder en TAP. Seul probleme, je dois supprimer le "windows-specific line endings" (crlf) pour que le réencodage fonctionne.
Est ce que qq connait une méthode pour effectuer cette manip'.
Merci beaucoup.
|
|
guyothomas (Membre)
Inscrit le : 05-06-2008
Messages: 66
Snippets: 0
Tutoriels: 0
Hors ligne |
Salut Maspero,
Si il permet d'ouvrir ce type de fichier que je ne connais pas, Notepad++ (http://notepad-plus.sourceforge.net/fr/site.htm) permet de faire ce genre de chose. Dans paramétrage > Préférences, onglet Nouveau document/répertoire, tu peux choisir l'encodage pour windows, Mac, ou Unix.
(d'ailleurs, Mac n'est pas sous unix??)
Bon courage en Roumanie, Thomas.
|
|
maspero (Membre)
Inscrit le : 19-05-2009
Messages: 81
Snippets: 0
Tutoriels: 0
Hors ligne |
Salut Thomas,
merci pour ta réponse si rapide. Effectivement je peux le faire via notepad ++, mais en fait, je crée un programme qui me permet d'éditer ces fichiers TAP, je veux donc que le décodage et le réencodage se fasse en arriere plan de mon programme et que cela soit totalement automatisé. Tu comprendra que l'utilisateur n'a pas envie d'enlever tous les retours chariots d'un xml de + de 5000 lignes ...
Je vais tout de meme essayé a la main pour voir ce que ca donne.
Je crois que les macs sont sous les 3OS : MacOs , Windows et Unix.. D'ailleurs il parrait que le portage entre win et unix se fait super bien sur les macbook pro... Enfin c'est ce qu'on ma dit. Il parrait que ces derniers executent en meme temps 2 OS sans trop de ralentissement.
----------------------------------
J'ai testé avec Notepad++ et je vois rien de différent entre windows et unix
Dernière modification par maspero (23-07-2009 16:13:01)
|
|
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1390
Snippets: 25
Tutoriels: 6
Site web
Hors ligne |
En fait, avec Notepad++, il faut que tu ouvres ton fichier, et que tu fasses "Format" -> "Convertir en format UNIX" pour que la conversion soir effective.
Je vais essayer de voir pour la conversion "en live" avec wxWidgets.
@+ Xav'
|
Le nouveau portail wxWidgets francophone : www.wxdev.fr Ben en fait, vous y êtes déjà ... et effectivement, depuis le temps, ce n'est plus tellement nouveau....
|
guyothomas (Membre)
Inscrit le : 05-06-2008
Messages: 66
Snippets: 0
Tutoriels: 0
Hors ligne |
Avec wxWidgets, il y a dans la classe wxStyledTextCtrl une fonction ConvertEOLs(int). J'ai pas fouillé, mais tu pourrais sans doute mettre ton texte dans un de ces wxStyledTextCtrl puis exécuter la fonction et récupérer le texte... puis le remettre dans ton fichier...
le lien vers la fonction dans la doc en ligne.
|
|
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1390
Snippets: 25
Tutoriels: 6
Site web
Hors ligne |
Juste une petite question : tu crées ton fichier xml avec quoi ?
Parce que d'après le test que je viens de faire, avec wxXmlDocument (et sa méthode "Save()"), les fins de lignes sont au format Unix même sous Windows.
@+ Xav'
|
Le nouveau portail wxWidgets francophone : www.wxdev.fr Ben en fait, vous y êtes déjà ... et effectivement, depuis le temps, ce n'est plus tellement nouveau....
|
maspero (Membre)
Inscrit le : 19-05-2009
Messages: 81
Snippets: 0
Tutoriels: 0
Hors ligne |
En fait avec un convertisseur TAP->XML. et ensuite je le modifie avec tinyXML qui est mieux que wxXML je trouve..
et ensuite je rajoute du texte dedans en tant que wxTextFile Je sais c'est le bordel mais à la fin le fichier est un xml aux normes. Seul probleme, il est pas au format unix
Je teste le convertisseur de notepad. Merci
---------------------------------
Notepad... Pas de difference! Je ne comprend pas. J'ai demandé au programmeur qui a concu le convertisseur TAP->XML XML->TAP pourquoi ca recodait pas et c'est lui qui m'a dit que je rajoutais des CRLF... mais j'en vois pas. Ca se présente comment les retours chariots windows sous unix??
Dernière modification par maspero (23-07-2009 18:38:30)
|
|
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1390
Snippets: 25
Tutoriels: 6
Site web
Hors ligne |
Pour voir la différence, dans Notepad++, passes en affichage Hexa (je ne sais plus si le plugin HexEditor est présent par défaut ou si je l'ai rajouté). Les fins de lignes sous Windows sont matérialisées par deux caractères : 0x0d 0x0a (les fameux Cr Lf). Sous Unix, il n'y a que le caractère Lf : 0x0a.
De toute façon, pour ton problème, il faudra sans doute convertir le fichier après qu'il soit créé (le relire et le ré-écrire avec les bons caractères de fins de ligne).
@+ Xav'
|
Le nouveau portail wxWidgets francophone : www.wxdev.fr Ben en fait, vous y êtes déjà ... et effectivement, depuis le temps, ce n'est plus tellement nouveau....
|
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1390
Snippets: 25
Tutoriels: 6
Site web
Hors ligne |
Bon, voici une méthode pour faire la conversion :
- Tu ouvres le fichier à traduire avec un wxFileInputStream - Tu crées un wxTextInputStream à partir de ce wxFileInputStream - Tu crées un nouveau fichier avec un wxFileOutputStream - Tu crées un wxTextOutputStream à partir de ce wxFileOutputStream - Tu n'oublies pas de passer le bon paramètre pour les fins de lignes au wxTextOutputStream - Tu envoies au wxTextOutputStream toutes les lignes lues depuis le wxTextInputStream
Voici en clair ce que ça donne :
Code wxWidgets:// Ouverture du fichier à traduire avec un wxFileInputStream wxFileInputStream f_in(_T("original.xml")); // Création d'un wxTextInputStream à partir du wxFileInputStream wxTextInputStream t_in(f_in); // Création du fichier final avec un wxFileOutputStream wxFileOutputStream f_out(_T("final.xml")); // Création d'un wxTextOutputStream à partir du wxFileOutputStream // Avec le paramètre permettant de spécifier le type de retours chariots que l'on veut wxTextOutputStream t_out(f_out, wxEOL_UNIX); // Pour forcer les retours chariots Windows, il aurait fallu mettre : // wxTextOutputStream t_out(f_out, wxEOL_DOS); // On lit toutes les lignes du fichier source // et on les passe au fichier destination while (!f_in.Eof()) { t_out << t_in.ReadLine() << _T("\n"); }
Avec ça, plus de problème : tu maitrises les retours chariots.
D'ailleurs, ça mérite un petit snippet, ça... 
@+ Xav'
|
Le nouveau portail wxWidgets francophone : www.wxdev.fr Ben en fait, vous y êtes déjà ... et effectivement, depuis le temps, ce n'est plus tellement nouveau....
|
maspero (Membre)
Inscrit le : 19-05-2009
Messages: 81
Snippets: 0
Tutoriels: 0
Hors ligne |
comme toujours c'est nickel!! MERCI!
|
|
|