web-dev-qa-db-fra.com

Supprimer une ligne spécifique d'un fichier texte?

J'ai besoin de supprimer une ligne exacte d'un fichier texte, mais je ne peux pas, pour la vie de mon entraînement, comment s'y prendre.

Des suggestions ou des exemples seraient grandement appréciés?

Questions connexes

Méthode efficace pour supprimer une ligne d'un fichier texte (C #)

23
Goober

Si la ligne que vous souhaitez supprimer est basée sur le contenu de la ligne:

string line = null;
string line_to_delete = "the line i want to delete";

using (StreamReader reader = new StreamReader("C:\\input")) {
    using (StreamWriter writer = new StreamWriter("C:\\output")) {
        while ((line = reader.ReadLine()) != null) {
            if (String.Compare(line, line_to_delete) == 0)
                continue;

            writer.WriteLine(line);
        }
    }
}

Ou s'il est basé sur le numéro de ligne:

string line = null;
int line_number = 0;
int line_to_delete = 12;

using (StreamReader reader = new StreamReader("C:\\input")) {
    using (StreamWriter writer = new StreamWriter("C:\\output")) {
        while ((line = reader.ReadLine()) != null) {
            line_number++;

            if (line_number == line_to_delete)
                continue;

            writer.WriteLine(line);
        }
    }
}
39
Sean Bright

Pour ce faire, la meilleure solution consiste à ouvrir le fichier en mode texte, à lire chaque ligne avec ReadLine (), puis à l'écrire dans un nouveau fichier avec WriteLine () en ignorant la ligne à supprimer.

Pour autant que je sache, il n'existe pas de fonction générique de suppression d'une ligne à partir d'un fichier.

13
Aric TenEyck

Une façon de le faire si le fichier n’est pas très volumineux consiste à charger toutes les lignes dans un tableau:

string[] lines = File.ReadAllLines("filename.txt");
string[] newLines = RemoveUnnecessaryLine(lines);
File.WriteAllLines("filename.txt", newLines);
7
Darin Dimitrov

Pour cela, vous pouvez utiliser les génériques C # pour que ce soit vraiment facile:

        var file = new List<string>(System.IO.File.ReadAllLines("C:\\path"));
        file.RemoveAt(12);
        File.WriteAllLines("C:\\path", file.ToArray());
2
DataDink

Aucun code de fusée scientifique n’exige. Espérons que ce code simple et abrégé sera help .

List linesList = File.ReadAllLines("myFile.txt").ToList();            
linesList.RemoveAt(0);
File.WriteAllLines("myFile.txt"), linesList.ToArray());

OU utilise this

public void DeleteLinesFromFile(string strLineToDelete)
    {
        string strFilePath = "Provide the path of the text file";
        string strSearchText = strLineToDelete;
        string strOldText;
        string n = "";
        StreamReader sr = File.OpenText(strFilePath);
        while ((strOldText = sr.ReadLine()) != null)
        {
            if (!strOldText.Contains(strSearchText))
            {
                n += strOldText + Environment.NewLine;
            }
        }
        sr.Close();
        File.WriteAllText(strFilePath, n);
    }
2
  1. Lire et mémoriser chaque ligne 

  2. Identifiez celui dont vous souhaitez vous débarrasser

  3. Oublie celui-là

  4. Ecrivez le reste en haut du fichier

1
Steve Gilham

Cela peut être fait en trois étapes:

// 1. Read the content of the file
string[] readText = File.ReadAllLines(path);

// 2. Empty the file
File.WriteAllText(path, String.Empty);

// 3. Fill up again, but without the deleted line
using (StreamWriter writer = new StreamWriter(path))
{
    foreach (string s in readText)
    {
        if (!s.Equals(lineToBeRemoved))
        {
            writer.WriteLine(s);
        }
    }
}
0

Quoi? Utiliser le fichier ouvert, chercher la position puis diffuser la ligne d’effacement à l’aide de null.

Gotch il? Simple, flux, pas de tableau qui consomme de la mémoire, rapide.

Ce travail sur vb .. Exemple de ligne de recherche culture = id où culture sont namevalue et id sont utiles et que nous souhaitons changer en culture = fr

Fileopen(1, "text.ini")
dim line as string
dim currentpos as long
while true
    line = lineinput(1)
    dim namevalue() as string = split(line, "=")
    if namevalue(0) = "line name value that i want to edit" then
        currentpos = seek(1)
        fileclose()
        dim fs as filestream("test.ini", filemode.open)
        dim sw as streamwriter(fs)
        fs.seek(currentpos, seekorigin.begin)
        sw.write(null)
        sw.write(namevalue + "=" + newvalue)
        sw.close()
        fs.close()
        exit while
    end if
    msgbox("org ternate jua bisa, no line found")
end while

c'est tout ... utilisez #d

0
user189590

Êtes-vous sur un système d'exploitation Unix?

Vous pouvez le faire avec l'éditeur de flux "sed". Lisez la page de manuel pour "sed"

0
user122299