2013-04-11 71 views
-3

我一直在努力將字符串從文本文件轉換爲雙數組,但無法弄清楚爲什麼我得到錯誤「文件無法讀取;輸入字符串的格式不正確「。c#將字符串轉換爲雙數組

我目前有一個應用程序讀回字符串中的文本文件的內容。我希望當字符串轉換爲雙數組時,我可以告訴控制檯打印雙數組,並且它將打印最初在字符串中的文本文件的值。

這裏是我的代碼:

double[] x = new double [3501]; 

這是我定義的雙陣列。我首先執行此操作:

try 
{ 
    using (StreamReader sr = new StreamReader("test.txt")) 
    { 
    String line = sr.ReadToEnd(); 
    string[] fields = line.Split(new char[] { ' ' }); 
    x = new double [fields.Length]; 

    for (int i = 0; i < fields.Length; i++) 
    { 
     x[i] = Convert.ToDouble(fields[i]); 
     Console.WriteLine(x[i]); 
    } 

行是輸入字符串,其中包含充滿數字的列,然後進行拆分。那麼我告訴它打印x的內容[I]但這就是當一個異常被拋出:

catch (Exception e) 
{ 
    // Log the exception and quit...     
    Console.WriteLine("The file could not be read:"); 
    Console.WriteLine(e.Message); 
} 

誰能弄清楚什麼是錯我的代碼,爲什麼它不工作?

+5

異常正在返回的'Message'的確切用詞是什麼? – 2013-04-11 20:56:58

+2

我現在有最怪異的deja-vu – 2013-04-11 20:57:29

+0

檢查你想轉換的字符串的值是拋出異常。 – zimdanen 2013-04-11 20:57:30

回答

3

一,你將無法與ToDouble

進行分析,這樣做,而不是(你的循環內)的字符串:

double parsed = 0; 
try 
{ 
    parsed = Convert.ToDouble(fields[i]); 
} 
catch (FormatException e) 
{ 
    Console.WriteLine("Couldn't parse '{0}'", fields[i]); 
    continue; 
} 

x[i] = parsed; 
Console.WriteLine(parsed); 

這將趕上FormatException,打印它所couldn沒有閱讀,並進入下一個迭代循環。如果它沒有遇到異常,它將打印解析後的double。

你可以看到除了在這裏詳細描述:http://msdn.microsoft.com/en-us/library/zh1hkw6k.aspx

+0

謝謝你這樣做的工作,但無論如何,它可以使用雙數組?我需要它是一個數組。 – 2013-04-12 12:13:09

+0

@TireniDada忘了將x [i]實際設置爲解析值。看到我的編輯 - 就在最後一個'WriteLine'之前 – tnw 2013-04-12 12:48:50

+0

歡呼的人感謝很多 – 2013-04-13 11:01:49

-1

也許你正在閱讀的最後一行,並沒有相應的價值在那裏,所以當你試圖抓住轉換異常。在FOR中試試fields.Length-1。或者像@羅伯特哈維說的那樣,你的一個價值觀冷落不了。

+1

嗯......你會認爲他會得到一個「索引超出範圍」的錯誤。這可能仍需要解決,但報告的問題很可能是在「i」變得太大之前發生的解析錯誤。問題很可能出現在文件的* first *輸入行中。 – 2013-04-11 21:07:26

0

根據MSDNStreamReader的構造函數的參數必須是文件的完整路徑,而不僅僅是相對路徑。來自頁面:

完整的文件路徑由路徑參數指定。此構造函數將編碼初始化爲UTF8Encoding,緩衝區大小爲1024字節。

當它告訴你文件無法被讀取時,它看起來像是指向IOException是問題所在。

+0

OP在自己的代碼中寫入消息「無法讀取文件」。 – 2013-04-11 21:05:36

+0

Bah,只需重新讀取您打印異常的代碼。我看到文件沒有被讀取是你添加的東西。儘管如此,請嘗試將構造函數參數更改爲完整路徑並查看是否有幫助。 – 2013-04-11 21:07:01

0

你必須確保你的StreamReader路徑訪問。例如,嘗試改變路線:

using (StreamReader sr = new StreamReader("test.txt")) 

沿着線的東西...

using (StreamReader sr = new StreamReader("C:\\Zach\\Documents\\test.txt")) 

這就是我所做的唯一的變化,我可以看到控制檯打印每個值作爲雙。