Lecture de fichier qui lit que le premier caractère [Résolu] - C#/.NET managed - Programmation
Marsh Posté le 13-05-2006 à 13:14:45
Code :
|
Marsh Posté le 13-05-2006 à 13:57:21
ca fait exactement pareil ... que je l'affiche dans un message.box ou que je le mette dans mon textfield, ca affiche que la premiere lettre..
Jme demande si le probleme vient pas de mon utilisation de cette variable parceque la ...
Marsh Posté le 13-05-2006 à 22:16:39
tu es sure que le prob ne vient pas de la sauvegarde. est tu bien sure que ça écrit bien tout dans ton fichier, tu as vérifié?
Sinon tu es obligé de passer par un fichier texte. Sinon tu créer un dataset, tu fou ton texte dans une cellule et tu fais "writeXML" et "ReadXML" pour le relire c'est mieux et bcp plus rapide....
Marsh Posté le 14-05-2006 à 11:39:13
benamoubeach a écrit : ... que je l'affiche dans un message.box ou que je le mette dans mon textfield, ca affiche que la premiere lettre.. |
Quel fichier essaie tu de lire? un fichier texte, un fichier binaire?
Marsh Posté le 14-05-2006 à 11:46:59
Désolé du retard
Alors oui la sauvegarde est bien faite le fichier contient bien la valeur totale de mon textfield, juste j'ai un probleme d'encodage mais je règlerai ce problème apres. Pour répondre a breizhbugs c'est un fichier texte.
Voili voila, si vous voulez voir un bout de code dites le moi
Pour le dataset, je vais me renseigner
Marsh Posté le 14-05-2006 à 16:22:54
pour la dataset c'est tout con
Dataset data = new Dataset();
data.Tables.Add("Infos" );
data.Tables["Infos"].Columns.Add("Texte" );
DataRow r = data.Tables["Infos"].NewRow();
r["Texte"] = "Bonjour le monde, comment aller vous .... ";
data.Tables["Infos"].Rows.add(r);
data.writeXml(@"C:\tonfichiertexte.txt" );
pour relire
data.readXml(@"C:\tonfichiertexte.txt" );
TonTextBox.Text = data.Tables["Infos"].Rows[0]["Texte"].ToString();
Marsh Posté le 14-05-2006 à 16:41:17
ok merci pour le dataset, mais comme il faut sauvegarder en txt comme un notepad classique , je doute que ca puisse me convenir
Marsh Posté le 14-05-2006 à 21:17:32
oui c'est clair. Le dataset ça te sauvegarde comme un fichier xml...
Marsh Posté le 15-05-2006 à 07:36:24
moi23372 a écrit : |
un dataset pour une sauvegarde ? t'as pas plus con à raconter ? et que se passera t'il s'il veut utiliser son notepad sur une machine non équipée de MDAC ? il faudra qu'il le livre avec ?
et s'il veut relire son fichier texte ailleurs, il lira quoi ? du XML ?
et je te parle pas de la mémoire occupée... allez hop ! encore une de ces salades dont tu es coutumier du fait...
benamoubeach >> poste le code complet de la méthode qui fait la restauration stp, pas des petits bouts
Marsh Posté le 15-05-2006 à 08:27:54
Harkonnen a écrit : un dataset pour une sauvegarde ? t'as pas plus con à raconter ? et que se passera t'il s'il veut utiliser son notepad sur une machine non équipée de MDAC ? il faudra qu'il le livre avec ? |
Ferme un peu ta gueule... Toujours venir faire ton malin. Le mec il avait besoin d'aide depuis trois jours, alors au lieu de venir faire ta star qui connait tout et qui ta toujours raison, va te faire voir ailleur. C'est pas parce que tu es modérateur que tu peux tout te permettre. Tu as vraiment une salle grande gueule et si je t'avais en face de moi, je t'en collerais une pour que tu l'as boucle. Ton intervention elle sert à rien (comme souvent d'ailleurs).
C'est clair que le dataset est une solution si bien sure ça ne doit pas être lisible par un notepad par exemple, ce qui est logique aussi, et si tu prends le temps de relire ce que j'avais mis plus haut, je l'ai noté aussi. Mais ça bien sure, tu as encore lu en diagonale comme toujours... Allé sans rancune. mais tu commences vraiment à m'énerver car tes interventions elles servent à rien.
Marsh Posté le 15-05-2006 à 09:07:15
moi23372 a écrit : Tu as vraiment une salle grande gueule et si je t'avais en face de moi, je t'en collerais une pour que tu l'as boucle. |
moi23372 a écrit : |
Tiens, j'allais te dire la même chose
moi23372 a écrit : |
Le dataset n'a rien à foutre là dedans ! Un dataset est associé à une base de données, pas à une sauvegarde. Ce n'est pas du tout pour ça qu'il est prévu.
Moi ce que je vois, c'est que que tu n'as pas vu la seule solution vraiment adaptée si le fichier ne devait pas être lisible par un notepad : ça s'appelle la sérialisation/déserialisation. Mais bien évidemment, ton incompétence est telle que ce genre de truc te passe totalement au dessus, c'est bien plus simple de conseiller des solutions à base de bloatware que d'essayer de faire preuve d'un tant soi peu de compétence. Et c'est tellement moins compliqué aussi que d'essayer de corriger le code de benamoubeach, car il y a forcément un truc qui cloche... D'où ma demande pour qu'il poste le code complet de sa fonction, pour éventuellement le tester chez moi... Mais là je t'en demande trop peut etre ?
moi23372 a écrit : |
Je suis pas sur que tous ceux qui fréquentent prog soient de ton avis, j'aurais même tendance à penser que c'est plutot le contraire
Marsh Posté le 15-05-2006 à 09:42:24
Et d'ailleurs, puisqu'il semble que je lise les posts de travers, as tu lu ceci :
Citation : |
c'est quasiment certain que son problème vient de là... il faut creuser du coté de l'encodage utilisé par le StreamReader et par le StreamWriter utilisé pour la sauvegarde. mais ça bien sur, ça t'es passé au dessus
Marsh Posté le 15-05-2006 à 09:49:40
allez tiens, pour benamoubeach, voici une petite fonction qui te permettra de connaitre l'encodage de ton fichier texte, et de déclarer le StreamReader en conséquence :
Code :
|
une fois que tu as l'encodage correct, tu n'as plus qu'à le spécifier dans le constructeur de ton StreamReader de lecture
Marsh Posté le 15-05-2006 à 10:41:00
et je terminerais avec ce magnifique post de moi23372 qui nous fait profiter de ses arguments béton et de son immense compétence en SGBD, sans doute tirée de sa non moins immense compétence à l'époque du post (étudiant)
http://forum.hardware.fr/hardwaref [...] tm#t978571
je recommande la lecture entière de ce topic, si vous êtes en manque de bidonnage, surtout le post un peu plus bas, ou ce charmant jeune homme me dit que je n'y connais rien alors que je suis admin Oracle...
Marsh Posté le 15-05-2006 à 11:50:13
Oula faut pas vous engueuler les mecs enfin merci pour le bout de code Harkonnen
voila ma fonction de sauvegarde du fichier
Code :
|
Et pour l'ouverture de fichier ben j'a idéja posté les différents codes plus haut. En fait je me sers pas de StreamWriter pour écrire dans le fichier, donc je vais changer pour voir ce que ca donne avec ca pour l'encodage merci
Edit: donc le problème vient bien de l'encodage à la sauvegarde car avec d'autres fichiers, cela fonctionne parfaitement.
Marsh Posté le 15-05-2006 à 12:04:56
benamoubeach a écrit : En fait je me sers pas de StreamWriter pour écrire dans le fichier, donc je vais changer pour voir ce que ca donne avec ca pour l'encodage merci |
et bien tu devrais, car StreamWriter est prévu exactement pour la sortie de fichiers texte en te permettant d'indiquer l'encodage utilisé (UTF-8 par défaut). utilise le "tel quel" (sans spécifier l'encodage), et ça devrait marcher sans souci
Marsh Posté le 15-05-2006 à 12:20:13
donc voila le nouveau code, je l'ai utilisé sans encodage(je l'ai affiché , c'est bien de l'utf-8) et ca n'encode toujours pas bien les retours chariots / tabulations.
Code :
|
c'est chiant ces encodages
Marsh Posté le 15-05-2006 à 12:23:45
je teste après bouffer
Marsh Posté le 15-05-2006 à 12:25:03
ok merci pendant ce temps jvais chercher du coté des classe UTF8Encoding et tout ce qui ressemble
Marsh Posté le 15-05-2006 à 13:10:34
j'ai testé et tout marche nickel avec le code que tu as filé (sous VS 2005).
j'ai une form, avec un TextBox multiline et 2 boutons : un bouton pour restaurer et un autre pour sauvegarder. voici le code du bouton pour lire :
Code :
|
et celui pour sauver :
Code :
|
tout marche nickel, même les accents passent, et sans spécifier aucun encoding
Marsh Posté le 15-05-2006 à 13:32:52
moi23372 a écrit : Ferme un peu ta gueule... Toujours venir faire ton malin. Le mec il avait besoin d'aide depuis trois jours, alors au lieu de venir faire ta star qui connait tout et qui ta toujours raison, va te faire voir ailleur. C'est pas parce que tu es modérateur que tu peux tout te permettre. Tu as vraiment une salle grande gueule et si je t'avais en face de moi, je t'en collerais une pour que tu l'as boucle. Ton intervention elle sert à rien (comme souvent d'ailleurs). |
J'irais faire quelques achats sur amazon à ta place.
http://www.amazon.fr/exec/obidos/s [...] 28-0300265
http://www.amazon.fr/exec/obidos/A [...] 28-0300265
Marsh Posté le 15-05-2006 à 13:43:28
Moi les accents ya pas de problème mais les tab / retour chariots ca les encode mal . Pourtant je fais pareil que toi ...
Marsh Posté le 15-05-2006 à 13:45:21
ah ben j'ai pas testé les tab. attends je vérifie de suite
Marsh Posté le 15-05-2006 à 13:49:34
ben ça marche aussi
c'est quoi le controle que tu utilises pour écrire ? un TextBox multiline ?
Marsh Posté le 15-05-2006 à 13:51:54
c'est une RichTextBox, c'est ce que mon prof m'a dit d'utiliser
Marsh Posté le 15-05-2006 à 13:54:01
je vérifie avec un RTB, bouge pas
Marsh Posté le 15-05-2006 à 13:59:24
ça marche aussi
ce que tu peux faire : éditer ton fichier texte avec un éditeur hexa pour voir la gueule des retour chariots. chez moi, ils sont encodés comme ceci :
0A 00
Marsh Posté le 15-05-2006 à 14:03:22
Tab : 00 09
Retours chariots : 00 0A
jvais me jeter d'un ravin, je reviens
Marsh Posté le 15-05-2006 à 14:08:42
mais tu as quoi comme symptome pour dire qu'ils sont mal encodés
Marsh Posté le 15-05-2006 à 14:10:06
ca m'affiche des carrés dans notepad a la place de ce que ca devrait afficher normalement
Marsh Posté le 15-05-2006 à 14:13:47
je viens de regarder un autre fichier qui s'affiche correctement sur notepad et sur mon editeur, et les retours chariots ont pour valeur hexa 0D 0A
Marsh Posté le 15-05-2006 à 14:47:54
mouais, je viens de tester et c'est bien un problème d'encoding.... sous notepad, les retours chariots sont bien représentés par des carrés, et sous wordpad, les retours chariots passent bien, mais ce sont les accents qui déconnent
essaie de spécifier un autre encodage, du genre iso-8859-1 par exemple. là je peux pas le faire de suite, teste le, et je testerais chez moi de mon coté ce soir
Marsh Posté le 15-05-2006 à 17:37:13
bon, test réalisé. dans le constructeur de StreamReader et StreamWriter, spécifie l'encoding par défaut (Encoding.Default).
par contre : reste toujours ces fameux retours chariots. sous Wordpad, le fichier créé se lit nickel avec l'encoding par défaut. sous Notepad, j'ai des carrés à la place des retours chariots
en fait, Notepad lit en ANSI par défaut, et donc les retours chariots sont codés comme 0D 0A, alors que Encoding.Default encode les retours chariots comme 0A. donc soit tu fous Wordpad comme lecteur par défaut pour tes fichiers texte, soit tu trouves le moyen de coder les retours chariots en ANSI. d'après la doc, Encoding.Default représente pourtant l'encodage Windows ANSI, donc je comprends pas
Marsh Posté le 15-05-2006 à 18:45:28
Et moi qui croyait que mon problème était un truc tout simple à résoudre ouin ouin
Marsh Posté le 15-05-2006 à 19:19:03
J'ai tenté vaguement d'encoder ma chaine mais j'ai un peu de mal avec toutes les classes différentes qu'il y a, j'ai fait un truc du style :
Code :
|
mais ca ne fonctionne toujours pas
Marsh Posté le 15-05-2006 à 19:36:55
non non, n'encode pas en UTF8. vu que ton notepad est destiné à une utilisation en local, utilise plutot l'encoding par défaut. je suis certain qu'il y a un truc très con pour résoudre ce problème, faut juste mettre le doigt dessus. je vais voir ce que je peux trouver, parce que ça m'intéresse aussi, les pbs d'encoding m'ont pas mal pollué la vie également
Spoiler : sinon tu fous tous tes caractères dans un dataset, et tu encodes colonne par colonne en XML qui va bien |
Marsh Posté le 15-05-2006 à 19:45:21
ah et je tiens à signaler que malgré sa flagrante grossièreté, je n'ai pas du tout banni l'ami moi23372, qui est libre de venir ici pour apporter un droit de réponse
Marsh Posté le 15-05-2006 à 20:09:07
Ouais j'ai copié le UTF8 mais j'avais essayé avec plusieurs type d'encodage , juste copié la mauvaise ligne
Marsh Posté le 13-05-2006 à 12:50:34
Bonjour à tous,
voila en cours on nous a demandé de faire un petit notepad en C# donc pas de problème pour 95% du projet, mais j'ai un petit problème. Quand je veux ouvrir un fichier, il ne me lit que le premier caractère. J'ai essayé 3 ou 4 méthodes différentes (de mon imagination ou récupérée sur le net) qui sont censées fonctionner sans problème et ca me récupère toujours le premier caractère seulement.
Je vous montre les différents bouts de code.
C'est un de mes premiers scripts C#, plus habitué au java/php/C++ , donc j'ai peut etre oublié un truc subtil
Merci d'avance
Message édité par benamoubeach le 18-05-2006 à 17:18:49