2012-04-30 11 views
5

Come spostare elementi/valori su e giù per un file di testo. Al momento il mio programma legge un file di testo, e ci vuole un po 'per assicurarsi che si fermi quando non ci sono più righe da leggere. Ho usato un'istruzione if per verificare se il contatore è uguale alla riga del valore che voglio spostare. Sono bloccato non so come continuare da qui.Come spostare gli elementi su/giù nel file di testo

_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

è possibile leggere il file di sostituire i valori e poi scrivere di nuovo sovrascrivendo la vecchia versione. – Zaki

+0

Cosa dovresti fare quando Counter == _upORDown? Dovresti scrivere il file? – Robaticus

+0

Puoi eseguire 'while (! Reader.EndOfStream)' invece di 'while (line! = Null)' Inoltre dovresti 'line = reader.ReadLine()' all'interno del tuo ciclo o resterai bloccato in un ciclo infinito. – DangerMonkey

risposta

3

È possibile leggere il file in memoria, spostare la linea a dove serve, e scrivere il file indietro. È possibile utilizzare ReadAllLines e WriteAllLines.

Questo codice sposta la stringa alla posizione i da una linea:

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

cosa sono le linee? – user1285872

+0

@ user1285872 'i' è una variabile intera impostata sul numero di linea a base zero che si desidera spostare di uno. – dasblinkenlight

+0

okey grazie, continuando a ricevere un errore "Errore 'System.Array' non contiene una definizione per 'length' e non è possibile trovare alcun metodo di estensione 'length' che accetta un primo argomento di tipo 'System.Array' (sono manca una direttiva using o un riferimento all'assembly?) " if (lines.length <= line) return; – user1285872

0

@ risposta di dasblinkenlight, utilizzando LINQ:

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

Ciò elimina la linea in posizione i (a base zero) e sposta le altre linee verso l'alto.

Aggiunta di una nuova riga:

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) 
    ) 
); 
Problemi correlati