2011-04-14 33 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