2016-04-22 24 views
-1

特定のパスからデータを読み込みたいのですが、プログラムは最初の行のみを読み込みます。 私のプログラムはユーザーからデータを取得し、int .txtファイルに保存します。そして、区切り文字の間にすべての内容を表示したいと思います。

入力
C#を使用して.txtファイルからデータを読み取るにはどうすればよいですか?

[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

のようになります。現在書かれているとおり、あなたが求めていることを正確に伝えるのは難しいです。この質問を明らかにするには、[How to Ask](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()'は 'sd.Close()'の後に 'ObjectDisposedException'を投げます。それらの '.Close()'呼び出しの両方を 'while'ループの外に移動する必要があります。 –

+0

今すぐ編集します –