c#拆分字符串并将拆分值赋给另一个变量

本文关键字:拆分 变量 另一个 字符 字符串 串并 | 更新日期: 2023-09-27 18:04:17

我试图分割字符串并分配不同的值。它返回给我的字符串是: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("|");它说:"最好的重载方法匹配字符串。Split(params char[])有一些无效参数。它还说参数不能转换为char。什么好主意吗?

c#拆分字符串并将拆分值赋给另一个变量

与其使用旧的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

添加

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

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

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

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

这样的字符串。例如,分割(因此您可以输入var s = sData.Split('|');)

一种相当于String.Left

的方法

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

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

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

  • 在你的代码的顶部添加right using: using Microfost.VisualBasic;

你需要做s = sData.Split("|");