C#拆分字符串并将拆分值分配给另一个变量

时间:2014-05-19 16:11:10

标签: c# arrays string variables split

我正在尝试拆分字符串并分配不同的值。它返回给我的字符串是: 0077 | PCK | PRD | 05025066840471 | 4 |开罐器| 1 | 10 | B | 20.00 | 0 | 100 | 0 | 0.00 | 0 | 0 | 1 | 0 | 0

所以我想把字符串拆分为“|”并将它们分配给另一个变量。这就是我试图做的事情:

         public static void LoadPRD(string sData)
    {
        string[] s = null;
        prdType PRD = new prdType();
        s = sData.Split("|");


        PRD.bCode = s.Left(s[0], 14);
        PRD.PCode = s.Left(s[1], 12);
        PRD.Desc = s.Left(s[2], 40);
        PRD.Pack = s.Val(s[3]);
        PRD.Unit = s.Left(s[4], 12);
        PRD.VATCode = s.Left(s[5], 1);
        PRD.VATRate = Conversion.Val(s[6]);
        PRD.Cost = Conversion.Val(s[7]);
        PRD.Sell = Conversion.Val(s[8]);
        PRD.Stock = Conversion.Val(s[9]);
        PRD.AWS = Conversion.Val(s[10]);
        PRD.OnOrder = Conversion.Val(s[11]);
        PRD.OrderQty = Conversion.Val(s[12]);
        PRD.LabelQty = Conversion.Val(s[13]);
        PRD.Restriction = s.Left(s[14], 1);
        PRD.MinStock = s.Val(s[15]);
        PRD.PromoCode = s.Left(s[16], 3);
        PRD.MnM = s.Left(s[17], 3);


    }

错误消息表明字符串在上下文中不存在,但它不是一个有用的信息,我明白这意味着什么,但我对如何处理解决方案感到非常困惑。

您知道,我确实事先创建了变量,我已将它们发布在下面:

public struct prdType
    {
        public string bCode;
        public string PCode;
        public string Desc;
        public Int16 Pack;
        public string Unit;
        public string VATCode;
        public float VATRate;
        // Stored in pence
        public long Cost;
        public long Sell;
        public long Stock;
        public float AWS;
        public long OnOrder;
        public long OrderQty;
        public long LabelQty;
        public string Restriction;
        public long MinStock;
        public string PromoCode;

    }

非常感谢您的帮助。 感谢。

编辑:

在     s = sData.Split(“|”); 它说:“string.Split(params char [])的最佳重载方法匹配有一些无效的参数。它还说参数不能转换为char。任何想法?

3 个答案:

答案 0 :(得分:2)

这些方法来自Microsoft.VisualBasic命名空间。只有在你知道自己在做什么的情况下才能使用它们(参见Tim对这个答案的评论)。

我不建议你使用这些方法。

它们是c#中的等效方法(或者它们很容易实现)。

例如,像String.Split一样(所以你可以做var s = sData.Split('|');

way to do something equivalentString.Left

不建议这样做,但无论如何:

如果你想绝对使用它们,你应该:

  • 添加对Microsoft.VisualBasic程序集的引用(右键单击项目的引用,您应该在Framework库中找到它)

  • 使用代码顶部的权限添加:using Microfost.VisualBasic;

答案 1 :(得分:2)

我建议不要使用传统的VB方法,而是一直使用C#方法。

string[] s =  sData.Split('|');

使用Strings.Left并不是很明显。由于您已经分割了该行,因此您将完整地分割该分割的每个元素。如果您只想使用第一个n字符,则可以执行此操作,但C#中没有Strings.Left的内置等效字符。

对于那些不同类型的元素,您可以使用Convert.ToX

PRD.Pack = Convert.ToInt16(s[3]));

PRD.VATRate = Convert.ToSingle(s[6]));

PRD.Cost = Convert.ToInt64(s[7]);

等等。请注意,float使用Convert.ToSingle,而非Convert.ToFloat

<强> ADDED

根据@ Raphael的评论,Convert.ToX不是Conversion.Val()的直接替代品,但只要字符串是严格数字的,您就可以获得正确的类型。

答案 2 :(得分:0)

你需要做一个= Data.Split(n#39; |&#39;);