2011-04-03 1 views
1

J'ai écrit certaines données dans un fichier manuellement, c'est-à-dire pas par mon application. n caractères avant EOF dans le fichier causant des problèmes

Mon code lit les données char par char et les stocke dans différents tableaux mais mon programme est bloqué lorsque j'insère la condition EOF. Après quelques recherches, j'ai découvert que dans mon fichier avant EOF, il y avait trois à quatre caractères \n. Je ne les ai pas insérés. Je ne comprends pas pourquoi ils sont dans mon dossier.

+0

Quel éditeur utilisez-vous pour éditer les données? Si vous avez besoin de ce niveau de contrôle - comme s'il n'y a pas de caractères \ n - c'est une bonne idée d'utiliser un éditeur hexadécimal (par exemple bvi), pas un éditeur de texte normal. –

+0

Il vous manque un ';' à la ligne 42 de votre code. – pmg

Répondre

1

Voulez-vous supprimer ces caractères supplémentaires? Tout d'abord, voir combien d'entre eux il y a à la fin de votre fichier:

od -c <filename> | tail 

Ensuite, retirez cependant beaucoup de caractères que vous n'aimez pas. Si c'est 3:

truncate -s -3 <filename> 

Mais dans l'ensemble, si elle était moi, je change mon programme pour éliminer les caractères indésirables newline, à moins qu'ils ne sont vraiment pas valide selon la spécification du format de fichier d'entrée.

+0

monsieur est-il un moyen de supprimer ces caractères en utilisant c programmation – tariq

+0

Bien sûr, il suffit de lire le fichier un caractère à la fois jusqu'à ce que vous trouvez le caractère que vous n'aimez pas, puis appelez la fonction C 'ftruncate()' sur le descripteur de fichier passant le nombre d'octets que vous avez lu que vous avez aimé. –

+0

merci beaucoup monsieur pour votre aide – tariq

1
  1. Il est très facile d'ajouter des retours à la ligne à la fin d'un fichier dans chaque éditeur de texte. Vous devez pousser le curseur pour les voir. Ouvrez votre fichier dans votre éditeur et voir ce qui se passe lorsque vous naviguez jusqu'à la fin, vous verrez les nouvelles lignes supplémentaires.

  2. Il n'existe pas de caractère EOF en général. Windows traite le contrôle-Z comme EOF dans certains cas. Peut-être que vous parlez de la valeur de retour de certaines API qui indique qu'il a atteint la fin du fichier?

+0

merci monsieur mais est-il un moyen par lequel je peux les supprimer en utilisant le langage c – tariq

+0

écrire plus de code pour les tolérer pendant que vous lisez. – bmargulies

Questions connexes