예제 #1
0
        private int GetMaxLength(ILAttribute attr)
        {
            switch (attr.CDataType)
            {
            case CoreDataType.DATE:
                return(10);

            case CoreDataType.DATETIME:
                return(20);

            case CoreDataType.DECIMAL:
                return(attr.Length);

            case CoreDataType.VARCHAR:
                return(attr.Length);

            case CoreDataType.INT:
                return(11);    // 10 + Minus
            }
            return(0);
        }
예제 #2
0
        ///
        /// Generierung eines einzelnen Cases (zu ParserState)
        ///
        private string GenerateParseAttributeCase(ILInterface ifa, ILAttribute attr)
        {
            string code = "";

            code += $"case {ifa.ShortName}ParserState.IN_{attr.Name.ToUpper()}:\n";
            /// Vor Anführungszeichen
            code += $"    if(substate == {ifa.ShortName}ParserSubstate.INITIAL) {{\n";
            code += "        if(c == '\"') {\n";
            code += $"            substate = {ifa.ShortName}ParserSubstate.IN_STRING;\n";
            code += "        } else if(c == ';') {\n";
            // Zum nächsten Attribut weiterschalten
            if (attr == ifa.NonCalculatedAttributes.Last())
            {
                code += $"            state = {ifa.ShortName}ParserState.FINAL;\n";
            }
            else
            {
                var nextAttr = ifa.NonCalculatedAttributes[ifa.NonCalculatedAttributes.IndexOf(attr) + 1];
                code += $"            state = {ifa.ShortName}ParserState.IN_{nextAttr.Name.ToUpper()};\n";
            }
            code += "        } else {\n";
            code += $"            throw new InvalidDataException($\"Ungültiges Zeichen vor {ifa.Name}.{attr.Name} Zeile {{i}}\");\n";
            code += "        }\n";
            /// Nach Anführungszeichen
            code += $"    }} else if(substate == {ifa.ShortName}ParserSubstate.IN_STRING) {{\n";
            code += "        if(c == '\"') {\n";
            code += $"            content.{attr.Name} = buf;\n";
            code += "            buf = \"\";\n";
            code += $"            substate = {ifa.ShortName}ParserSubstate.INITIAL;\n";
            if (attr == ifa.NonCalculatedAttributes.Last())
            {
                code += $"            state = {ifa.ShortName}ParserState.FINAL;\n";
            }
            code += "        } else {\n";
            code += "            buf += c;\n";
            code += "        }\n";
            code += "    }\n";
            code += $"    break;\n";
            return(code.Indent("                    "));
        }
예제 #3
0
 private string GetSubstringIfNeeded(ILAttribute attr, ILInterface ifa)
 {
     return($".Substring(0, {GetMaxLength(attr)})");
 }