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

C# 在数据对之间使用CRLF解析逗号分隔的成对数字字符串,c#,csv,serial-port,string-parsing,C#,Csv,Serial Port,String Parsing,我用的是C#。 我搜遍了这些例子,试了几个小时。这种情况是不同的。我找不到解决办法 我有一个从串行端口上的设备捕获的长字符串。 字符串的格式为: 整数,integerCRLFinteger,integerCRLF (重复…)。以CRLF结尾 如果您在RichTextBox中显示此字符串,它看起来像: 2442,6266 7727,2727 6320,272 etc... 同样,字符串的格式是 text whichisan整数,text whichisan EGERCRLF (重复) 我想把它

我用的是C#。 我搜遍了这些例子,试了几个小时。这种情况是不同的。我找不到解决办法

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

整数,integerCRLFinteger,integerCRLF

(重复…)。以CRLF结尾

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

2442,6266
7727,2727
6320,272
etc... 
同样,字符串的格式是

text whichisan整数,text whichisan EGERCRLF

(重复)

我想把它分成两个int类型的数组(或列表)。 作为奖励,将其放入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();
使用System.Collections.Generic;
列表类型=新列表();
List aValues=新列表();
字符串sInput=“12345678\n98764321\n”;
//按换行符拆分。
字符串[]aLinebreaks=sInput.Split('\n');
foreach(以aLineBreaks为单位的字符串sNumericString)
{
//用逗号分开。
string[]aNumbers=sNumericString.Split(',');
aTypes.Add(转换为32(数量[0]);
aValues.Add(转换为32(数量[1]);
}
...
aTypes.ToArray();
aValues.ToArray();

像这样的东西对你有用吗

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]
string input=“24426266\r\n772727\r\n12341234”;
字符串[]numberGroup=input.Replace(“\r\n”,“:”).Split(“:”);
IDictionary numberPairs=新字典();
foreach(numberGroup中的字符串str)
{
string[]pair=str.Split(',');
numberPairs.Add(Convert.ToInt32(对[0]),Convert.ToInt32(对[1]);
}
foreach(numberPairs.Keys中的int键)
{
WriteLine(“数字对:[{0}]:[{1}]”,key,numberPairs[key]);
}
//输出:
//数字对:[2442]:[6266]
//数字对:[7727]:[2727]
//数字对:[1234]:[1234]
编辑

如果你不想重复,就像帕诺指出的那样,有这样的方法,但我会告诉拆分器删除空结果,这样它就不会在转换区域中的一个索引调用中爆炸

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);
}
string input=“24426266\r\n772727\r\n12341234”;
string[]numberGroup=input.Split(新[]{“\r\n”},StringSplitOptions.RemoveEmptyEntries);
IList numberPairs=新列表();
foreach(numberGroup中的字符串str)
{
string[]pair=str.Split(',');
numberPairs.Add(Tuple.Create(Convert.ToInt32(对[0]),Convert.ToInt32(对[1]));
}
foreach(numberPairs中的元组项)
{
WriteLine(“数字对:[{0}]:[{1}]”,item.Item1,item.Item2);
}

为什么。然后替换。拆分

此外,元组是制作成对的好工具

    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])));
    }
string myNumbers=“123456789\r\n”;
MyNumber+=“123456789\r\n”;
var delimiters=new[]{“\r\n”};
string[]line=myNumbers.Split(分隔符,StringSplitOptions.None);
var result=新列表();
foreach(行中的var行)
{
var integers=line.Split(',');
Add(Tuple.Create(Int32.Parse(整数[0]),Int32.Parse(整数[1]));
}

是的,字符串解析肯定在这里处理过一百万次了…,谢谢你Krumelur!你是da man。谢谢你非常优雅和非常快速的回复。很抱歉我的回复太晚了——我以为stackoverflow会在我得到答复时给我发电子邮件。不管怎样,我真傻。很好的解决方案。干杯!ken…很高兴。如果您认为答案解决了您的问题,请接受。嗨,Krumelur,我使用了您的方法,它工作得很好,对我的应用程序来说用途非常广泛。我正在使用ZedGraph库绘制数据。它太酷了。在ZedGraph中,我们以各种方式加载“PointPairList”(它过载),因此我们可以执行myPointPairList.add(flt1,flt2),或myPointPairList.add(fltArray1,fltArray2)。无论如何,我试图将您的代码封装在一个函数中,如public void strtaries(str,ref Array1,ref Array2)。但在调用之前,我遇到了错误,如“无法生成单元化数组”.有什么想法吗?我如何在调用之前声明/初始化数组。可能是在类中?我事先不知道它们的大小。这是一个新问题。但简而言之:var aYourArray=new string[];strtoroarries/str,ref aYourArray){aYourArray=aTypes.ToArray();}-只是转换列表()请获取一本关于basi.NET/C#开发的书或教程。如果任何两对共享相同的第一个元素,这将不起作用。例如:
“10,11\r\n12,13\r\n10,14”
哇!回答很酷..谢谢你快速而优雅的回答…我正要测试它,我从来不知道如何使用字典,这真的很方便。回答很好,谢谢…肯..是的,字典非常方便,但我经常忘记,如果钥匙不是唯一的,它们就不能使用。这就是我提醒你的原因。骑师:)