Exemplo n.º 1
0
        public override IEnumerator ReceivePayload(VisualPayload payload)
        {
            foreach (var entry in CsvField.GetEntries(payload.Data))
            {
                string csvString = CsvField.GetValue(entry);

                if (string.IsNullOrEmpty(csvString))
                {
                    yield break;
                }

                var values = csvString.Split(',');

                NumberOfElementsTarget.SetValue(Mathf.FloorToInt(values.Length / 4f), entry);

                for (int i = 0; i < values.Length / 4; i++)
                {
                    Entry1Target.SetValue(values[4 * i], entry);
                    Entry2Target.SetValue(values[4 * i + 1], entry);
                    Entry3Target.SetValue(values[4 * i + 2], entry);
                    Entry4Target.SetValue(values[4 * i + 3], entry);

                    var iterator = PerEntryState.Transmit(payload);
                    while (iterator.MoveNext())
                    {
                        yield return(null);
                    }
                }
            }
        }
Exemplo n.º 2
0
        private static SqlCommand MakeCommand(SqlConnection connection, IEnumerable <ColumnDef> columnDefs, CsvRecord headers)
        {
            //TODO: ensure that all the not-nullable columns have corresponding headers (this will include the primary key fields).
            //TODO: ensure that all the columns in headers are actually in the table.

            var toReturn  = connection.CreateCommand();
            var tableName = columnDefs.First().TableName;

            /*
             * update [dbo].[DinerType]
             * set [Description] = @Description,
             * [Code] = @Code
             * where [Id] = @Id
             *
             * insert into [dbo].[DinerType] ([Id], [Description], [Code]) select @Id, @Description, @Code where not exists(select * from [dbo].[DinerType] where [Id] = @Id)
             */

            string setClause = GetNonPkSetClause(columnDefs, headers);

            string pkWhereClause = GetPkWhereClause(columnDefs);

            string insertColumnListClause = GetInsertColumnListClause(headers);

            string insertSelectColumnListClause = GetInsertSelectColumnListClause(headers);

            //the setClause might be an empty string when this is a linking table
            string commandText = "";

            if (!string.IsNullOrEmpty(setClause))
            {
                commandText = string.Format("update [dbo].[{0}] {1} {2}", tableName, setClause, pkWhereClause);
            }

            commandText += string.Format(
                @"
insert into [dbo].[{0}] ({2}) select {3} where not exists (select * from [dbo].[{0}] {1})",
                tableName, pkWhereClause, insertColumnListClause, insertSelectColumnListClause);

            if (columnDefs.Any(cd => cd.IsIdentity))
            {
                commandText = "set identity_insert [dbo].[" + tableName + "] on\r\n" + commandText +
                              "\r\nset identity_insert [dbo].[" +
                              tableName + "] off\r\n";
            }

            toReturn.CommandText = commandText;


            foreach (CsvField header in headers.Fields)
            {
                CsvField header1   = header;
                var      columnDef = columnDefs.First(cd => string.Equals(cd.ColumnName, header1.Value, StringComparison.OrdinalIgnoreCase));
                toReturn.Parameters.Add(MakeParameter(columnDef));
            }
            toReturn.CommandType = CommandType.Text;
            return(toReturn);
        }
Exemplo n.º 3
0
 // Token: 0x06000094 RID: 148 RVA: 0x00004DE8 File Offset: 0x00002FE8
 public LogIndex(string logFilePath, CsvTable table, CsvField columnToIndex, bool isActive)
 {
     this.logFilePath        = logFilePath;
     this.table              = table;
     this.columnToIndex      = columnToIndex;
     this.columnIdToIndex    = table.NameToIndex(columnToIndex.Name);
     this.normalizeMethod    = columnToIndex.NormalizeMethod;
     this.indexFileDirectory = Path.Combine(Path.GetDirectoryName(logFilePath), "index");
     this.isActive           = isActive;
 }
Exemplo n.º 4
0
 public void ParseAllFields()
 {
     for (int i = 0; i < this.unparsedRow.Schema.Fields.Length; i++)
     {
         CsvField csvField = this.unparsedRow.Schema.Fields[i];
         Type     type     = csvField.Type;
         string   name     = csvField.Name;
         this.ParseField(name, type);
     }
 }
Exemplo n.º 5
0
        /// <summary>
        /// Convert the current CSV to a csv object
        /// allows to set false the second parameter to indicate that there is no headers
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        private CsvContent ParseCsvData(string path)
        {
            var csv        = new CsvContent();
            var parser     = new ParseCsv(Configuration);
            var parsedFile = parser.FromFile(path);

            var enumerable = parsedFile as IList <string>[] ?? parsedFile.ToArray();

            if (Configuration.GetContainsHeaders())
            {
                var headrs  = enumerable.Take(1);
                var counter = 0;
                foreach (var headlist in headrs)
                {
                    foreach (var element in headlist)
                    {
                        var head = new CsvField();
                        head.Field    = element == null ? "" : element.ToString();
                        head.Position = counter;
                        csv.Headers.Add(head);
                        counter++;
                    }
                }
            }

            //skip the first row if contains headers
            var rows = enumerable.Skip((Configuration.GetContainsHeaders() ? 1 : 0));

            foreach (var row in rows)
            {
                var counter = 0;
                var rowline = new CsvRow();
                foreach (string element in row)
                {
                    rowline.FieldValue.Add(new CsvField {
                        Value = element == null ? "" : element.ToString(), Position = counter, Field = (csv.Headers.Any() ? csv.Headers.ElementAt(counter).Field:"")
                    });
                    counter++;
                }
                csv.Rows.Add(rowline);
            }
            return(csv);
        }
        /// <summary>
        /// Find and return the value of one of the mandatory (non-flight-property)
        /// fields
        /// </summary>
        /// <typeparam name="U"></typeparam>
        /// <param name="count"></param>
        /// <param name="name"></param>
        /// <param name="record"></param>
        /// <returns></returns>
        private U GetMandatoryFieldValue <U>(int count, string name, string[] record) where U : IConvertible
        {
            // Locate the field with this name
            CsvField field = _fields.FirstOrDefault(f => f.Name.Equals(name, StringComparison.OrdinalIgnoreCase));

            if (field == null)
            {
                // Not found, so an an error to the errors collection and throw
                // an exception
                string message = $"Missing field '{name}' at record '{count}'";
                LastError = new CsvReaderError {
                    Record = count, Message = message
                };
                throw new FieldNotFoundException(message);
            }

            U value;

            try
            {
                // Attempt to convert the value for this field to type U
                value = field.Get <U>(record);
            }
            catch (Exception ex)
            {
                LastError = new CsvReaderError
                {
                    Record    = count,
                    Message   = $"Error getting value for field '{name}' at record {count}",
                    Exception = ex.Message
                };

                throw;
            }

            return(value);
        }