Supprimer \n d'une chaîne

Résolu/Fermé
linkcr15 Messages postés 362 Date d'inscription mercredi 7 janvier 2009 Statut Membre Dernière intervention 31 mars 2016 - 15 janv. 2012 à 20:41
 Antoine - 15 janv. 2012 à 21:22
Bonjour à tout le monde!

J'ai un petit problème pour l'un de mes programmes. Je lis des chaînes de caractères dans un fichier. Ces chaînes correspondent à des noms de fichier (sans le .txt) et sont séparés par un retour à la ligne. J'utilise donc fgets jusqu'à obtenir le fichier souhaité, puis je concatène .txt à la fin de cette chaîne pour ouvrir le fichier correspondant à la chaîne. Cependant, en utilisant fgets, j'ai l'impression que le retour à la ligne utilisé dans le premier fichier est sauvegardé, ce qui implique que je ne peux pas ouvrir les fichiers correspondant aux chaînes.
Est-il possible de supprimer ce retour à la ligne dans la chaîne pour concaténer le .txt à la fin pour ouvrir le bon fichier?
Ou sinon, comment écrire le nom de mon fichier pour qu'il s'ouvre même avec le retour à la ligne dans la chaîne?

Exemple :
FILE* fichier;
char chaine [50];

fichier=fopen("XXX.txt", "r");

while(!foef(fichier)) {
/* Ceci n'est pas mon vrai code, je test bien que je trouve la bonne ligne mais ceci est un exemple */

fgets (chaine, 50, fichier);
}

fclose(fichier);

fichier=fopen(strcat(chaine, ".txt"), "r");

Il y a une erreur lors de l'ouverture de ce fichier car chaine contient le retour à la ligne contenue dans XXX.txt car quand je fais printf("%s\n", chaine); j'ai bien le saut de ligne fait par mon \n ainsi que le saut de ligne fait dans XXX.txt

Est-ce que quelqu'un peut m'aider svp pour ouvrir le second fichier svp? J'ai tout éssayé... Sauf la bonne solution pour le moment ^^'. Merci d'avance pour toutes vos réponses!

A voir également:

1 réponse

Bonjour,

strtok peut être utiliser. strtok va découper la chaine à chaque saut de ligne et retourner un pointeur sur la chaine. Je m'explique avec un exemple.

pour :
chaine1\nchaine2\nchaine3\n\0
strtok sortira
> chaine1\0
> chaine2\0
> chaine3\0
> \0
> NULL
> NULL, etc.

donc pour :
chaine1\n\0
on aurai :
> chaine1\0
> \0
> NULL, etc.

Code C :

fichier1 = strtok(Chaine, "\n"); /* pour le premier fichier, il faut spécifier le nom de la chaine à analyser. les '\n' présents dans la chaine seront remplacés par des '\0'. */
fichier2 = strtok(NULL, "\n"); /* Pour les fois suivantes, il ne faut pas spécifier la chaine car sinon, le résultat sera toujours fichier1. Il faut spécifier NULL pour les demandes suivantes. Si fichier2 (ou fichier1 d'ailleurs) vaut NULL, c'est que la fin de chaine initiale a été atteinte */

NB : Le second paramètre de strtok doit être entre guillemets et non entre apostrophes. Pour plus d'infos sur strftok : rechercher "man page strtok".
En l'occurence seul le premier appel à strtok est intéressant pour ce cas.

Sinon, il y a la possibilité de faire strchr() pour rechercher le '\n' et de placer '\0' à sa place. Ce qui revient à coder un version simplifiée de strtok.

strtok est plus simple d'utilisation (1 ligne) mais strchr() + '\0' est bien mieux optimisé pour cette tâche.

Il faut biensure faire cette opération avant de concaténer ".txt".

Est-ce que j'ai bien compris le problème et j'ai bien répondu?
1