在数据对之间用CRLF解析逗号分隔的成对数字串

时间:2011-09-27 22:58:10

标签: c# csv serial-port string-parsing

我正在使用C#。 我仔细研究了这些例子,并试了好几个小时。这种情况不同。我找不到解决方案。

我从串口上的设备捕获了一个长字符串。 字符串的格式为:

  

整数,integerCRLFinteger,integerCRLF

(重复...)。结束CRLF。

如果您在RichTextBox中显示此字符串,它看起来像:

2442,6266
7727,2727
6320,272
etc... 

因此,字符串的格式是

  

TextWhichIsAnInteger,TextWhichIsAIntegerCRLF

(重复)。

我想把它变成int类型的两个数组(或列表)。 并且,作为奖励,分为2列数组或成对的int列表。 这让我疯了。如果你可以帮助提供代码,我将非常感激,并将永远崇拜你。

3 个答案:

答案 0 :(得分:2)

这样的东西?从我的头顶。未经测试。但它应该给你这个想法。

using System.Collections.Generic;

List<int> aTypes = new List<int>();
List<int> aValues = new List<int>();

string sInput = "1234,5678\n9876,4321\n";
// Split by linebreak.
string[] aLinebreaks = sInput.Split('\n');
foreach(string sNumericString in aLineBreaks)
{
  // Split by comma.
  string[] aNumbers = sNumericString.Split(',');
  aTypes.Add(Convert.ToInt32(aNumbers[0]);
  aValues.Add(Convert.ToInt32(aNumbers[1]);
}

...

aTypes.ToArray();
aValues.ToArray();

答案 1 :(得分:1)

为什么。更换.Split?

此外,元组是很好的配对工具。

    string myNumbers = "123,456,789\r\n";
    myNumbers += "123,456,789\r\n";
    var delimiters = new[] {"\r\n"};
    string[] lines = myNumbers.Split(delimiters, StringSplitOptions.None);
    var result = new List<Tuple<int, int>>();
    foreach (var line in lines)
    {
        var integers = line.Split(',');
        result.Add(Tuple.Create(Int32.Parse(integers[0]), Int32.Parse(integers[1])));
    }

答案 2 :(得分:0)

这样的事情对你有用吗?

string input = "2442,6266\r\n7727,2727\r\n1234,1234";

string[] numberGroup = input.Replace("\r\n", ":").Split(':');
IDictionary<int,int> numberPairs = new Dictionary<int, int>();
foreach(string str in numberGroup)
{
    string[] pair = str.Split(',');
    numberPairs.Add(Convert.ToInt32(pair[0]), Convert.ToInt32(pair[1]));
}


foreach(int key in numberPairs.Keys)
{
    Console.WriteLine("Number Pair: [{0}]:[{1}]", key, numberPairs[key]);
}

//Output:
//Number Pair: [2442]:[6266]
//Number Pair: [7727]:[2727]
//Number Pair: [1234]:[1234]

修改

如果你不想复制,就像Pano指出的那样,但是我会告诉拆分器删除空结果,这样它就不会在转换区域中的某个索引调用上爆炸。

string input = "2442,6266\r\n7727,2727\r\n1234,1234";

string[] numberGroup = input.Split(new[]{"\r\n"}, StringSplitOptions.RemoveEmptyEntries);
IList<Tuple<int, int>> numberPairs = new List<Tuple<int, int>>();
foreach(string str in numberGroup)
{
    string[] pair = str.Split(',');
    numberPairs.Add(Tuple.Create(Convert.ToInt32(pair[0]), Convert.ToInt32(pair[1])));
}


foreach(Tuple<int,int> item in numberPairs)
{
    Console.WriteLine("Number Pair: [{0}]:[{1}]",item.Item1, item.Item2);
}