Comment gérer caractère de saut de ligne '\n' dans un fichier texte contre la linux caractères de saut de ligne \r\n caractères?
J'ai un code en C qui lit 1 ligne à la fois, à partir d'un fichier ouvert en mode texte à l'aide de
fgets(buf,200,fin);
Le fichier d'entrée qui fgets() lit des lignes, est un argument de ligne de commande pour le programme.
Maintenant fgets quitte le caractère de saut de ligne inclus dans la chaîne copiée de buf.
Quelque part faire la ligne dans le code que j'ai vérifier
length = strlen(buf);
Pour certains des fichiers d'entrée , qui je pense sont édités sous *nix environnement de caractère de saut de ligne est juste '\n'
Mais pour certains autres cas de test des fichiers d'entrée(qui je pense sont modifiés/créés sous l'environnement Windows est de 2 caractères indiquant un retour à la ligne - '\r''\n'
Je veux enlever le caractère de saut de ligne et que vous voulez mettre un '\0', comme le terminateur de chaîne de caractères. Donc, je dois le faire soit -
if(len == (N+1))
{
if(buf[length-1] == '\n')
{
buf[length-2] = ' if(len == (N+1))
{
if(buf[length-1] == '\n')
{
buf[length-2] = '\0'; //for a `\r\n` newline
}
}
'; //for a `\r\n` newline
}
}
ou
if(len == (N))
{
if(buf[length-1] == '\n')
{
buf[length-1] = 'if(len == (N))
{
if(buf[length-1] == '\n')
{
buf[length-1] = '\0'; //for a `\n` newline
}
}
'; //for a `\n` newline
}
}
Depuis les fichiers texte sont transmis comme argument de ligne de commande pour le programme je n'ai pas de contrôle sur la façon dont il est édité/composé et donc ne peut pas filtrer en utilisant certains outil pour faire des retours à la ligne cohérente.
Comment puis-je gérer cette situation?
Est-il un fgets fonction équivalente dans la bibliothèque standard C(sans extensions) qui peut gérer ces incompatible caractères de saut de ligne et retour d'une chaîne sans eux?
- Le sens de N dans votre code n'est pas clair. Êtes-vous sûr de ne pas dire 'si (nbcar > 1)" et " if (len > 0)'. Pour ne pas mentionner que vous avez utilisé de la longueur dans le reste du code et de ne pas 'len'.
- Double Possible de la Suppression de fuite caractère de saut de ligne à partir de fgets() input
Vous devez vous connecter pour publier un commentaire.
Je tiens à mettre à jour
length
en même tempsou, pour supprimer tous de fuite espaces
length > 0
dans le premier bloc de codeJe pense que votre meilleur (et plus facile) option consiste à écrire votre propre fonction strlen:
Maintenant, pour calculer la longueur de la chaîne à l'exclusion du caractère de saut de ligne(s) et de l'éliminer (ou) vous n'avez tout simplement:
Il travaille pour le style Unix ('\n'), Windows ('\r\n') et le vieux Mac style ('\r').
Remarque qu'il y a de plus rapide (mais non portable) la mise en œuvre de strlen que vous pouvez adapter à vos besoins.
Espérons que cela aide,
RD:
Si vous êtes troublés par les différentes fins de ligne (
\n
et\r\n
) sur des machines différentes, une façon de les neutraliser serait d'utiliser lados2unix
de commande (en supposant que vous travaillez sur linux et les fichiers modifiés dans un environnement Windows). Que le commandement de remplacer toutes les fenêtres de style de fin de ligne, avec linux-style de fin de ligne. L'inverseunix2dos
existe aussi. Vous pouvez appeler ces utilitaires dans le programme C (system
peut-être), puis de traiter de la ligne comme vous le faites actuellement. Cela permettrait de réduire le fardeau sur votre programme.