2016-03-16 76 views
0

我正在使用C#将TCP/IP套接字数据作为字符串读取(例如,在PLC编程代码中输入LREAL值,例如'2.2214E-18'),然后插入到MongoDB中。但是,我不想在插入字符串时指定数据库的名称,而是希望将其与字符串一起使用。然后,我想分割字符串并在程序的各个部分使用这些部分。C#:在读取TCP字节流后分割字符串

有什么办法可以做到这一点?

我的目标是在PLC端将字符串'2.2214E-18 database_name collection_name'分配给C#代码。

对于读取字节流,这个代码特定块用于:

TcpClient client = new TcpClient(hostName, portNum);
StreamReader sr = new StreamReader(client.GetStream());
line = sr.ReadToEnd();

期待您的回复。

回答

0

做到这一点:

string[] plcInfo = line.Split(); 

string[] plcInfo = line.Split(null); 

或:

string[] plcInfo = line.Split(new char[0]); 

,你会得到2串在一个阵列中,第一个元素必须是2.2214E- 18和第二个database_name collection_nam Ë

+0

第二个字符串是否可以进一步分为2个字符串,如database_name中的一个,另一个中的collection_name? – Arjun

+0

或只是'line.Split();' –

+0

是的,当然...你可以分裂不止一次 –

0

您的实际问题似乎是:

在一个字符串,其格式我控制,我怎么可以存储以后可以拆分多个值吗?

答案是非常微不足道的:你需要一个分隔符。选择分隔符是困难的部分,它必须是永远不会出现在您希望存储的值中的分隔符。

在这种情况下,管道字符(|)似乎是一个安全的选择。因此,让你的字符串是这样的:

string input = "2.2214E-18|database_name|collection_name"; 

那么可以拆分对字符和检索单独的值:

string[] output = input.Split('|'); 

然后确保在使用它之前验证输出:

if (output.Length != 3) 
{ 
    throw new ArgumentException("input", "Useful error message here"); 
} 

string value = output[0]; 
string databaseName = output[1]; 
string collectionName = ouput[2]; 
+0

是的,这正是我我在找,谢谢,我会检查一下管道功能。 – Arjun