2016-04-22 1 views
-1

Я хочу читать данные по определенному пути, но я прочитал только первую строку. моя программа получает данные от пользователя и сохраняет его .txt-файл, тогда я хочу отобразить все содержимое между разделителями.

вход
Как я могу читать данные из файла .txt с помощью C#?

[email protected]@[email protected]@[email protected]@[email protected]@t 

выход

Id:1 
Name:aaa 
Address:bbbb 

Id:2 
Name:c 
Address:f 

Id:3 
Name:r 
Address:t 

вот мой код: главный

FileStream fs = new FileStream(@"E:\New folder\a ", FileMode.Open); 
StreamReader sd = new StreamReader(fs); 
string s; 
while (true) 
{        
    s = sd.ReadLine(); 
    field = s.Split(std.delimiter); 
    std.ID = field[0]; 
    std.Name = field[1]; 
    std.Address = field[2]; 
    std.Display_data(); 
    sd.Close(); 
    fs.Close(); 
    break; 
} 

класс

public void Display_data() 
{ 
    Console.WriteLine(ID); 
    Console.WriteLine(Name); 
    Console.WriteLine(Address);  
} 
+1

Просьба уточнить вашу конкретную проблему или добавить дополнительные детали, чтобы выделить именно то, что вам нужно. Как это написано в настоящее время, трудно точно сказать, что вы просите. См. Страницу [Как спросить] (http://stackoverflow.com/help/how-to-ask), чтобы помочь прояснить этот вопрос. –

+0

@ p.s.w.g я отредактировал его, пожалуйста, прочитайте его снова. –

+0

'break' существует цикл while сразу после первого выполнения. Удалите его и замените условие цикла соответствующим испытанием. –

ответ

0

чтения строки, разделить с помощью '@', а затем прочитать 3 позиции и распечатать lineitems.

using(StreamReader oReader = new StreamReader(@"E:\Newfolder\a\test.txt")) 
{ 
    string [] sLineItems = oReader.ReadLine().Split('@'); 

    for(int i = 0;i < sLineItems.Length; i = i+3) 
    { 
      Console.WriteLine("Id:{0}",sLineItems[i]); 
      Console.WriteLine("Name:{0}",sLineItems[i+1]); 
      Console.WriteLine("Address:{0}",sLineItems[i+2]); 
    } 
} 
1

Вы должны удалить

break; 

Редактировать в то время как условия и двигаться

sd.Close(); 
fs.Close(); 

из цикла в то время.
Так ваше время цикл должен выглядеть следующим образом

while (!sd.EndOfStream) 
{        
    s = sd.ReadLine(); 
    field = s.Split(std.delimiter); 
    std.ID = field[0]; 
    std.Name = field[1]; 
    std.Address = field[2]; 
    std.Display_data(); 
} 
sd.Close(); 
fs.Close(); 
+0

'sd.RreadLine()' будет бросать 'ObjectDisposedException' после' sd.Close() '. Вам нужно переместить обе эти вызовы '.Close()' за пределами цикла while. –

+0

Я отредактирую его прямо сейчас –