2011-04-14 31 views
0

夥計們,對於基本問題感到抱歉。我試圖找出,但我仍然堅持下去。我是編程新手,所以如果你們能幫助我,那就意味着很多。謝謝。 對於此代碼我得到了本網站某人的幫助。將字符串轉換爲int32,同時添加datagrid項目

這裏是我的問題,我有這樣的

10192 20351 30473 40499 50449 60234 

10192 20207 30206 40203 50205 60226 

10192 20252 30312 40376 50334 60252 

.txt的數據,這是我的代碼,在那裏我打開文本文件,並解析成數,並把它的6列數據網格。

所以我的數據原來是這樣在數據網格:1

柱|柱2 |列3 | 4欄|柱5 | 6欄

10192 | 20351 | 30473 | 40499 | 50449 | 60234

private void Parsing_String(string filename) 
    { 
     List<Row> list = new List<Row>(); 

     foreach (String str in File.ReadLines(filename)) 
     { 
      String[] strCols = str.Split(Convert.ToChar(" ")); 
      list.Add(new Row() 
      { 
       Column1 = strCols[0].Substring(2), 
       Column2 = strCols[1].Substring(2), 
       Column3 = strCols[2].Substring(2), 
       Column4 = strCols[3].Substring(2), 
       Column5 = strCols[4].Substring(2), 
       Column6 = strCols[5].Substring(2), 
      }); 
     } 



     dg.ItemsSource = list; 
    } 

    public class Row 
    { 
     public string Column1 { get; set; } 
     public string Column2 { get; set; } 
     public string Column3 { get; set; } 
     public string Column4 { get; set; } 
     public string Column5 { get; set; } 
     public string Column6 { get; set; } 

    } 

我想要做的是,我需要按順序依次逐行放入一些數學方程。我需要將字符串轉換爲int。但我不知道如何,我做了一些嘗試但失敗了。

例如: 首先我把第一行的行放在datagrid中包含6組數字並計算出來。接下來,第二行。等等。我怎樣才能得到我想要的數字並將其放入數學公式中。

謝謝無論如何。

回答

0

採取flq的例子有點遠,我不會指望的數據,並會做這樣的事情,所以如果解析失敗你得到一個0 - 除非你想捕捉異常並以不同的方式處理。

int outValue; 
list.Add(new Row() 
      { 
       Column1 = int.TryParse(strCols[0].Substring(2), out outValue) ? outValue : 0;, 
       ... 
+0

謝謝,但我的子串怎麼樣?我不能用int.tryparse – Reza 2011-04-14 17:26:14

+0

這不會工作? Column1 = int.TryParse(strCols [0] .Substring(2),out outValue)? outValue:0 ;, – Chuck 2011-04-14 18:06:33

+0

是的,它的工作原理,謝謝,現在Column1中的值應該是int對嗎?不再是字符串了? – Reza 2011-04-14 18:10:41

0

您需要使用Int32.TryParse將字符串轉換爲int32s。

+0

是的,但我把它放在哪裏。 – Reza 2011-04-14 16:49:20

+0

他可以避免TryParse的開銷,如果他知道事實上是一個有效的整數。 – Nik 2011-04-14 16:51:25

+1

着名的遺言 – Barry 2011-04-14 17:27:50

1

如果您使用綁定的數據,不應該有存儲轉換後的值入行的一個問題:

list.Add(new Row() 
      { 
       Column1 = int.Parse(strCols[0]), 
       ... 

無論UI的東西,你放在上面,它會調用toString()就可以了無論如何,並顯示爲字符串的東西。因此,你的行對象有6個整數。

在一個小紙條,在C#中,你可以代表單引號字符,分裂就變成了:str.Split(' ')

更多的優雅,你可以有你行對象內部的解釋權通過傳遞單行將文件放入構造函數中並在構造函數中執行拆分。然後你可以讓行上的私服。 foreach循環就變成了:

dg.ItemsSource = File.ReadLines(filename).Select(line => new Row(line)).ToList(); 
+0

謝謝你。 str.Split('')用於空白區域嗎?它的工作。但是關於我的Substring?它不能與int.Parse一起工作。 – Reza 2011-04-14 17:20:53

+0

新行(行)是什麼行?這段代碼可以給我一個獨立的訪問每個單元格嗎? – Reza 2011-04-14 17:48:08

+0

單引號表示一個字符,例如'一個' 。我不知道你的子字符串是什麼,但你可以嘗試解析任何字符串。您示例中的數字是可解析的。如果它不解析FormatException則拋出。注意你傳遞給Parse的字符串。 「選擇」是一個所謂的高階函數,查找它。它通過枚舉例如字符串。 「line」是Select範圍內的一個變量,但我認爲您應該跳過該部分並繼續進行您想要的操作。 – flq 2011-04-14 18:27:52