繁体   English   中英

在C#中基于两个定界符分割字符串

[英]Split string based on two delimiter in C#

问题 -我有一个文件(info.ref),其中包含特定格式的信息(参考ID |电子邮件地址),例如:

ref1|a@a.com,b@b.com,c@c.com   
ref2|c@c.com,d@d.com

我还从另一个文件(例如ref1)中获取参考ID,我需要遍历此文件,然后希望将电子邮件发送到与此参考ID相关联的所有电子邮件ID。

我尝试过的

 using (var streamReader = new StreamReader("info.ref"))
                            {
                                string line1="";
                                while((line1 = streamReader.ReadLine()) != null)
                                {
                                    var parameters =
                                       from line11 in line1
                                       let split = line1.Split('|')
                                       select new { name = split.First(), value = split.Skip(1) };

                                   //email logic to be written


                                }

问题 -如何从此“参数”获取电子邮件列表。

注意 -我知道我可以用“ |”分割字符串 作为分隔符,然后再次用“,”分隔并存储在数组中。但是有人可以指导我编写的代码有什么问题以及如何获取电子邮件地址吗?哪种方法更好?

提前致谢。

您尚未按逗号分隔电子邮件,并且循环中不需要LINQ查询:

string[] tokens = line1.Split('|');
if(tokens.Length >= 2)
{
    string name = tokens[0];
    string[] emails = tokens[1].Split(',');
}

如果您正在学习LINQ,则可以使用File.ReadLines和以下查询:

var allInfos = from line in System.IO.File.ReadLines("info.ref")
               let tokens = line.Split('|')
               where tokens.Length >=  2
               select new { name = tokens[0], emails = tokens[1].Split(',') };

foreach(var info in allInfos)
    Console.WriteLine("Name:{0} Emails{1}", info.name, String.Join(",", info.emails));

您还可以按多个分隔符进行拆分(假设ref cannont包含, char):

var emails = line1.Split('|', ',').Skip(1); //skipping ref

要么:

var splitted = line1.Split('|', ',');
var paramerers = 
       new 
       {
           name = splitted.FirstOrDefault(), //for case of empty line
           value = spliited.Skip(1)
       };

//usage
var emails = parameters.value.ToArray(); // f.e.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM