PDA

Afficher la version compl?te : une question sur ???ifstream lu d'un fichier???



samzl5701
18/10/2009, 18h10
code c :

ifstream ifs (Hour.dat);

while (ifs.good ()) {
ifsgt; gt; bar.yeargt; gt; bar.monthgt; gt; bar.daygt; gt; bar.hourgt; gt; bar.highgt; gt; bar.low;
bars.insert (bars.begin (), barre);
}
?a marche bien sous xp,
mais il a lu la derni?re ligne deux fois sous Ubuntu,
qui peut m'apprendre comment le corriger?

jokelc
18/12/2021, 08h00
Pouvez-vous d?velopper ?lire la derni?re ligne deux fois? et comment le fichier est-il format??

samzl5701
18/12/2021, 09h20
1 pi?ce (s) jointe (s) je sais s'il y a plus d'espace vide, il va lire deux fois sous xp mais je suis s?r que ?a fonctionne bien sous xp, je pense qu'il y a une diff?rence entre xp et ubuntu. ce sont les derni?res lignes du fichier:

9 7 31 0 158.596 156.936 9 7 30 0 158.096 155.299 9 7 29 0 156.354 153.872
il a lu deux fois la derni?re ligne, donc il y a deux barres affich?es dans le graphique, la barre jaune est redondante. semble juste comme ceci:

9 7 31 0 158.596 156.936 9 7 30 0 158.096 155.299 9 7 29 0 156.354 153.872 9 7 29 0 156.354 153.872 (ligne redondante)

https://www.sundytrading.com/attachments/1518956447.png

iluze.lodligzz
18/12/2021, 10h41
hmmm ... pas s?r. J'approcherais ceci en lisant dans chaque ligne avec un getline () et ensuite le divisant en nombres s?par?s, de cette fa?on vous pouvez nettoyer tous les espaces parasites ou retours de chariot.

samzl5701
18/12/2021, 12h02
je trouve un indice, si le fichier a ?t? ?dit? manuellement, cela arrivera, sous linux

lasuzdla
18/12/2021, 13h23
Les codes Ascii indiquent ce qui suit: Ils ont ?t? introduits pour contr?ler la t?te d'une imprimante. chr (13) = retour chariot (aller au d?but (gauche) de la ligne) chr (10) = saut de ligne (descendre d'une ligne). Ces derniers indiquent la fin du fichier ou la fin de la transmission Chr (26) = Ctrl- Z Chr (04) = Ctrl -D Ce sont des reliques de Very old OS et sont maintenant obsol?tes mais peuvent encore ?tre trouv?s dans certains fichiers. La s?paration de ligne bas?e sur un fichier Windows standard est d?sign?e par chr (13) Chr (10) Techniquement, l'imprimante parle. Les marqueurs de fin de fichier sont parfois toujours pr?sents dans les fichiers texte sur les fichiers Windows. Ce sera chr (26) (Ctrl-Z) La s?paration de ligne Unix standard utilise seulement chr (10) qui suppose de retourner ? gauche de la page. Ceci est plus logique dans les appliions autres que les imprimantes (c'est-?-dire les fichiers disquem?moire) puisque vous devrez ins?rer de nombreux espaces ou onglets dans le fichier pour conserver la position x actuelle sur une nouvelle ligne. Les marqueurs de fin de fichier sont parfois toujours pr?sents dans les fichiers texte. Sur les fichiers unix, ceux-ci seront Chr (4) (Ctrl-D) --------------- Fondamentalement, votre probl?me est que l'IFS objet ne d?tecte pas la fin du fichier lorsque vous le souhaitez. Cela sera d? ? des caract?res suppl?mentaires apr?s la derni?re ligne (ils peuvent ?tre une combinaison de ceux d?crits ci-dessus) EG: 9 7 31 0 158.596 156.936-Chr (10) 9 7 30 0 158.096 155.299-Chr (10) 9 7 29 0 156.354 153.872-Chr (10) -Chr (4) 9 7 29 0 156.354 153.872 (ligne redondante) dans l'exemple ci-dessus l'objet IFS ne d?tectera pas la fin du fichier en raison du caract?re suppl?mentaire chr (4) L'objet IFS peut ?galement ?tre cod? de mani?re ? ne pas d?tecter la fin du fichier si un saut de ligne est pr?sent sur la ligne finale EG 9 7 31 0 158.596 156.936-Chr (10) -J'ai pas encore termin? il y a une autre ligne 9 7 30 0 158.096 155.299-Chr (10) -Je ne suis pas encore fait il y a une autre ligne 9 7 29 0 156.354 153.872-Chr (10) -Je ne suis pas encore fait il y a une autre ligne Fin du fichier Solution (s) la plus simple V?rifiez votre fichier avec un ?diteur hexad?cimal pour savoir ? quoi ressemble la fin de vos fichiers pour d?terminer le probl?me exact. Assurez-vous de transf?rer le fichier (de windows ? unix) ? l'aide de la convention Ascii. la fin du fichier incluant le dernier saut de ligne pour que votre fichier (dans un ?diteur hexad?cimal) ressemble ?: 9 7 31 0 158.596 156.936-Chr (10) 9 7 30 0 158.096 155.299-Chr (10) 9 7 29 0 156.354 153.872

samzl5701
18/12/2021, 14h43
merci pour votre aide, ?a marche bien maintenant