IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Ajouter un caractère en début de ligne dans un fichier


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 59
    Points : 38
    Points
    38
    Par défaut Ajouter un caractère en début de ligne dans un fichier
    Bonjour à tous!

    J'ai une petite question.

    Supposons que j'ai un fichier formaté comme suit:
    Je lis ce fichier, et je me dis: tiens, je veux mettre un # au début de la deuxième ligne (pour commenter cette ligne)

    Est-ce que pour cela, je dois :
    1-copier la premiere ligne dans un fichier temporaire
    2-mettre #
    3-copier ce qui reste dans le fichier temporaire
    4-remplacer l'ancien fichier par le fichier temporaire

    ? N'y a t-il pas un moyen plus simple, comme:
    1-se positionner au debut de la deuxieme ligne (même ça je ne suis pas sur de bien savoir faire: il faut utiliser fseek je pense, mais fseek ne fait pas revenir en début de ligne?!!)
    2-Inserer mon fameux #

    Par avance merci!!!

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Salut

    Il n'y a aucun moyen d'insérer un caractère dans un fichier, tu peux seulement en remplacer (un ou plusieurs) par un/d' autre(s).
    Dans ton cas, tu dois créer un second fichier, que tu pourras éventuellement renommer après avoir supprimé le premier.

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 372
    Points : 23 628
    Points
    23 628
    Par défaut
    Ce n'est pas tout-à-fait exact : il est possible d'ajouter des caractères en fin de fichier et donc de recopier par blocs une extrémité d'un fichier vers le bord, pour faire de la place. Et cela prend tout son sens lorsque c'est fait avec mmap().

    Créer un second fichier, ce n'est pas forcément une bonne idée si le fichier original est très gros et/ou si l'utilisateur n'a pas le droit d'écriture dans le répertoire concerné, ou tout simplement s'il ne peut pas supprimer un fichier (sticky bit).

  4. #4
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 75
    Points : 38
    Points
    38
    Par défaut
    Bon je suis hors-sujet desole
    Mais le traitement de fichier passe par perl ...

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par babykichon Voir le message
    Bon je suis hors-sujet desole
    Mais le traitement de fichier passe par perl ...


    oui, bien sûr...

    ça peut aussi passer par sed et/ou awk ou pleins d'autres choses...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  6. #6
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 75
    Points : 38
    Points
    38
    Par défaut
    Bah c'est pas si fou ca dépend du traitement complet qu'il veut lui faire a son fichier

    Perso lire un fichier et remplacer des lignes je fais du perl
    Enfin scuzzi je retourne faire du crochet

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 59
    Points : 38
    Points
    38
    Par défaut
    @babykichon: je fais un post dans le forum d'aide en C. Mais bon merci pour avoir essayé de m'aider. Je reposerai la même question quand j'apprendrai le perl!


    @:Obsidian: Je crois qu'avec cette fonction, on s'attaque à des choses très complexe. J'ai essayé de me renseigner sur cette fonction, mais je n'y comprends rien (je débute en C, et j'apprends par moi même )
    Serait-il possible que tu me donnes un petit bout de code me permettant d'essayer cette fonction pour ajouter un caractere en début de ligne (j'espère ne pas en demander trop ?!)

    En tout cas, ça prouve que ce n'est pas une question si trivial que ça!

    Merci à vous tous!

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par morpheusmg Voir le message
    J'ai essayé de me renseigner sur cette fonction, mais je n'y comprends rien (je débute en C, et j'apprends par moi même )
    Serait-il possible que tu me donnes un petit bout de code me permettant d'essayer cette fonction pour ajouter un caractere en début de ligne (j'espère ne pas en demander trop ?!)

    En tout cas, ça prouve que ce n'est pas une question si triviale que ça!
    Salut
    C'est pas que ce soit si trivial que ça, c'est simplement qu'on sait comment est fait un fichier et que tu ne le sais pas encore.

    En fait, ton fichier n'est à la base qu'une suite de caractères, rien de plus. Pour ton exemple, ton fichier réel est ainsi
    Comme tu le vois, il n'y a absolument aucune question de ligne là dedans. Simplement c'est ton éditeur qui est bien fait et qui détecte ces caractères '\n' marquant la fin "logique" d'une ligne qui t'affiche alors
    Partant de là, tu comprends de suite (j'espère) qu'il n'y a aucun moyen "simple" de rajouter quelque-chose au milieu d'un fichier. Il y a donc divers moyens "pas simples" de le faire, mais l'emploi de l'un ou de l'autre dépend de quelques paramètres comme du nombre de caractères à rajouter, de la taille du fichier et peut-être d'autres encore qui ne me viennent pas à l'esprit tout de suite.

    Donc concernant les moyens de le faire, il y en a plusieurs
    1) tu recopies le fichier dans un second en rajoutant ce qu'il faut quand il faut
    2) tu ouvres ton fichier en mode rw, tu te déplaces sur la position où tu veux rajouter un caractère et tu le mets. Mais comme le caractère inséré remplace le caractère qui y est, tu le mémorises et tu l'inscris sur la position suivante et etc etc jusqu'à la fin du fichier
    3) tu mémorises tout ton fichier en mémoire puis tu manipules ta zone mémorisée comme tu veux puis en final tu reclaques tout dans le fichier
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 59
    Points : 38
    Points
    38
    Par défaut
    @Sve@r: Merci pour ces infos. Oui, je savais comment était représenté un fichier dans mon disque.

    Par contre, je trouve ta méthode n°2 très intéressante! Je pense que je vai l'essayer.

    Et juste une question sur la méthode n°3: comment "mémorises-tu le fichier en mémoire? Par un tableau? Une grande chaine de caractère?
    Je pense que c'est la technique du mmap() non? Bien que je n'ai absolument rien compris à cette technique!

    En tout cas merci beaucoup

    PS: peux t-on m'expliquer la technique du mmap()?
    Par avance merci!

  10. #10
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Pour la solution 3 c'est tout bête, tu t'alloues un buffer, tu charges le fichier dedans à coup de fread() (attention si le fichier est plus gros que ton buffer initial), tu fais tes modifs dans le buffer, puis tu l'écrit avec fwrite().

    mmap() c'est un peu le même principe, sauf que c'est l'OS qui se charge de mapper le fichier en mémoire. En gros tu te retrouve avec un pointeur vers des données en mémoire, mais en fait ces données sont les données sur disque. Quand tu modifies les données en mémoire, tu modifies les données sur le disque. Et c'est totalement transparent.

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 59
    Points : 38
    Points
    38
    Par défaut
    Merci beaucoup pour toutes ces infos!
    J'apprends énormément!

    Et merci aussi pour votre réactivité!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/10/2014, 11h22
  2. Réponses: 6
    Dernier message: 28/03/2011, 13h31
  3. Ajout de caractéres en fin des lignes d'un fichier texte
    Par loubna04 dans le forum VBScript
    Réponses: 1
    Dernier message: 30/03/2010, 12h03
  4. [RegEx] Ajouter un caractère à chaque début de ligne
    Par supertino7 dans le forum Langage
    Réponses: 7
    Dernier message: 02/10/2009, 20h12
  5. [Débutant] Ajouter deux espaces en début de ligne d'un fichier txt
    Par niepoc dans le forum MATLAB
    Réponses: 19
    Dernier message: 30/04/2008, 16h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo