我正在尝试拆分字符串并分配不同的值。它返回给我的字符串是: 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。任何想法?
答案 0 :(得分:2)
这些方法来自Microsoft.VisualBasic
命名空间。只有在你知道自己在做什么的情况下才能使用它们(参见Tim对这个答案的评论)。
我不建议你使用这些方法。
它们是c#中的等效方法(或者它们很容易实现)。
例如,像String.Split一样(所以你可以做var s = sData.Split('|');
)
way to do something equivalent到String.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;);