解析固定宽度,插入数组。怎么样?

时间:2013-04-05 16:39:44

标签: c#

我正在尝试解析Powerball lottery text file,将6列中的每一列添加到他们自己的数组中,然后稍微玩一下。

以下是数据示例:

Draw Date   WB1 WB2 WB3 WB4 WB5 PB  PP
04/03/2013  35  08  12  01  06  03  
03/30/2013  23  46  11  26  55  27  
03/27/2013  43  48  07  37  52  16  
03/23/2013  29  53  52  17  31  31  
03/20/2013  43  17  14  13  54  15  
03/16/2013  44  53  07  21  03  16  
...

这就是我的想法:

int[] column1 = new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int[] column2 = new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int[] column3 = new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int[] column4 = new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int[] column5 = new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int[] column6 = new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

只需要一点解析功能。像PHP的爆炸功能会很好。

3 个答案:

答案 0 :(得分:3)

基本操作模式:拆分为行,按分隔符拆分,处理数据。一个简单的解析函数可能是:

var cli = new WebClient();
var raw = cli.DownloadString("http://www.powerball.com/powerball/winnums-text.txt");
var lines = raw.Split('\n');
var records = from line in lines.Skip(1)
              let parts = line.Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries)
              select new {
                Date = DateTime.Parse(parts[0], CultureInfo.InvariantCulture),
                Numbers = parts.Skip(1).Take(6).Select(x => int.Parse(x))
              };

答案 1 :(得分:0)

我认为您需要拆分功能

"text and stuffz".Split('\n');

答案 2 :(得分:0)

如果您喜欢固定宽度方法而不是拆分(但拆分更容易),您可以使用子字符串函数:

DateTime date = DateTime.ParseExact(line.Substring(0, 10), "MM\\/dd\\/yyyy");
string[] nums = new string[6];
nums[0] = line.Substring(12, 2).Trim();
nums[1] = line.Substring(16, 2).Trim();
etc...

string[] nums = new[]
    {
        line.Substring(12, 2).Trim(),
        line.Substring(16, 2).Trim(),
        etc...
    };