user1285872
user1285872

Reputation: 83

How do I move items up/down in text file

How do I move items/values up and down a text file. At the moment my program reads a text file, an uses a while to make sure it stop when there is no more lines to read. I used an if statement to check if counter equals the line of the value I want to move. I am stuck not sure how to continue from here.

  _upORDown = 1; 

    using (StreamReader reader = new StreamReader("textfile.txt"))
    {
        string line = reader.ReadLine();
        int Counter = 1;
        while (line != null)
        {

            if (Counter == _upORDown)
            {
              //Remove item/replace position

            }
            Counter++;
        }
    }

Upvotes: 5

Views: 1247

Answers (2)

Zev Spitz
Zev Spitz

Reputation: 15377

@dasblinkenlight's answer, using LINQ:

string path = "c:\\temp\\myfile.txt";
var lines = File.ReadAllLines(path);
File.WriteAllLines(
    path,
    lines.Take(i).Concat(
        lines.Skip(i+1)
    )
);

This deletes the line at position i (zero-based) and moves the other lines up.

Adding to a new line:

string path = "c:\\temp\\myfile.txt";
var lines = File.ReadAllLines(path);
var newline = "New line here";
File.WriteAllLines(
    path,
    lines.Take(i).Concat(
        new [] {newline}
    ).Concat(
        lines.Skip(i+1)
    )
);

Upvotes: 0

Sergey Kalinichenko
Sergey Kalinichenko

Reputation: 726967

You can read the file in memory, move the line to where you need it, and write the file back. You can use ReadAllLines and WriteAllLines.

This code moves the string at position i up by one line:

if (i == 0) return; // Cannot move up line 0
string path = "c:\\temp\\myfile.txt";
// get the lines
string[] lines = File.ReadAllLines(path);
if (lines.Length <= i) return; // You need at least i lines
// Move the line i up by one
string tmp = lines[i];
lines[i] = lines[i-1];
lines[i-1] = tmp;
// Write the file back
File.WriteAllLines(path, lines);

Upvotes: 3

Related Questions