2010-11-19 17 views
12

Pytanie, które mam dotyczy konwersji proces czytania wierszy z pliku tekstowego do tablicy zamiast tylko czytać.C# jak przekonwertować File.ReadLines na tablicę ciągów znaków?

Błąd w moich kody pojawiają się string[] lines = File.ReadLines("c:\\file.txt"); ze nie może implicity nawrócony ....

Czy ktoś mógłby doradzić kodów, aby zapisać wyniki w formie tablicy? Umieściłem kod ReadAllLines, który jest w stanie zapisać wyniki również w tablicy. Dzięki!

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Diagnostics; 
using System.IO; 

namespace Testing 
{ 
class Analysis 
{ 
    static void Main() 
    { 
     string[] lines = File.ReadLines("c:\\file.txt"); 

     foreach (string r in lines) 
     { 
      Console.WriteLine("-- {0}", r); 
     } 

     // Keep the console window open in debug mode. 
     Console.WriteLine("Press any key to exit."); 
     System.Console.ReadKey(); 
    } 
} 
} 

ReadAllLines Kody:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Diagnostics; 
using System.IO; 

namespace Testing 
{ 
class ReadFromFile 
{ 
    static void Main() 
    { 
     string[] lines = System.IO.File.ReadAllLines 
     (@"C:\Users\Public\TestFolder\WriteLines2.txt"); 

     System.Console.WriteLine("Contents of writeLines2.txt =:"); 
     foreach (string line in lines) 
     { 
      Console.WriteLine("\t" + line); 
     } 

     // Keep the console window open in debug mode. 
     Console.WriteLine("Press any key to exit."); 
     System.Console.ReadKey(); 
    } 
} 
} 
+4

Wygląda 'ReadAllLines' już robi to, co chcesz, więc dlaczego ty próbujesz użyć' ReadLines' do tego? – Gabe

+0

Spójrz na komentarze poniżej. Dzięki. – JavaNoob

Odpowiedz

26

File.ReadLines() zwraca obiekt typu System.Collections.Generic.IEnumerable<String>
File.ReadAllLines() zwraca tablicę ciągów.

Jeśli chcesz użyć tablicę łańcuchów trzeba zadzwonić prawidłową funkcję.

Można użyć rozwiązanie Jim, wystarczy użyć ReadAllLines() czy można zmienić typ zwracany.

to również działa:

System.Collections.Generic.IEnumerable<String> lines = File.ReadLines("c:\\file.txt"); 

można użyć dowolnej kolekcji generycznych, które implementuje IEnumerable. IList na przykład.

+0

ReturnLines nie jest zdefiniowana. Właśnie to pokazuje system. – JavaNoob

+0

Ah Widzę teraz moją literówkę. Zaktualizowałem odpowiedź, która powinna być ReadLines. Chodzi o to, że jeśli potrzebujesz tablicy, użyj ReadAllLines(). Jeśli możesz użyć kolekcji ReadLines() działa lepiej na dużych plikach, ponieważ poszczególne linie są pobierane tylko w razie potrzeby. –

+1

Tak, to jest pomysł na użycie większego pliku w ReadLines. Więc powyższe kody nie są podobne do ReadAllLines, prawda? – JavaNoob

16
string[] lines = File.ReadLines("c:\\file.txt").ToArray(); 

Choć można się zastanawiać, dlaczego warto to zrobić, gdy ReadAllLines działa dobrze.

A może po prostu chcesz wyliczyć z wartości zwracanej File.ReadLines:

var lines = File.ReadAllLines("c:\\file.txt"); 
foreach (var line in lines) 
{ 
    Console.WriteLine("\t" + line); 
} 
+0

Przyczyną używania Readlines zamiast ReadAllLines jest rozmiar pliku. Zalecane jest dla dużych plików tekstowych, ponieważ może to spowodować przepełnienie bufora. – JavaNoob

+4

Ale wywołanie 'ToArray' spowoduje zanegowanie jakiejkolwiek korzyści wywoływania' ReadLines'. Użyj modułu wyliczającego, jak pokazałem. –

+0

Czy moduł wyliczający wykorzystuje funkcje ReadLines? – JavaNoob

1

Zmiana string[] lines = File.ReadLines("c:\\file.txt"); na IEnumerable<string> lines = File.ReadLines("c:\\file.txt"); Reszta kodu powinna działać poprawnie.

Powiązane problemy