2014-01-18 65 views
0

我對一個特定的問題有點困惑。我在.NET中工作,需要將多行文本文件解析爲多個變量。據我所知,到目前爲止,我已經閱讀了第一行。下面是該文本文件的樣子:將多行文本文件解析爲多個變量

1/10/2014 1,2,3 
1 0 0 
1 1 0 
1 2 0 
1 3 0 
1 4 0 
1 5 0 
1 6 0 
1 7 0 
1 8 0 

這裏是我的代碼看起來像第一行 - 它應該被拉出日期(現在,它不會撤出的日期,它的分配今天)和「1,2,3」,然後用「1 2 3」的空格替換逗號。其餘的每一行中的每個數字應該是它自己的變量,這就是我被卡住的地方。我只需要將每個後續行的前導「1」作爲一個變量(它將始終爲0或1),並且每個後續行中的第二個數字都是一個層數(這些數字始終爲0-8),並且每行中的最後一個數字都是「0」,都是單獨的變量,並且會有所不同。

string filePath = ConfigurationSettings.AppSettings["FileName.txt"]; 
StreamReader reader = null; 
FileStream fs = null; 
fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 
reader = new StreamReader(fs); 
string line = null; 
line = reader.ReadLine(); 
string[] lineInfo = line.Split(' '); 
string NumbersTemp = lineInfo[1]; 
string numbers = NumbersTemp.Replace(","," "); 
string date = DateTime.Today.ToString("MM/dd/yyyy"); 

正如你所看到的,我已經不是很遠與變量得到,我甚至不知道這是否能正確工作,我把它到目前爲止的方式。這不是錯誤,但它不完整。獲得這些變量的任何幫助都將非常感謝。

+1

把ReadLine放到一個循環中 – Paparazzi

回答

3

StreamReader.ReadLine只讀一行。您只使用過一次。使用循環:

string date = DateTime.Today.ToString("MM/dd/yyyy"); 
string filePath = ConfigurationSettings.AppSettings["FileName.txt"]; 
using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 
using(var reader = new StreamReader(fs)) 
{ 
    string line; 
    while ((line = reader.ReadLine()) != null) 
    { 
     string[] lineInfo = line.Split(' '); 
     string NumbersTemp = lineInfo[1]; 
     string numbers = NumbersTemp.Replace(",", " "); 
     // ... 
    } 
} 

我還使用了using語句來確保所有的非託管資源,甚至在錯誤的情況下設置屬性。

+0

我理解循環 - 這是否意味着第一行是lineInfo [0],接下來是lineInfo [1]等等,獲取變量的最佳方法是獲取每行的子串? – user2697262

+0

@ user2697262:沒有'line.Split('')'將每一行分成塊,其中每個標記是一行中的一個「單詞」(因爲您正在分割空間)。所以你可以通過'lineInfo'的索引器訪問每一列/單詞。循環只是迭代文件中的每一行。如果您想以相同的方式訪問它,則需要將所有內容加載到內存中,例如使用「File.ReadAllLines(path)」。返回的數組已經包含文件中的所有行。 –

+0

我遇到了插入此問題的問題: CS1519:在類,結構或接口成員聲明中使用無效令牌 – user2697262