.net分割奇数和偶数管道分隔数据的方法

时间:2010-01-20 23:10:36

标签: c# .net

我有一系列以管道分隔格式的数据,其中奇数条目是索引号,偶数条目就是数据,例如。

1|cat|2|dog|3|manatee|4||5|gerbil|6|etc

(注意偶尔缺少值)

我想知道是否有一种很好的.NET类型方法可以将其转换为具有id和name参数的类宠物。

我有一些代码执行String.Split并迭代数组,将对象拼凑在一起,但它看起来更像是我正在编写PL / SQL而不是C#...我确信有一种在Linq或者其他方面做到这一点的方法 - 任何人都可以告诉我“正确”的方式吗?

由于

3 个答案:

答案 0 :(得分:3)

您可以使用TextFieldParser类来处理将字符串解析为字段(我知道它是VB类,但您可以从C#访问它)。然后只需将交替的字段设置为新对象。

以下是MSDN中的示例,更改为C#:

using (Microsoft.VisualBasic.FileIO.TextFieldParser MyReader = 
       new Microsoft.VisualBasic.FileIO.TextFieldParser("C:\\testfile.txt")) 
   { 
        MyReader.TextFieldType = FileIO.FieldType.Delimited; 
        MyReader.SetDelimiters(","); 
        string[] currentRow = null; 
        while (!MyReader.EndOfData) 
        { 
            try 
            { 
                currentRow = MyReader.ReadFields(); 
                string currentField = null; 
                foreach (var currentField in currentRow) 
                { 
                    //set values for your object here
                } 
            } 
            catch (Microsoft.VisualBasic.FileIO.MalformedLineException ex) 
            { 
              //handle the exception
            } 
        } 
    } 

答案 1 :(得分:1)

这就是我这样做的方式,它起作用,但似乎不是'.NET'的做法......

public List<Pet> CreatePets(String PetData)
{
     List<Pet> PetList = new List<Pet>();
     string[] PetArray = PetData.Split(new char[]{'|'}, StringSplitOptions.None);
     for (int i = 0; i < PetArray.Count(); i += 2)
     {
         Pet NewPet= new Pet(Convert.ToInt32(PetArray[i]), PetArray[i+1]);
         PetList.Add(Field);
     }                
     return PetList;
}

答案 2 :(得分:0)

这是我用“|”拆分字符串数组的解决方案。它在GridView列中运行良好。

Public Function GridViewColumnsWidths(ByVal Gridview As GridView, ByVal ColumnNameCommaWidth As String) As Boolean
                Dim i As Boolean
                Dim ArrayOfItem As String() = Split(ColumnNameCommaWidth, "|",, CompareMethod.Text) 'eg: "ColA|200|ColB|100|ColC|300"
                For IndexOfItem As Integer = 0 To ArrayOfItem.Count - 1
                    Dim Column As String = ArrayOfItem(IndexOfItem)
                    Dim Width As Integer = Convert.ToInt16(ArrayOfItem(IndexOfItem + 1))
                    With Gridview.Columns
                        .Item(Column).Width = Width
                    End With
                    IndexOfItem += 1
                Next
                Return i
            End Function