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 :

Recherche et suppression d'un texte dans un fichier texte


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 26
    Par défaut Recherche et suppression d'un texte dans un fichier texte
    Bonjour à tous,

    J'ai deux fichiers texte que l'on va nommer fichier A et fichier B.
    Je voudrais tester si le contenu du fichier B se trouve dans le fichier A. S'il s'y trouve, j'aimerais le supprimer du fichier A.
    J'ai déjà essayé beaucoup de techniques, notamment à base de replace(), de split() mais dans tous les cas j'arrive à supprimer dans le fichier A uniquement la première ligne du fichier B alors que je voudrais supprimer dans le fichier A tout ce qui est contenu dans le fichier B.
    Le fichier A a été crée sous UNIX, et le fichier B sous Windows.

    J'espère que vous m'avez compris et j'espère qu'il y a une solution à mon problème

    Bonne journée!

  2. #2
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 26
    Par défaut
    Je n'ai toujours pas trouvé de solution à mon souci! Apparemment ça a l'air plus complexe que prévu!

  3. #3
    Max
    Max est déconnecté
    Expert confirmé

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Par défaut
    Citation Envoyé par willythe88 Voir le message
    Je n'ai toujours pas trouvé de solution à mon souci! Apparemment ça a l'air plus complexe que prévu!
    Salut.

    C'est surtout que sans des morceaux de ton code cela va être difficile de t'aider Poste en et tu verras ça va se bousculer

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2003
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 311
    Par défaut
    Tu récupères dans 2 strings le contenu de tes fichiers.

    Tu fais un int index = fileA.IndexOf(fileB), qui va te retourner l'endroit où se trouve le contenu du fichier B.

    Puis un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string newFileA = fileA.Substring(index, fileB.Length);
    Et tu finis par remplacer ton fichier A par un nouveau fichier contenant newFileA.

    Pour ce qui est de l'Unix, je pense qu'il y a moyen de spécifier de quel type est le fichier texte lorsque tu le lis (les seuls changements doivent être au niveau des retour de ligne je pense)

  5. #5
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 26
    Par défaut
    J'ai essayé la méthode de zoubidaman et il s'avère qu'une exception est levée.

    Voici un bout de mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    //Fichier à traiter
    string fichierLog = @"\\serveurUnix\logDuJour.log";
     
    //bloc d'erreur à ignorer dans le fichier à traiter
    string blocAIgnorer = @"\\serveurUnix\blocAIgnorer.txt";
     
    StreamReader lectureFichierLog = new StreamReader(fichierLog);
    string contenuFichierLog = lectureFichierLog.ReadToEnd();
    lectureFichierLog.Close();
     
    StreamReader lectureBlocAIgnorer = new StreamReader(blocAIgnorer);
    string contenuBlocAIgnorer = lectureBlocAIgnorer.ReadToEnd();
    lectureBlocAIgnorer.Close();
     
    int index = contenuFichierLog.IndexOf(contenuBlocAIgnorer);
    string nouveauContenuFichierLog = contenuFichierLog.Substring(index, contenuBlocAIgnorer.Length);
     
    StreamWriter sr = new StreamWriter("resultat.txt");
    sr.Write(nouveauContenuFichierLog);
    Quand le contenu à ignorer est sur plusieurs lignes, index retourne -1; la chaîne n'est donc pas trouvée dans le fichierLog (alors que je suis sûr qu'elle est bien dedans).

    Quand le contenu à ignorer est sur une seule ligne, tout se passe bien mais "nouveauContenuFichierLog" contient uniquement la ligne trouvée, alors que j'aimerais réecrire dans le fichier final tout le fichierLog moins le bloc à ignorer.

    Je ne sais pas si vous avez compris mes explications qui ne sont pas forcément claires! Je ne suis pas un expert en C#, je suis donc un peu perdu Merci à tous

  6. #6
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    617
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 617
    Par défaut
    ben à mon avis t'as un blème du côté des fin de lignes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    abcd\r\n != abcd\n
    Je ferais un replace de \n par \r\n dans l'une ou l'autre des string (suivant qu'elle soit unix ou dos)

  7. #7
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 26
    Par défaut
    Je viens d'essayer de remplacer \n par \r\n dans une des chaîne, ça ne marche pas. J'ai fait pareil avec l'autre chaîne, même résultat

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2003
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 311
    Par défaut
    Citation Envoyé par willythe88 Voir le message
    Quand le contenu à ignorer est sur plusieurs lignes, index retourne -1; la chaîne n'est donc pas trouvée dans le fichierLog (alors que je suis sûr qu'elle est bien dedans).
    Comme dit précédemment, c'est sûrement un souci avec les fins de ligne.

    Citation Envoyé par willythe88 Voir le message
    Quand le contenu à ignorer est sur une seule ligne, tout se passe bien mais "nouveauContenuFichierLog" contient uniquement la ligne trouvée, alors que j'aimerais réecrire dans le fichier final tout le fichierLog moins le bloc à ignorer.
    Ca c'est normal, et c'est à cause du code que j'ai donné.

    Le substring va retourner ce qu'il a trouvé, donc ton bloc à ignorer.

    Il faut plutôt que tu fasses quelque chose comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int index = contenuFichierLog.IndexOf(contenuBlocAIgnorer);
     
    int indexAfterBlock = index + contenuBlocAIgnorer.Length;
    int lastPartSize = lectureFichierLog.Length - indexAfterBlock;
     
    string nouveauContenuFichierLog = contenuFichierLog.Substring(0, index) + contenuFichierLog.SubString(indexAfterBlock, lastPartSize);
     
    StreamWriter sr = new StreamWriter("resultat.txt");
    sr.Write(nouveauContenuFichierLog);
    Tu vas donc découper ton string en deux parties: du début du fichier au premier caractère du bloc à éliminer, et du premier caractère après le block à éliminer jusqu'à la fin.

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

Discussions similaires

  1. Suppression de lignes blanches dans un fichier texte
    Par supcomingenieur dans le forum Shell et commandes GNU
    Réponses: 9
    Dernier message: 15/05/2013, 22h42
  2. Une fonction recherchant l'occurrence d'une chaîne dans un fichier texte
    Par l_autodidacte dans le forum Vos Contributions VBScript
    Réponses: 5
    Dernier message: 11/05/2012, 14h30
  3. Réponses: 10
    Dernier message: 07/07/2011, 13h19
  4. Ouvrir plusieurs fichier textes dans un dossier : *texte.txt
    Par Jenn74 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/05/2007, 16h52
  5. Réponses: 3
    Dernier message: 25/07/2006, 08h40

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