2012-04-30 26 views
5

Jak przenieść elementy/wartości w górę iw dół pliku tekstowego. W tej chwili mój program odczytuje plik tekstowy, a używa go przez pewien czas, aby upewnić się, że zatrzyma się, gdy nie ma już linii do odczytania. Użyłem instrukcji if, aby sprawdzić, czy licznik jest równy linii wartości, którą chcę przenieść. Nie jestem pewien, jak kontynuować.Jak przenieść elementy w górę/w dół w pliku tekstowym?

_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

można odczytać pliku zastąpić wartości, a następnie zapisać go z powrotem nadpisując starą wersję. – Zaki

+0

Co powinieneś zrobić, gdy Counter == _upORDown? Czy powinieneś pisać ten plik? – Robaticus

+0

Możesz zrobić 'while (! Reader.EndOfStream)' zamiast 'while (line! = Null)' Powinieneś także użyć 'line = reader.ReadLine()' w swojej pętli lub po prostu utkniesz w nieskończona pętla. – DangerMonkey

Odpowiedz

3

Możesz przeczytać plik w pamięci, przenieść linię tam, gdzie jest to potrzebne, i zapisać plik z powrotem. Możesz użyć ReadAllLines i WriteAllLines.

Ten kod przenosi ciąg w pozycji i w górę o jedną linię:

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

co to są linie? – user1285872

+0

@ user1285872 'i' jest zmienną całkowitą ustawioną na numer linii bazujący na zera, który chcesz przesunąć o jeden. – dasblinkenlight

+0

okey dziękuję, ciągle otrzymuję błąd "Błąd " System.Array "nie zawiera definicji" długości "ani metody rozszerzenia" długość "akceptacji pierwszego argumentu typu" System.Array "można znaleźć (są brakuje ci dyrektywy użycia lub odniesienia do zestawu?) " jeśli (lines.length <= line) return; – user1285872

0

@ odpowiedź dasblinkenlight, wykorzystując LINQ:

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

Usuwa linię w pozycji i (zero-based) i przesuwa pozostałe linie w górę.

Dodawanie do nowej linii:

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) 
    ) 
); 
Powiązane problemy