2012-04-30 30 views
5

Cómo muevo los elementos/valores hacia arriba y hacia abajo en un archivo de texto. Por el momento, mi programa lee un archivo de texto y usa un rato para asegurarse de que se detenga cuando ya no haya más líneas para leer. Usé una instrucción if para verificar si el contador es igual a la línea del valor que quiero mover. Estoy atascado no estoy seguro de cómo continuar desde aquí.Cómo muevo los elementos hacia arriba o hacia abajo en el archivo de texto

_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++; 
     } 
    } 
+0

se puede leer el archivo de reemplazar los valores y después grabarla sobrescribir la versión antigua. – Zaki

+0

¿Qué debe hacer cuando Counter == _upORDown? ¿Se supone que estás escribiendo el archivo? – Robaticus

+0

Puedes hacer 'while (! Reader.EndOfStream)' en lugar de 'while (line! = Null)' También deberías 'line = reader.ReadLine()' dentro de tu loop o simplemente te quedarás atrapado en un Bucle infinito. – DangerMonkey

Respuesta

3

Puede leer el archivo en la memoria, mover la línea a donde lo necesite y volver a escribir el archivo. Puede usar ReadAllLines y WriteAllLines.

Este código se mueve la cadena en la posición i por una línea:

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); 
+0

¿Qué es i lines? – user1285872

+0

@ user1285872 'i' es una variable entera establecida en el número de línea basado en cero que desea mover en uno. – dasblinkenlight

+0

okey gracias, sigue obteniendo un error "Error 'System.Array' no contiene una definición para 'longitud' y no se puede encontrar ningún método de extensión 'length' que acepte un primer argumento de tipo 'System.Array' (son ¿falta una directiva using o una referencia de ensamblado?) " if (lines.length <= line) return; – user1285872

0

@ respuesta de dasblinkenlight, utilizando LINQ:

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

Esto borra la línea en la posición i (basado en cero) y mueve las otras líneas hacia arriba.

Adición de una nueva línea:

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) 
    ) 
); 
Cuestiones relacionadas