/// <summary> /// /// </summary> /// <param name="input"> /// "\"NodeLayerModules\" STRING ;" /// "\"GenSigStartValue\" INT -2147483648 2147483647;" /// "\"ModeTransmission\" ENUM \"P\",\"E\",\"P+E\";" /// </param> /// <returns></returns> public AttributeDefinitionObjectItem Parse(string input) { string temp = input.Trim(';', ' '); string[] array = temp.Split('"'); Name = array[1]; if (temp.Contains("STRING")) { AttributeType = new AttributeStringDefinition(); } else if (temp.Contains("INT")) { temp = array[2].Trim(); array = temp.Split(' '); AttributeType = new AttributeIntegerDefinition(DbcDatabase.ParseStringToInt32(array[1]), DbcDatabase.ParseStringToInt32(array[2])); } else if (temp.Contains("ENUM")) { AttributeType = new AttributeEnumDefinition(); for (int i = 3; i < array.Length; i += 2) { (AttributeType as AttributeEnumDefinition).Items.Add(array[i]); } } return(this); }
/// <summary> /// /// </summary> /// <param name="input">"CM_ SG_ 4 EM_State_Signal \"Jel megjegyzés\";"</param> /// <returns></returns> public DbcSignalCommentItem Parse(string input) { string[] array = input.Split(' '); ArbitrationId = DbcDatabase.ParseStringToInt32(array[2]); Name = array[3]; Comment = input.Substring(input.IndexOf('"')).Trim(new char[] { ';', ' ', '"' }); return(this); }
/// <summary> /// /// </summary> /// <param name="input">CM_ BO_ 2 "Single Line Comment";</param> /// <returns></returns> public DbcMessageCommentItem Parse(string input) { string remain = input.Substring("CM_ BO_".Length).Trim(' '); ArbitrationId = DbcDatabase.ParseStringToInt32(remain.Substring(0, remain.IndexOf('"')).Trim(' ')); Comment = remain.Substring(remain.IndexOf('"')).Trim(new char[] { '"', ';' }); return(this); }
/// <summary> /// /// </summary> /// <param name="input">"BA_ \"GenSigStartValue\" SG_ 31 REVCCEN_SER 1;"</param> /// <returns></returns> public SignalAttributeValueObjectItem Parse(string input) { string temp = input.Substring("BA_".Length).Trim(' ', ';'); string[] array = temp.Split('"'); Name = array[1]; temp = array[2]; array = temp.Split(' '); ID = DbcDatabase.ParseStringToInt32(array[2]); SignalName = array[3]; Value = array[4]; return(this); }
/// <summary> /// /// </summary> /// <param name="input"> /// "BO_ 143 ERROR_INDICATORS_1: 8 DGT" /// </param> /// <returns></returns> public MessageObjectItem Parse(string input) { string reamin = string.Empty; string[] array = input.Split(' '); int offset = 0; if (array[offset++] == "BO_") { ArbitrationId = DbcDatabase.ParseStringToInt32(array[offset++]); Name = array[offset++].Trim(new char[] { ' ', ':' }); Size = DbcDatabase.ParseStringToInt32(array[offset++]); for (; offset < array.Length; offset++) { TransmitterNodes.Names.Add(array[offset]); } } return(this); }
/// <summary> /// /// </summary> /// <param name="input">Sample: "BO_TX_BU_ 1 : DEMO_NODE,OMRON_NODE,PC_NODE;"</param> /// <returns></returns> public MessageTransmittersObject Parse(string input) { input = input.Trim(';'); string[] array = null; if (input.Contains("BO_TX_BU_")) { /*left*/ array = input.Split(':'); ArbitrationId = DbcDatabase.ParseStringToInt32(array[0].Split(' ')[1]); /*right*/ array[1] = array[1].Trim(' '); foreach (string name in array[1].Split(',')) { TransmitterNames.Add(name); } } return(this); }
/// <summary> /// /// </summary> /// <param name="input"> /// "VAL_TABLE_ ValueTableItem1 3 \"Érték leírása 0x03\" 2 \"Érték leírása 0x02\" 1 \"Érték leírása 0x01\" 0 \"Érték leírása\" ;" /// </param> /// <returns></returns> public ValueTableObjectItem Parse(string input) { string remain = string.Empty; string[] array = input.Split(' '); if ("VAL_TABLE_" == array[0]) { remain = input.Substring("VAL_TABLE_".Length); Name = remain.Split(' ')[1]; remain = remain.Substring(Name.Length + 1).Trim(' '); array = remain.Split('"'); for (int i = 0; i < (array.Length - 1); i += 2) { Descriptions.Add(new ValueDescriptionItem(DbcDatabase.ParseStringToInt32(array[i]), array[i + 1])); } } return(this); }
/// <summary> /// /// </summary> /// <param name="input">Sample: "VAL_ 31 DMD_DARK 0 "pas de demande" 1 "Dark 0 demandé" 2 "Dark 2 demandé" 3 "Invalide" ;"</param> /// <returns></returns> public SignalValueDescriptionsItem Parse(string input) { string remain = string.Empty; string[] array = input.Split(' '); if ("VAL_" == array[0]) { remain = input.Substring("VAL_".Length); string arbIdStr = remain.Split(' ')[1]; ArbitrationId = DbcDatabase.ParseStringToInt32(arbIdStr); Name = remain.Split(' ')[2]; remain = remain.Substring(Name.Length + arbIdStr.Length + 2).Trim(new char[] { ' ', ';' }); array = remain.Split('"'); for (int i = 0; i < ((array.Length - 1)); i += 2) { Descriptions.Add(new ValueDescriptionItem(DbcDatabase.ParseStringToInt32(array[i]), array[i + 1])); } } return(this); }
void Parse(string[] lines) { string currentKeyword = "VERSION"; string multiLineTemp = string.Empty; string keyword = string.Empty; bool complete = true; var messageTemp = new MessageObjectItem(); int lineIndex = 0; string nextLine = string.Empty; for (lineIndex = 0; lineIndex < lines.Length; lineIndex++) { string line = lines[lineIndex]; if (complete) { currentKeyword = DbcDatabase.GetKeyword(line); } switch (currentKeyword) { case "VERSION": { Dbc.Version.Parse(line); complete = true; break; } case "NS_": /*Version and New Symbol Specification*/ { multiLineTemp += line; if (string.IsNullOrEmpty(line)) { multiLineTemp = string.Empty; complete = true; } else { complete = false; } break; } case "BS_:": /*Bit Timing Definition*/ { Dbc.Timing.Parse(line); complete = true; break; } case "BU_:": /*Node Definitions*/ { Dbc.Nodes.Parse(line); complete = true; break; } case "VAL_TABLE_": /*Value Table Definitions*/ { Dbc.ValueTable.Add(new ValueTableObjectItem().Parse(line)); complete = true; break; } case "VAL_": /*Signal Value Descriptions (Value Encodings)*/ { Dbc.SignalsDescriptions.Add(new SignalValueDescriptionsItem().Parse(line)); complete = true; break; } case "BO_": /*Message*/ { messageTemp = new MessageObjectItem().Parse(line); Dbc.Messages.Add(messageTemp); complete = true; break; } case "SG_": /*Definition of Message Transmitters*/ { messageTemp.Signals.Add(new SignalItemObject().Parse(line)); complete = true; break; } case "CM_": /*Comment Definitions*/ { multiLineTemp += line; if (line.EndsWith(";", StringComparison.InvariantCulture)) { Dbc.Comment.Parse(multiLineTemp); multiLineTemp = string.Empty; complete = true; } else { multiLineTemp += "\r\n"; complete = false; } break; } case "BA_DEF_": { multiLineTemp += line; if (line.EndsWith(";", StringComparison.InvariantCulture)) { Dbc.AttributeDefinition.Parse(multiLineTemp); multiLineTemp = string.Empty; complete = true; } else { multiLineTemp += "\r\n"; complete = false; } break; } case "BA_": /*Attribute Values*/ { Dbc.AttributeValue.Parse(line); complete = true; break; } default: { complete = true; break; } } } }
public void LoadFile(string path) { string[] line = DbcDatabase.ReadFileToStringArray(path); Parse(line); }
public DbcImporter() { Dbc = new DbcDatabase(); }
/// <summary>http://www.thewindowsclub.com/enable-old-windows-clock-calendar-windows-10 /// /// </summary> /// <param name="input"> /// "SG_ COUNT_LINE_FAULT_ERRORS_MAX M : 55|16@0+ (1,0) [0|65535] \"ms\" PC" /// "SG_ DATATION_APPUI_3 : 39|16@0+ (0.1,0) [0|6553.5] \"ms 1\" PC" /// </param> /// <returns></returns> public SignalItemObject Parse(string input) { int offset = 0; string[] array; if (input.Contains("SG_")) { /*LEFT:*/ /*Name,MultiplesxerIndicator*/ string left = input.Substring(0, input.IndexOf(':')).Trim(' '); array = left.Split(' '); Name = array[++offset]; if (array.Length >= offset + 2) { MultiplesxerIndicator = array[++offset]; } else { MultiplesxerIndicator = string.Empty; } /*:RIGHT*/ string right = input.Substring(input.IndexOf(':') + 1).Trim(' '); /*Unit*/ offset = 0; array = null; string temp = string.Empty; temp = right.Substring(right.IndexOf('"') + 1); if (temp.Contains('"')) { Unit = temp.Substring(0, temp.IndexOf('"')); } else { Unit = string.Empty; } /*Minimum, Maximum*/ offset = 0; array = null; temp = string.Empty; temp = right.Substring(right.IndexOf('[') + 1, right.IndexOf(']') - right.IndexOf('[') - 1); array = temp.Split('|'); Minimum = DbcDatabase.ParseStringToDouble(array[offset++]); Maximum = DbcDatabase.ParseStringToDouble(array[offset++]); /*Factor, Offset*/ offset = 0; array = null; temp = string.Empty; temp = right.Substring(right.IndexOf('(') + 1, right.IndexOf(')') - right.IndexOf('(') - 1); array = temp.Split(','); Factor = DbcDatabase.ParseStringToDouble(array[offset++]); Offset = DbcDatabase.ParseStringToDouble(array[offset++]); /*StartBit, SignalSize, ByteOrder, ValueType*/ StartBit = DbcDatabase.ParseStringToInt32(right.Substring(0, right.IndexOf('|'))); SignalSize = DbcDatabase.ParseStringToInt32(right.Substring(right.IndexOf('|') + 1, input.IndexOf('@') - input.IndexOf('|') - 1)); ByteOrder = right.Substring(right.IndexOf('@') + 1, 1).ToCharArray()[0]; ValueType = right.Substring(right.IndexOf('@') + 2, 1).ToCharArray()[0]; /*Receiver node_name*/ ReceiverNodeName = right.Split(' ')[right.Split(' ').Length - 1]; } return(this); }